我似乎无法处理我得到的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工作但是:
399,00
”和类似的值拆分为两个字段。任何想法如何处理它?</ p>
答案 0 :(得分:2)
我一直在使用Lumen,CommonLibrary,FileHelpers等。我最终得到了TextFieldParser
类(来自Visual Basic命名空间,但可以在C#中使用而没有任何问题)。我建议你尝试一下。唯一的缺点是它相对较慢。但它似乎很好地应对了边缘情况。
我甚至发明了一个技巧,使用明显无效的CSV文件(“”“等; OpenOffice Calc无法正确处理它们) - 当我遇到这样一行并获得MalformedLineException
时,我仍然会在catch
块中将HasFieldsEnclosedInQuotes
属性设置为false
进行解析,以进行更改。
它会正确地分割线,只是将所有值保留在双撇号中。我所要做的就是“手动”删除这些双引号。
答案 1 :(得分:2)
如果问题似乎是双引号,你可以通过用双引号替换双引号来预处理每一行:
line = line.Replace( "\"\"", "\"" );
处理完整个文件后,您可以让其他任何CSV处理器处理。 无论如何,编写自己的文件可能会更容易。