2009-05-04 15 views
0

Sagen wir, ich habe eine Zeichenfolge mit Komma getrennte Werte in einfache Anführungszeichen eingeschlossen spalten, die so kann oder nicht Kommas enthalten,:Wie einzelne zitierte Komma getrennte Werte enthält Kommas in Ruby

"'apples,bananas','lemons'" 

und ich möchte aufgeteilt, dass in ein Array

["apples,bananas", "lemons"] 

Offenbar, wenn ich die Zeichenfolge split(',') ich

[ "'apples", "bananas'", "lemons" ] 

was ich nicht verstehe. Die einzige Möglichkeit, dies zu tun, ist

a = [] 
s = "'apples,bananas','lemons'" 
s.scan(/\'([^\']+)\'/){|i| a << i[0]} 

# result is ["apples,bananas", "lemons"] 

Aber gibt es eine elegantere Art und Weise? Gibt es etwas mit der Split-Methode, das ich nicht bekomme, was das seltsame Ergebnis verursacht?

Antwort

6

Eigentlich Split funktioniert so, wie es soll. Aber es scheint, als ob Sie versuchen, durch Komma getrennte Werte zu trennen. Und es gibt bereits eine Lösung für sie in Rubys stdlib:

http://www.ruby-doc.org/stdlib/libdoc/csv/rdoc/index.html

Oder wenn Sie ein externes libray wollen (das angeblich besser, schneller, ...) verwenden FasterCSV.

+0

Die CSV-Bibliothek scheint hilfreich zu sein. Wenn die Zeichenfolge wie folgt formatiert wäre: s = "\" Äpfel, Bananen \ ", Zitronen" (mit doppelten doppelten Anführungszeichen statt einfachen Anführungszeichen), könnte ich CSV :: parse_line (s) machen und das gewünschte Ergebnis erhalten. Dies könnte eine mögliche Lösung sein. –

+2

Zumindest mit FasterCSV können Sie die vorhandene Zeichenfolge ohne Neuformatierung analysieren. require 'schneller_csv'; "'Äpfel, Bananen', 'Zitronen'. parse_csv (: quote_char => ''") ergibt ["Äpfel, Bananen", "Zitronen"], nach denen Sie suchen, glaube ich. –

+0

Greg, du hast Recht. 1 für dieses Rezept. –

2

Das Ergebnis von #split ist völlig normal, die Methode soll die Zeichenfolge in keinster Weise in Token bringen. Wählen Sie die Art und Weise, die Sie wissen, die über eine elegante funktioniert.

Verwandte Themen