CSV + FileHelpers + Double Quotes =梦魇

时间:2011-09-06 12:32:33

标签: c# parsing csv filehelpers

我似乎无法处理我得到的CSV。这是银行生成的文件,如下所示:

"000,""PLN"",""XYZ"",""2011-08-31"",""2011-08-31"",""0,00"""
1,""E"",""2011-08-30"",""2011-08-31"",""2011-08-31"",""399,00"",""0000103817846977"",""UZNANIE OTRZYMANE ELIXIR"",""23103015080000000550217023"",""XXX"",""POLISA UBEZPIECZENIA NR XXX  "",""000""
3,""E"",""2011-08-31"",""2011-08-31"",""2011-08-31"",""1433,00"",""0000154450232753"",""UZNANIE OTRZYMANE ELIXIR"",""000"",""XXX"",""POLISA UBEZPIECZENIA XXX  "",""000""

(我更改了所有敏感信息)。

我从早上起就试图解析它,但没有什么大不了的。我使用了LINQ to CSV示例在网上发现了somwhere,CodeProject一个(两个都抛出了一个错误,表示CSV已损坏)而且我以FileHelpers结束了SEEMS工作但是:

  1. 它将“399,00”和类似的值拆分为两个字段。
  2. 当我使用[(FieldQuoted()]属性时,它都会变成地狱,因为所有字段都是用双引号引用的。我怀疑这就是其他解析器无法工作的原因。
  3. 任何想法如何处理它?<​​/ p>

2 个答案:

答案 0 :(得分:2)

我一直在使用Lumen,CommonLibrary,FileHelpers等。我最终得到了TextFieldParser类(来自Visual Basic命名空间,但可以在C#中使用而没有任何问题)。我建议你尝试一下。唯一的缺点是它相对较慢。但它似乎很好地应对了边缘情况。

我甚至发明了一个技巧,使用明显无效的CSV文件(“”“等; OpenOffice Calc无法正确处理它们) - 当我遇到这样一行并获得MalformedLineException时,我仍然会在catch块中将HasFieldsEnclosedInQuotes属性设置为false进行解析,以进行更改。

它会正确地分割线,只是将所有值保留在双撇号中。我所要做的就是“手动”删除这些双引号。

答案 1 :(得分:2)

如果问题似乎是双引号,你可以通过用双引号替换双引号来预处理每一行:

line = line.Replace( "\"\"", "\"" );

处理完整个文件后,您可以让其他任何CSV处理器处理。 无论如何,编写自己的文件可能会更容易。