Разделить строку в стиле CSV с помощью Ruby - PullRequest
3 голосов
/ 12 января 2011

У меня есть данные из файла CSV, который уже загружен в память. Так что у меня может быть что-то вроде этого:

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

Очевидно, я не хочу делать csv_string.split(","). Поскольку кажется, что разбиение строки в стиле CSV таким способом может быть не редкостью, мне было интересно, есть ли решение, которое уже есть.

Ответы [ 2 ]

9 голосов
/ 12 января 2011

Для анализа 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"']]
0 голосов
/ 12 января 2011

на Ruby 1.9.x FasterCSV - это движок csv по умолчанию, если вы используете 1.8.x, вам нужно будет включить гем, но взгляните на возможности foreach и парсинга строк: http://fastercsv.rubyforge.org/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...