CSV 引用值,数据内部有换行符

CSV quoted values with line break inside data

此问题特定于 ChoETL CSV reader

举个例子

"Header1","Header2","Header3"
"Value1","Val
ue2","Value3"

(记事本++截图)

我一直在使用 ChoETL 选项,但我无法让它工作:

   foreach (dynamic e in new
                ChoCSVReader(@"test.csv")
                .WithFirstLineHeader()
                .MayContainEOLInData(true)
                .MayHaveQuotedFields()

                //been playing with these too
                //.QuoteAllFields()
                // .ConfigureHeader(c => c.IgnoreColumnsWithEmptyHeader = true)
                //.AutoIncrementDuplicateColumnNames()
                //.ConfigureHeader(c => c.QuoteAllHeaders = true)
                //.IgnoreEmptyLine()

                )
            {
                System.Console.WriteLine(e["Header1"]);
            }

这失败了:

Missing 'Header2' field value in CSV file

错误因 reader 配置而异

阅读本文的正确配置是什么?

这是处理其中一种情况的错误(即 header 有引号 - csv2 文本)。应用修复。拿 ChoETL.NETStandard.1.2.1.35-beta1 包试一试。

string csv1 = @"Header1,Header2,Header3
""Value1"",""Val
ue2"",""Value3""";

string csv2 = @"""Header1"",""Header2"",""Header3""
""Value1"",""Val
ue2"",""Value3""";

string csv3 = @"Header1,Header2,Header3
Value1,""Value2"",Value3";

using (var r = ChoCSVReader.LoadText(csv1)
    .WithFirstLineHeader()
    .MayContainEOLInData(true)
    .QuoteAllFields())
    r.Print();

using (var r = ChoCSVReader.LoadText(csv2)
    .WithFirstLineHeader()
    .MayContainEOLInData(true)
    .QuoteAllFields())
    r.Print();

using (var r = ChoCSVReader.LoadText(csv3)
    .WithFirstLineHeader()
    .MayContainEOLInData(true)
    .QuoteAllFields())
    r.Print();

示例 fiddle:https://dotnetfiddle.net/VubCDR