итерация по каждому слову в массиве - PullRequest
2 голосов
/ 07 мая 2011

У меня очень большой файл .txt, и я хочу написать скрипт ruby ​​для фильтрации некоторых данных. В основном я хочу перебрать каждую строку, а затем сохранить отдельные слова в строке в массиве, а затем оперировать словами. однако я не могу получить каждое слово отдельно в массиве

tracker_file.each_line do|line|
arr = "#{line}"

Я могу получить всю строку, как это, но как насчет отдельных слов?

Спасибо

Ответы [ 5 ]

3 голосов
/ 07 мая 2011
tracker_file.each_line do |line|
  line.scan(/[\w']+/) do |word|
    ...
  end
end

Если вам не нужно перебирать строки, вы можете напрямую перебирать слова:

tracker_file.read.scan(/[\w']+/) do |word|
    ...
end
3 голосов
/ 07 мая 2011

Используйте метод 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
0 голосов
/ 07 мая 2011

Вам не нужно использовать IO#each_line, вы также можете использовать IO#each(separator_string)

Другой вариант - использовать IO#gets:

while word = tracker_file.gets(/separator_regexp/)
  # use the word
end
0 голосов
/ 07 мая 2011

Если вы читаете что-то, написанное на английском языке, и текст может содержать дефисы, точки с запятой, пробелы, точки и т. Д., Вы можете рассмотреть регулярное выражение, например:слова вместо.

0 голосов
/ 07 мая 2011

Вы можете сделать:

tracker_file.each_line do |line|
    arr = line.split
# Then perform operations on the array
end

Метод split будет разбивать строку на массив на основе разделителя, в данном случае пробела.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...