【发布时间】:2011-06-11 07:05:23
【问题描述】:
我有一个 CSV 文件(不是我设计的,我现在无法更改,也永远无法更改),其中包含如下行:
"Surname, Firstname", yes, no, somestring, whatever, etc
正如您在此处看到的,第一个 , 不是我想要拆分字符串的逗号。请注意,这个特殊的逗号包含在引号内。
因此,一个简单的string.split(',') 显然是行不通的,因为它会给我一个长度为 7 的数组,而不是 6。
有没有办法解决这个问题?我正在考虑使用正则表达式来拆分字符串,但我在正则表达式中的能力不足,无法想出一种模式,它只会在不包含在引号内的逗号上进行拆分。
我可以通过逐个字符地读取每个字符串来想出丑陋、骇人的方法,但这必须是最后的手段,因为我确信有更好的方法!
【问题讨论】:
-
这看起来像来自 Excel 的 .csv。总是很有趣。当数据包含引号和逗号时更有趣......
-
它实际上不是来自 Excel,但是是的,很有趣! :) 它来自网络上的某个位置,我的程序读取文件并尝试解析它。
-
一次读取一个字符不一定是丑陋的黑客行为。我建议找一个 C# CSV 解析器,因为我确信这样的东西已经存在了。
-
作为一个丑陋的 hack 解决方案,您始终可以读取元素的第一个字符,如果它是一个引号,请推进您的计数器并将下一个索引值添加到前一个并继续。
-
+1 @Brian Donovan。如果它不起作用,你的代码有多优雅都没关系。此外,如果值包含
"字符会发生什么 - 它们是否加倍?逃跑了?