2011-01-31 12 views
51

Czy istnieje sposób przekonwertowania łańcucha znaków oddzielonych przecinkami w tablicy w języku Ruby? Na przykład, gdybym miał taki ciąg:Jak przekonwertować ciąg znaków oddzielonych przecinkami na tablicę?

"one,two,three,four" 

Jak można go przekształcić w taką tablicę?

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

Dlaczego istnieje znacznik "CSV"? To nie działa na plikach '.csv', tylko łańcuch oddzielony przecinkami. –

+0

CSV oznacza wartości rozdzielane przecinkami. To jest twój ciąg. Jest to dość standardowy sposób przechowywania danych szeregowych lub tabelarycznych w formacie łańcuchowym. Nie musi koniecznie być odczytywany bezpośrednio z pliku. –

+0

@ Lèsemajesté: Ah, ok, pomyślałem, że CSV jest * tylko * plikiem. Dzięki! –

Odpowiedz

100

Użyj metody split to zrobić:

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

Jeśli chcesz ignorować wiodącej/końcowe spacje zastosowanie:

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

Jeśli chcesz analizować wiele linii (czyli Plik CSV) na osobne tablice:

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

Czy istnieje odpowiednik funkcji 'str_getcsv' w PHP, która automatycznie obsługuje cytowane CSV, wartości, które zawierają (z escaped) przecinki, wielowierszowe CSV itp.? –

+1

@ Lèse majesté: Tak, zobacz moją odpowiedź. – ephemient

+0

Co powiesz na "jeden, dwa, trzy, cztery" - czy istnieje szybki sposób na przycięcie przestrzeni? – vanboom

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

Powoduje to, że' nil' dla pustych elementów 'CSV.parse_line (" jeden, dwa, cztery ") # => [" jeden "," dwa ", zero," cztery "]' – Swards

Powiązane problemy