使用Ruby拆分CSV样式的字符串

时间:2011-01-12 19:51:52

标签: ruby csv

我有已经加载到内存中的CSV文件中的数据。所以我可能会有这样的事情:

csv_string = 'Value 1,Value 2,"Hey, it\'s value 3!",Value 4 has "some quotes"'

显然我不想做csv_string.split(",")。由于看起来像这样拆分CSV风格的字符串可能不是那么罕见的需求,我想知道是否已经有一个解决方案。

2 个答案:

答案 0 :(得分:9)

为解析CSV,Ruby附带csv库:

require 'csv'

CSV.parse(csv_string)
# => [['Value 1', 'Value 2', "Hey, it's value 3!", 'Value 4 has "some quotes"']]

很遗憾,您的字符串实际上并不包含有效的CSV,因此

# CSV::MalformedCSVError: Illegal quoting on line 1.

由于您的数据实际上并不符合任何通用标准,因此显然没有通用的解析器,您必须自己编写。

或者,您可以将数据更改为有效的CSV,例如:

c = %q[Value 1,Value 2,"Hey, it's value 3!","Value 4 has ""some quotes"""]

CSV.parse(c)
# => [['Value 1', 'Value 2', "Hey, it's value 3!", 'Value 4 has "some quotes"']]

答案 1 :(得分:0)

on Ruby 1.9.x FasterCSV是默认的csv引擎,如果你使用的是1.8.x,你需要包含gem,但是看看foreach和row解析能力: http://fastercsv.rubyforge.org/