2011-01-31 17 views
51

¿Hay alguna manera de convertir una cadena separada por comas en una matriz en Ruby? Por ejemplo, si tuviera una cadena como esta:¿Cómo convierto una cadena separada por comas en una matriz?

"one,two,three,four" 

¿Cómo la convertiría en una matriz como esta?

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

¿Por qué existe la etiqueta "csv"? Esto no está operando en archivos '.csv', solo una cadena separada por comas. –

+0

CSV significa valores separados por comas. Esa es tu cuerda. Es una forma bastante estándar de almacenar datos en serie o tabulares en formato de cadena. No necesariamente debe leerse directamente desde un archivo. –

+0

@ Lèsemajesté: Ah, vale, solo pensé que CSV era * solo * el archivo. ¡Gracias! –

Respuesta

100

utilizar el método de split hacerlo:

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

Si desea ignorar líder/arrastrando el uso de espacio en blanco:

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

Si desea analizar múltiples líneas (es decir, una Archivo CSV) en matrices separadas:

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

¿Existe una función equivalente a 'str_getcsv' de PHP que manejará automáticamente los CSV cotizados, valores que incluyen comas (escapadas), CSV multilínea, etc.? –

+1

@ Lèse majesté: Sí, ver mi respuesta. – ephemient

+0

¿Qué tal "uno, dos, tres, cuatro"? ¿Hay alguna manera rápida de recortar el espacio? – 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

Esto devolverá' nil' para elementos vacíos 'CSV.parse_line (" uno, dos ,, cuatro ") # => [" uno "," dos ", nada," cuatro "]' – Swards

Cuestiones relacionadas