21 language-agnostic csv parsing
给出这样的字符串:
a,"字符串,带",各种各样的,"价值观和一些",引用
在忽略引用部分中的逗号的同时,基于逗号分割它的好算法是什么?
输出应该是一个数组:
["a","string,with","various","values,and some","quoted"]
Jud*_*ngo 20
看起来你在这里得到了一些好的答案.
对于那些希望处理您自己的CSV文件解析的人,请听取专家的意见,不要推出自己的CSV解析器.
你的第一个想法是,"我需要在引号内处理逗号."
你的下一个想法是,"哦,废话,我需要在引号内处理引号.转义引号.双引号.单引号......"
这是一条通向疯狂的道路.不要自己写.找到一个具有广泛的单元测试覆盖率的图书馆,该图书馆覆盖了所有的硬件,并为您经历了地狱.对于.NET,请使用免费的FileHelpers库.
蟒蛇:
import csv
reader = csv.reader(open("some.csv"))
for row in reader:
    print row
如果我选择的语言没有提供一种不加思考地做到这一点的方法,那么我最初会考虑两个选项作为简单的出路:
预解析字符串中的逗号并将其替换为另一个控制字符,然后拆分它们,然后对数组进行后解析,以将之前使用的控制字符替换为逗号。
或者,将它们拆分为逗号,然后将结果数组解析为另一个数组,检查每个数组条目上的前导引号,并连接条目,直到到达终止引号。
然而,这些都是黑客行为,如果这是纯粹的“心理”练习,那么我怀疑它们将毫无帮助。如果这是一个现实世界的问题,那么了解该语言将会有所帮助,以便我们可以提供一些具体的建议。