Як перетворити рядок, відокремлений комами, у масив?


75

Чи є спосіб перетворити рядок, відокремлений комами, у масив у Ruby? Наприклад, якби у мене був такий рядок:

"one,two,three,four"

Як би я перетворив його на такий масив?

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

Чому існує тег "csv"? Це не працює з .csvфайлами, просто рядок, відокремлений комами.
Марк Шиманскі

1
CSV означає значення, розділені комами. Ось який ваш рядок. Це досить стандартний спосіб зберігання послідовних або табличних даних у рядковому форматі. Це не обов'язково потрібно читати безпосередньо з файлу.
Lèse majesté

@ Lèsemajesté: Ах, добре, я просто думав, що CSV - це лише файл. Дякую!
Марк Шиманський

Відповіді:


145

Використовуйте splitметод, щоб зробити це:

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

Якщо ви хочете ігнорувати пробіли, що ведуть / завершують:

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

Якщо ви хочете проаналізувати кілька рядків (тобто файл CSV) на окремі масиви:

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

Чи існує функція, еквівалентна PHP, str_getcsvяка автоматично обробляє процитовані CSV-файли, значення, що містять (екрановані) коми, багаторядкові CSV-файли тощо?
Lèse majesté

1
@ Lèse majesté: Так, див. Мою відповідь.
ефемієнт

А як щодо "один, два, три, чотири" - чи є швидкий спосіб обрізати простір?
vanboom

5
@vanboom "one, two, three, four".split(/\s*,\s*/). Спліт також працюватиме з регулярним виразом. Як варіант, ви можете скористатися mapметодом, якщо віддаєте перевагу такому синтаксису:"one, two, three, four".split(',').map(&:strip)
Кевін Сильвестр


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.