Domanda

Supponi di avere una stringa con valori delimitati da virgole racchiusi tra virgolette singole che possono o meno includere virgole, come questa:

"'apples,bananas','lemons'"

e voglio dividerlo in un array

["apples,bananas", "lemons"]

Apparentemente, se divido (',') la stringa che ottengo

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

che non capisco. L'unico modo per farlo che ho escogitato è

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

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

Ma c'è un modo più elegante? C'è qualcosa con il metodo split che non ottengo, che sta causando lo strano risultato?

È stato utile?

Soluzione

In realtà la divisione sta funzionando come dovrebbe. Ma sembra che tu stia cercando di dividere i valori separati da virgola. E c'è già una soluzione per questo nello stdlib di Ruby:

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

O se vuoi un libray esterno (che dovrebbe essere migliore, più veloce, ...) usa FasterCSV .

Altri suggerimenti

Il risultato di #split è perfettamente normale, il metodo non dovrebbe in alcun modo tokenizzare la stringa. Scegli il modo in cui sai che funziona su uno elegante.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top