【问题标题】:Using File-Helper to handle extra comma in record CSV parser使用 File-Helper 处理记录 CSV 解析器中的额外逗号
【发布时间】:2015-02-03 15:33:01
【问题描述】:

我正在尝试处理 LLarge CSV 文件 - 1Gb,有时我可能会在其中获取列值包含“,”的记录。

例如

"A","col1","col2","col3","col4"

"B","Row1","Row1Col2","Row1Col3","Row1Col4"

"C","Row2","Row2,Col2","Row2,Col3","Row2Col4"

最初我使用了Split(,),但对于 C 行,由于列值中有多余的逗号,我得到了不正确的数据。

我决定使用FileHelpers,但它似乎无法正确提取值。

当我在 Excel 中打开文件时,它的格式正确(即在正确的列中显示每个值)。

我想提取双引号内的所有值。

【问题讨论】:

  • 这没有意义。列分隔符是逗号“,”吗?那么除了逗号之外,Excel 如何分割你的第三行呢?你向我们展示了所有" 个字符吗?
  • 我没有看到任何多余的逗号...
  • 我不明白您如何在 Excel 中获得正确的值。我拿了你的三行,创建了一个名为 test.csv 的文件,在 Excel 中打开它,得到 A 行和 B 行的 5 列以及 C 行的 7 列。这是意料之中的。软件如何神奇地判断列是分隔符还是数据的一部分?
  • 绅士们..来吧,这是一个真正的问题。不要拒绝投票或没有理由
  • @JoãoMiguelBrandão 如果你仔细看你会发现 Row2Col2 里面有逗号

标签: c# .net filehelpers fileparsing


【解决方案1】:

对于FileHelpers,你必须使用这个:FieldQuotedAttribute

FieldQuoted:表示该字段必须像 引用的字符串。 (您可以传递报价字符并且可以设置报价是否 像 Excel CSV 格式一样是可选的)

[FieldQuoted()] // Quoted with "
public string CustomerName;

【讨论】:

  • 您看到此 FieldQuoted 属性的版本。我所拥有的是 [FieldQuotedAttribute()] public string Address4;
  • 由于你的文件很大,请务必使用异步FileHelpersAsyncEngine。见here
  • Updated link for FileHelpersAsyncEngine
【解决方案2】:

不要重新发明轮子。

使用TextFieldParser。它会像 Excel 那样解析行。

【讨论】:

  • 谢谢。但是在快速谷歌之后,我发现 TextFieldParser 对于大文件来说非常昂贵。所以不能用。谢谢
  • 现在,问题已被编辑,所有字段都被引号包围,TextFieldParser 是完美匹配...
  • @sandeeMPS,为什么不先尝试一下,看看它是否适用于您的情况? “快速谷歌”可能会发现你一个人未经证实的随手评论。总是最好确认。您可能需要两分钟的时间来确定您的情况是否可以接受。
  • @CraigW。我想知道是否有人可以建议我在这种情况下如何使用 FileHelper 库
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-29
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多