2011-11-09 64 views
0

我想从CSV文件导入数据,但某些单元格在字符串值中包含逗号。我怎样才能识别哪个逗号是分开的,哪些在单元格内容中?从CSV文件导入字符串单元格中的逗号

+2

复制 - http://stackoverflow.com/questions/769621/dealing-with-commas-in-a -csv-file –

回答

5

使用TextFieldParser:使用

using Microsoft.VisualBasic.FileIO; //Microsoft.VisualBasic.dll 
... 
using(var csvReader = new TextFieldParser(reader)){ 
    csvReader.SetDelimiters(new string[] {","}); 
    csvReader.HasFieldsEnclosedInQuotes = true; 
    fields = csvReader.ReadFields(); 
} 
+0

非常好,谢谢。 –

0

除非你对字符串进行了引号,否则你会非常困惑,因此“引号和逗号”分隔符风格。如果您有对出口设施的控制权,那么您必须选择“附上字符串引号”或将分隔符更改为波浪符号或克拉符号。

如果不好,那么你必须写一些代码。如果你检测到“a..z”,然后开始计算逗号,然后继续工作直到检测到[0..9],即使这样会有问题,因为人们可以在其中放置一个[0..9]文本。在最好这将是一个最好的努力过程。你将不得不知道你什么时候在使用字符,什么时候你不会进入字符。我怀疑甚至正则表达式会在这方面帮助你很多。

我能想到的唯一的其他事情就是运行数据并查找逗号。然后查看逗号前后的内容。如果您被字符包围,则用克拉“^”符号或代字符“〜”替代逗号。然后正常处理该文件,然后返回并用逗号替换备用字符。

祝你好运。

+0

那些包含“^”或“〜”字符的字符串值如何? –

+0

这里没有解决方案将是完美的。我发现在西方字符集中,颚化符号非常罕见,就书面英语而言,逗号的使用远远更为普遍。现在我的解决方案可能会有问题,这取决于三元组指标,但是要做什么,只能通过所给出的数据来完成。 – FlyingGuy

1

在一般情况下,不要打扰自己写的进口。

我对FileHelpers lib有很好的经验。 http://www.filehelpers.com/

事实上,我希望你的领域被引用。 Filehelpers支持开箱即用。

否则你可以做的事情不多。

0

使用FileHelper是defnitley的路要走。他们为你建立所有的逻辑做了很好的工作。我有同样的问题,我不得不解析一个逗号作为该领域的一部分的CSV文件。这个工具很好地完成了这项工作。所有你需要做的是对使用fillowing属性到外地

[FieldQuoted('"', QuoteMode.OptionalForBoth)] 

详情http://www.filehelpers.com/forums/viewtopic.php?f=12&t=391

相关问题