итерация по каждому слову в массиве

#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