【发布时间】:2021-01-05 14:32:52
【问题描述】:
我有一个 csv 文件,它有一个标题行和 2 个数据行,但有时我们会从源中将数据行拆分为多行,在下面的情况下使其成为 3 行。
因此,我的 SSIS 包在通过 C# 代码处理此 csv 文件时失败,因为它将“ETF”行视为新行。我目前正在使用以下代码将所有数据添加到数组列表中。
string sLine;
ArrayList arrText = new ArrayList();
StreamReader objReader = new StreamReader(filepath);
do
{
sLine = objReader.ReadLine();
if (sLine != null)
arrText.Add(sLine);
}
while (sLine != null);
我是 C# 新手,所以任何人都可以建议我们如何处理这种情况,以便我的代码可以处理这个文件 2 只有 2 行而不是 3 行并将其加载到数据库中。
【问题讨论】:
-
您尝试过简单的文本替换吗?
-
您似乎想替换双引号字符
"内的任何 CRLF。这很容易(正则表达式可能是要走的路),但是如果"出现在字段中会发生什么,以及如何逃脱?这可能会打乱你的逻辑。 -
SSIS 如果您使用内置导入,则可以选择跳过的行数。或者将您的文件标记为文本限定(不确定 C# 如何做到这一点),但文本限定文件应该忽略限定符之间的任何内容,至少在 SSIS 数据流任务中,但如果它忽略换行符则不是 100%。
-
@canton7 我会说一个正确格式的正则表达式来解析 CSV 是相当复杂的,特别是如果您考虑多行文本(文本分成至少 3 行)和转义双引号 ("")。我会用正确完成的 csv 库解析文本,用空格替换换行符,然后重写 csv
-
@canton7 - 是的,我需要替换双引号字符内的任何 CRLF.. 但即使我使用替换来执行此操作,下一个任务也是让“ETF”在第三行成为第二行的一部分,以便 C# 知道只有 2 行并将其导入 DB 并且不会失败