我发现了FasterCSV(1.5.0)的CSV解析问题,这似乎是一个真正的错误,但我希望有一个解决方法。
基本上,当字段用引号括起来时,在分隔符后面添加一个空格(在我的例子中是逗号)会生成MalformedCSVError
。
这是一个简单的例子:
# No quotes on fields -- works fine
FasterCSV.parse_line("one,two,three")
=> ["one", "two", "three"]
# Quotes around fields with no spaces after separators -- works fine
FasterCSV.parse_line("\"one\",\"two\",\"three\"")
=> ["one", "two", "three"]
# Quotes around fields but with a space after the first separator -- fails!
FasterCSV.parse_line("\"one\", \"two\",\"three\"")
=> FasterCSV::MalformedCSVError: Illegal quoting on line 1.
我是否生气,或者这是FasterCSV中的错误?
答案 0 :(得分:14)
MalformedCSVError
在这里是正确的。
不会忽略CSV格式的前导/尾随空格,它们被视为字段的一部分。所以这意味着你已经开始了一个带空格的字段,然后在该字段中包含未转义的双引号,这将导致非法的引用错误。
也许这个库比你用过的其他库更严格。
答案 1 :(得分:2)
也许您可以将:col_sep:选项设置为','以使其解析这样的文件。
答案 2 :(得分:2)
我曾希望:col_sep
选项可能允许正则表达式,但它似乎用于读写,这是一种耻辱。 documentation并没有太大的希望,您的需求可能比通过请求更改或提交补丁满足要求更快; - )
如果您明确调用#parse_line
,则可以随时调用
gsub(/,\s*/, ',')
输入行上的。如果您预期引用字符串中可能存在逗号空间,那么正则表达式可能需要显着改变。 (我建议在这里使用合适的标签重新发布这样的问题,并且如果是这样的话,让RegEx mavens松散吧。)