2011-01-31 16 views
51

Esiste un modo per convertire una stringa separata da virgola in una matrice in Ruby? Ad esempio, se avessi una stringa come questa:Come si converte una stringa separata da virgola in una matrice?

"one,two,three,four" 

Come posso convertirlo in un array come questo?

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

Perché c'è il tag "csv"? Questo non funziona su file '.csv', solo una stringa separata da virgole. –

+0

CSV è l'acronimo di Valori separati da virgola. Questo è ciò che è la tua stringa. È un modo abbastanza standard per archiviare dati seriali o tabulari in formato stringa. Non deve necessariamente essere letto direttamente da un file. –

+0

@ Lèsemajesté: Ah, ok, ho solo pensato che CSV fosse * solo * il file. Grazie! –

risposta

100

utilizzare il metodo split per farlo:

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

Se si desidera ignorare leader/finali utilizzo spazi:

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

Se si desidera analizzare più linee (vale a dire un File CSV) in array separati:

+0

Esiste una funzione equivalente a 'str_getcsv' di PHP che gestirà automaticamente CSV quotati, valori che includono virgole (con escape), CSV multilinea, ecc.? –

+1

@ Lèse majesté: Sì, guarda la mia risposta. – ephemient

+0

Che dire di "uno, due, tre, quattro" - c'è un modo rapido per tagliare lo spazio? – 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

Questo restituirà' nil' per elementi vuoti 'CSV.parse_line (" one, two ,, four ") # => [" one "," two ", nil," four "]' – Swards

Problemi correlati