使用FasterCSV gem解决CSV解析的基本问题
我发现了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中的一个错误?
MalformedCSVError
在这里是正确的。
CSV格式的前导/尾随空格不会被忽略,它们被视为字段的一部分。 因此,这意味着您已经启动了一个带空格的字段,然后在该字段中包含未转义的双引号,这将导致非法引用错误。
也许这个库比你使用的其他库更严格。
也许您可以将:col_sep:选项设置为’,’以使其解析这样的文件。
我曾希望:col_sep
选项可能允许使用正则表达式,但它似乎用于读取和写入,这是一种耻辱。 文档并没有太多的希望,您的需求可能比通过请求更改或提交补丁可以满足更直接;-)
如果您明确地调用#parse_line
,那么您可以随时调用
gsub(/,\s*/, ',')
在你的输入行。 如果您预期引用字符串中存在逗号空间的可能性,那么正则表达式可能需要显着改变。 (我建议在这里使用合适的标签重新发布这样一个问题,如果是这样的话,让RegEx mavens松散吧)。