2011-01-31 6 views
51

Есть ли способ конвертировать строку, разделенную запятой, в массив в Ruby? Например, если бы у меня была строка вроде этого:Как преобразовать строку, разделенную запятыми, в массив?

"one,two,three,four" 

Как бы преобразовать ее в массив?

["one", "two", "three", "four"] 
+0

Почему существует тег «csv»? Это не работает с файлами '.csv', а просто разделяется запятыми. –

+0

CSV обозначает значения, разделенные запятыми. Вот что такое ваша строка. Это довольно стандартный способ хранения последовательных или табличных данных в строчном формате. Это не обязательно нужно читать непосредственно из файла. –

+0

@ Lèsemajesté: Ах, хорошо, я просто подумал, что CSV был * просто * файлом. Благодаря! –

ответ

100

Используйте метод split, чтобы сделать это:

"one,two,three,four".split(',') 
# ["one","two","three","four"] 

Если вы хотите игнорировать начальные/конечные пробельные использование:

"one , two , three , four".split(/\s*,\s*/) 
# ["one", "two", "three", "four"] 

Если вы хотите, чтобы разобрать несколько строк (т.е. CSV) в отдельные массивы:

require "csv" 
CSV.parse("one,two\nthree,four") 
# [["one","two"],["three","four"]] 
+0

Существует ли эквивалентная функция для PHP 'str_getcsv', которая будет автоматически обрабатывать цитируемые CSV, значения, которые включают (экранированные) запятые, многострочные CSV и т. Д.? –

+1

@ Lèse majesté: Да, см. Мой ответ. – ephemient

+0

Как насчет «одного, двух, трех, четырех» - есть ли быстрый способ обрезать пространство? – vanboom

15
require 'csv' 
CSV.parse_line('one,two,three,four') #=> ["one", "two", "three", "four"] 
+0

Это вернет' nil' для пустых элементов 'CSV.parse_line (« один, два, четыре ») # => [" один "," два ", ноль," четыре "]' – Swards