Xwhelpare承诺在theWalidCsv

问题描述 投票:0回答:1

我们的客户开始报告从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个回答
0
投票

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

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);
        }
    }
}
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.