我正在解析一个包含以下数据作为行一部分的文件。
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
。
编辑:示例小提琴 我们正在读取多个文件结构并动态地进行所有映射。
唯一可以做到的方法是将
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
};