DotNet CsvHelper RFC4180模式转义双引号

f3temu5u  于 2023-10-13  发布在  其他
关注(0)|答案(1)|浏览(96)

我正在解析一个文件,其中包含以下数据作为一行的一部分。

12.0000¦6.11000¦LB¦9189AD510001¦Photo Insert 5\" x 5\"Iron¦¦¦23.00¦13.50¦5.00¦IN¦1726.31250¦

我在解析器上有以下配置

var parserConfig = new CsvConfiguration(CultureInfo.InvariantCulture)
    {
        Delimiter = fileMap.Delimiter,
        HasHeaderRecord = hasHeader,
        Mode = CsvMode.RFC4180,
        Escape = EscapeCharacter
    };

其中,是破管道(β),转义字符是反斜杠('')。当我解析数据时,它在包含9189AD510001的字段处停止解析,并表现得好像后面的一切都不存在。
我如何转义双引号,使文件将正确解析?我还尝试用另一个双引号来转义双引号,从而得到(“”)。
我需要使用RFC 4180模式,因为我还解析包含用引号5,6,52,in,1560,"cubic in",10,lb Package 的字段的文件。
编辑:示例Fiddle我们正在阅读多个文件结构并动态地进行所有Map。

67up9zun

67up9zun1#

唯一的方法是将CsvMode动态传递给CsvConfigurationCsvMode.Escape是专门创建来处理您给出的示例的,其中双引号用反斜杠(或任何其他指定的转义字符)转义,并且该字段不包含在双引号中,根据RFC 4180。不幸的是,没有办法让CsvMode.RFC4180正确处理这个问题。
如果你知道带有破管道的文件总是以这种方式格式化,你可以切换到fileMap.Delimiter

var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
    Delimiter = fileMap.Delimiter,
    HasHeaderRecord = hasHeader,
    Mode = fileMap.Delimiter == "¦" ? CsvMode.Escape : CsvMode.RFC4180,
    Escape = EscapeCharacter
};

相关问题