我们的客户开始报告从 CSV 文件导入数据时出现的错误。看到 csv 文件后,我们决定从自定义 CSV 解析器切换到 CSVHelper,但 CSV Helper 无法读取一些有效的 CSV 文件。
用户可以将任何 csv 文件加载到我们的应用程序中,因此我们不能使用任何类映射器。我们使用 csv.Parser.Read 来读取 string[] dataRows。我们无法更改此 csv 文件的生成方式,它是由另一家公司生成的,当此文件采用有效格式时,我们无法说服他们更改生成方式。
如果我们使用 BadDataFound 处理程序,则 context.RawRecord 为:
"1000084;SMRSTOVACI TRUBICE PBF 12,7/6,4 (1/2\") H;"
csv 文件中的数据行是:
1000084;SMRSTOVACI TRUBICE PBF 12,7/6,4 (1/2") H;;;ks;21,59;26,46;21.00;;;8591735015183;8591735015183;Technik;Kabelový spojovací materiál;Označování, smršťování, izolace;Bužírky, smršťovačky;
这应该是 RFC 4180 规定的有效 csv 文件。
代码是:
using (var reader = new StreamReader(filePath, Encoding.Default))
{
using (var csv = new CsvReader(reader))
{
csv.Read();
csv.ReadHeader();
List<string> badRecord = new List<string>();
csv.Configuration.BadDataFound = context => badRecord.Add(context.RawRecord);
header = csv.Context.HeaderRecord.ToList();
while (true)
{
var dataRow = csv.Parser.Read();
if (dataRow == null)
{
break;
}
data.Add(dataRow);
}
}
}
您能帮我配置 CSVHelper 以便能够将此行加载到 string[] 吗?或者你能建议不同的解析来做到这一点吗?
谢谢