DotNet CsvHelper RFC4180 模式转义双引号

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

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

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
的字段处停止解析,并且就像之后的所有内容都不存在一样。

如何转义双引号以便文件能够正确解析?我还尝试用另一个双引号转义双引号,从而得到 ("")。

我需要使用 RFC4180 模式,因为我还解析包含用引号括起来的字段的文件

5,6,52,in,1560,"cubic in",10,lb

编辑:示例小提琴 我们正在读取多个文件结构并动态地进行所有映射。

.net csv csvhelper
1个回答
0
投票

唯一可以做到的方法是将

CsvMode
动态传递给您的
CsvConfiguration
CsvMode.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
};

© www.soinside.com 2019 - 2024. All rights reserved.