使用 FileHelpers 处理引号

Posted

技术标签:

【中文标题】使用 FileHelpers 处理引号【英文标题】:Handling quotes with FileHelpers 【发布时间】:2011-07-01 22:08:53 【问题描述】:

我正在使用出色的 FileHelpers 库来导入许多 csv 文件,但遇到了问题。我有一个包含这三个示例行的 csv 文件

id,text,number
120,"good line this one",789
121,""not good" line", 4456
122,,5446

还有这个(示例)类

  [IgnoreFirst(1)]
  [IgnoreEmptyLines()]
  [DelimitedRecord(",")]
  public sealed class JOURNAL
  
    public Int32 ID;

    [FieldQuoted('"', QuoteMode.AlwaysQuoted, MultilineMode.NotAllow)]
    public string TEXT;

    public Int32? NUMBER;
  

QuoteMode.AlwaysQuoted 的问题是 ID 122 将失败并出现错误:

“TEXT”字段不以 QuotedChar 在第 3 行。您可以使用 FieldQuoted(QuoteMode.OptionalForRead) 允许可选的引用字段

切换到QuoteMode.OptionalForRead 将失败,并出现 id 121 的错误:

字段 TEXT 被引用,但 引用的字符:“ not 就在 分隔符(您可以使用 [FieldTrim] 避免这个错误)

那么我该如何处理包含没有引号的空字段和在文本中带有额外引号的带引号的文本字段的 csv?

【问题讨论】:

【参考方案1】:

这看起来像是我们不支持的情况,让我添加一个测试用例并让它在两种模式下都工作,对于第一个我们需要验证语义是否正确,即。如果 QuoteMode.AlwaysQuoted 可以允许,或者必须是“”,但第二个选项必须有效:) 干杯

【讨论】:

在 *** 上为开发人员找到答案真是太好了 :) 澄清一下,您是否会修改 FileHelpers 以便 QuoteMode.AlwaysQuoted 允许同时使用 , 和 ,"",或者您会修改这样 QuoteMode.OptionalForRead 将允许 ""bad string" he said",即嵌套引号? 我肯定会修复 QuoteMode.OptionalForRead 并且我们可以一起分析是否也必须允许第一个场景(再想一想,AlwaysQuoted 的语义一定不允许 ,, )你怎么办认为? 我同意 AlwaysQuoted 不允许使用 ,,。总是建议,嗯,总是:) 检查代码并添加TestCase后,问题是引用字段内的“必须转义,即必须像.net中的@”一样出现两次。在你的行中你的例子必须是: 121,"""not good"" line", 4456 无论如何我们可以添加一个新的模式或参数来允许更轻松地检查引用的字符串一个问题可能是例如 121,""not good", line" , 4456 是否为此添加了任何模组?我对以下字段有同样的问题 - [""test L"] 和 [""text1" text2"] 和 ["text""] 和 ["txt "t""]

以上是关于使用 FileHelpers 处理引号的主要内容,如果未能解决你的问题,请参考以下文章

忽略FileHelpers中的属性

Filehelpers 无需 DLL 即可发布 Release 文件

CSV中的列标题使用fileHelpers库?

FileHelpers 选项卡“\t”分隔阅读器

使用 C# 将 FileHelpers 数据排序到 SQl 服务器中的不同列中

filehelpers - 解析可变行长