Wie konvertiere ich eine durch Kommas getrennte Zeichenfolge in ein Array?


75

Gibt es eine Möglichkeit, eine durch Kommas getrennte Zeichenfolge in Ruby in ein Array zu konvertieren? Wenn ich zum Beispiel eine Zeichenfolge wie diese hätte:

"one,two,three,four"

Wie würde ich es in ein Array wie dieses konvertieren?

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

Warum gibt es das "csv" -Tag? Dies funktioniert nicht mit .csvDateien, sondern nur mit einer durch Kommas getrennten Zeichenfolge.
Mark Szymanski

1
CSV steht für Comma Separated Values. Das ist deine Saite. Es ist eine ziemlich übliche Methode zum Speichern von seriellen oder tabellarischen Daten im Zeichenfolgenformat. Es muss nicht unbedingt direkt aus einer Datei gelesen werden.
Lèse Majesté

@ Lèsemajesté: Ah, ok, ich dachte nur, dass CSV nur die Datei ist. Vielen Dank!
Mark Szymanski

Antworten:


144

Verwenden Sie dazu die folgende splitMethode:

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

Wenn Sie führende / nachfolgende Leerzeichen ignorieren möchten, verwenden Sie:

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

Wenn Sie mehrere Zeilen (dh eine CSV-Datei) in separate Arrays analysieren möchten:

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

Gibt es eine äquivalente Funktion zu PHPs str_getcsv, die automatisch CSVs in Anführungszeichen, Werte wie (Escape-) Kommas, mehrzeilige CSVs usw. verarbeiten?
Lèse Majesté

1
@ Lèse majesté: Ja, siehe meine Antwort.
Ephemient

Was ist mit "eins, zwei, drei, vier" - gibt es eine schnelle Möglichkeit, den Raum zu verkleinern?
Vanboom

5
@vanboom "one, two, three, four".split(/\s*,\s*/). Split funktioniert auch mit einem regulären Ausdruck. Alternativ können Sie die mapMethode verwenden, wenn Sie diese Syntax bevorzugen:"one, two, three, four".split(',').map(&:strip)
Kevin Sylvestre

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

Dies wird nilfür leere Elemente zurückkehrenCSV.parse_line("one,two,,four") #=> ["one", "two", nil, "four"]
Mark Swardstrom

9
>> "one,two,three,four".split ","
=> ["one", "two", "three", "four"]
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.