Чтение из файла в массив и остановка, если в ruby ​​найдено ":" - PullRequest
4 голосов
/ 23 апреля 2010

Как я могу в Ruby прочитать строку из файла в массив и только читать и сохранять в массиве, пока не получу определенный маркер, например ":", и не остановлю чтение?

Любая помощь будет высоко ценится =)

Например:

10.199.198.10:111  test/testing/testing  (EST-08532522)
10.199.198.12:111  test/testing/testing  (EST-08532522)
10.199.198.13:111  test/testing/testing  (EST-08532522)

Должен только читать следующее и содержаться в массиве:

10.199.198.10
10.199.198.12
10.199.198.13

1 Ответ

13 голосов
/ 23 апреля 2010

Это довольно тривиальная проблема, использующая String#split:

results = open('a.txt').map { |line| line.split(':')[0] }

p results

Выход:

["10.199.198.10", "10.199.198.12", "10.199.198.13"]

String#split разрывает строку по указанному разделителю и возвращает массив; поэтому line.split(':')[0] принимает первый элемент этого сгенерированного массива.

В случае, если в нем есть строка без :, String#split вернет массив с единственным элементом, который является целой строкой. Так что, если вам нужно сделать немного больше ошибок, вы можете написать что-то вроде этого:

results = []

open('a.txt').each do |line|
  results << line.split(':')[0] if line.include? ':'
end

p results

, который добавит разделенные строки в массив результатов, только если в строке есть символ :.

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