Come dividere i singoli valori delimitati da virgolette contenenti virgole in Ruby
-
03-07-2019 - |
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?
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.