Comment diviser des valeurs délimitées par des virgules entre guillemets simples contenant des virgules en Ruby
-
03-07-2019 - |
Question
Disons que j'ai une chaîne avec des valeurs délimitées par des virgules entre guillemets simples, qui peuvent inclure ou non des virgules, comme ceci:
"'apples,bananas','lemons'"
et je veux diviser cela dans un tableau
["apples,bananas", "lemons"]
Apparemment, si je divise (',')
la chaîne que je reçois
[ "'apples", "bananas'", "lemons" ]
que je ne comprends pas. La seule façon de faire ce que je suis venu avec est
a = []
s = "'apples,bananas','lemons'"
s.scan(/\'([^\']+)\'/){|i| a << i[0]}
# result is ["apples,bananas", "lemons"]
Mais y a-t-il un moyen plus élégant? Y at-il quelque chose avec la méthode de scission que je ne comprends pas, qui provoque un résultat étrange?
La solution
En fait, la scission fonctionne comme prévu. Mais il semble que vous essayez de scinder les valeurs séparées par des virgules. Et il y a déjà une solution à cela dans la bibliothèque stdlib de Ruby:
http://www.ruby-doc.org /stdlib/libdoc/csv/rdoc/index.html
Ou si vous voulez une bibliothèque externe (supposée être meilleure, plus rapide, ...), utilisez FasterCSV .
Autres conseils
Le résultat de #split est parfaitement normal, la méthode n'est pas supposée rendre la chaîne de façon symbolique. Choisissez la façon dont vous savez que fonctionne sur un élégant.