#ruby #file
#ruby #файл
Вопрос:
У меня есть очень большой текстовый файл, и я хочу написать скрипт ruby для фильтрации некоторых данных. В принципе, я хочу выполнить итерацию по каждой строке, а затем сохранить отдельные слова в строке в массиве, а затем работать со словами. однако я не могу получить каждое слово отдельно в массиве
tracker_file.each_line do|line|
arr = "#{line}"
Я могу получить всю строку следующим образом, но как насчет отдельных слов?
Спасибо
Ответ №1:
Используйте split
метод для строки.
irb(main):001:0> line = "one two three"
=> "one two three"
irb(main):002:0> line.split
=> ["one", "two", "three"]
Итак, ваш пример был бы:
tracker_file.each_line do |line|
arr = line.split
# ... do stuff with arr
end
Ответ №2:
tracker_file.each_line do |line|
line.scan(/[w'] /) do |word|
...
end
end
Если вам не нужно перебирать строки, вы можете перебирать слова напрямую:
tracker_file.read.scan(/[w'] /) do |word|
...
end
Ответ №3:
Вы можете сделать:
tracker_file.each_line do |line|
arr = line.split
# Then perform operations on the array
end
split
Метод разбивает строку на массив на основе разделителя, в данном случае пробела.
Ответ №4:
Если вы читаете что-то, написанное на английском языке, и текст может содержать дефисы, точки с запятой, пробелы, точки и т.д. вы могли бы рассмотреть регулярное выражение, например, следующее:
/[a-zA-Z] (-[a-zA-Z] )*/
чтобы извлечь слова вместо этого.
Ответ №5:
Вам не обязательно использовать IO#each_line
, вы также можете использовать IO#each(separator_string)
Другой вариант — использовать IO#gets
:
while word = tracker_file.gets(/separator_regexp/)
# use the word
end