【问题标题】:CSVHelper BadDataFound in a valid csvCSVHelper BadDataFound 在有效的 csv 中
【发布时间】:2019-03-15 11:02:06
【问题描述】:

我们的客户开始报告从 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[] 吗?或者你能建议不同的解析来做到这一点吗?

谢谢

【问题讨论】:

    标签: c# csv csvhelper


    【解决方案1】:

    我认为是导致问题的行中间的引用。尝试将配置设置为忽略引号。

    using (var reader = new StreamReader(filePath, Encoding.Default))
    {
        using (var csv = new CsvReader(reader))
        {
            csv.Configuration.Delimiter = ";";
            csv.Configuration.IgnoreQuotes = true;
    
            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);
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多