拆分字符串忽略引用的部分

21 language-agnostic csv parsing

给出这样的字符串:

a,"字符串,带",各种各样的,"价值观和一些",引用

在忽略引用部分中的逗号的同时,基于逗号分割它的好算法是什么?

输出应该是一个数组:

["a","string,with","various","values,and some","quoted"]

Jud*_*ngo 20

看起来你在这里得到了一些好的答案.

对于那些希望处理您自己的CSV文件解析的人,请听取专家的意见,不要推出自己的CSV解析器.

你的第一个想法是,"我需要在引号内处理逗号."

你的下一个想法是,"哦,废话,我需要在引号内处理引号.转义引号.双引号.单引号......"

这是一条通向疯狂的道路.不要自己写.找到一个具有广泛的单元测试覆盖率的图书馆,该图书馆覆盖了所有的硬件,并为您经历了地狱.对于.NET,请使用免费的FileHelpers库.


Mar*_*son 6

蟒蛇:

import csv
reader = csv.reader(open("some.csv"))
for row in reader:
    print row
Run Code Online (Sandbox Code Playgroud)


Mar*_*tin 2

如果我选择的语言没有提供一种不加思考地做到这一点的方法,那么我最初会考虑两个选项作为简单的出路:

  1. 预解析字符串中的逗号并将其替换为另一个控制字符,然后拆分它们,然后对数组进行后解析,以将之前使用的控制字符替换为逗号。

  2. 或者,将它们拆分为逗号,然后将结果数组解析为另一个数组,检查每个数组条目上的前导引号,并连接条目,直到到达终止引号。

然而,这些都是黑客行为,如果这是纯粹的“心理”练习,那么我怀疑它们将毫无帮助。如果这是一个现实世界的问题,那么了解该语言将会有所帮助,以便我们可以提供一些具体的建议。