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

Jas*_*ett 3 ruby csv

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

csv_string = 'Value 1,Value 2,"Hey, it\'s value 3!",Value 4 has "some quotes"'
Run Code Online (Sandbox Code Playgroud)

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

Jör*_*tag 9

对于解析CSV,Ruby附带了csv库:

require 'csv'

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

不幸的是,您的字符串实际上并不包含有效的CSV,因此您真正得到的是以下异常:

# CSV::MalformedCSVError: Illegal quoting on line 1.
Run Code Online (Sandbox Code Playgroud)

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

或者,您可以将数据更改为有效的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"']]
Run Code Online (Sandbox Code Playgroud)