我有一个CSV文件(我没有设计,我现在也无法更改,也无法更改)包含如下所示的行:
"Surname, Firstname", yes, no, somestring, whatever, etc
正如您在此处所看到的,第一个,
不是我要分割字符串的逗号。请注意,此特定逗号包含在引号内。
因此,一个简单的string.split(',')
显然不起作用,因为它会为我提供一个长度为7的数组,而不是6。
有没有办法解决这个问题?我正在考虑使用正则表达式来分割字符串,但是我在正则表达式中没有足够的能力去想一个只会在引号中没有用逗号分隔的模式。
我可以通过char读取每个字符串char来考虑丑陋,黑客的方法,但这必须是最后的手段,因为我确信有更好的方法来做到这一点!
答案 0 :(得分:5)
您可以使用TextFieldParser class轻松处理此问题。只需将HasFieldsEnclosedInQuotes
设置为true即可。
答案 1 :(得分:2)
我建议使用CSV解析器库 - 还有其他一些你不会想到的情况(新行作为引用字段的一部分)。
VisualBasic
命名空间有一个很好的库,可以提供帮助 - TextFieldParser
。
答案 2 :(得分:1)
我知道这里有很多人认为不应该使用逐个字符的比较,并且会强烈反对我,但我不相信像微软这样的公司不是唯一应该这样做的公司。编程。
Afterall,Split会逐个字符地进行比较,那么为什么当你调用的现有代码并不完全符合你想要的时候呢?为什么它不那么难看呢?
无论如何,我的方法是编写自己的代码。我已在http://www.blackbeltcoder.com/Articles/files/reading-and-writing-csv-files-in-c在线发布了代码。