Как преобразовать содержимое STDIN в массив?
У меня есть файл ввода, который имеет следующее содержимое:
123n
456n
789
Я хочу запустить свой скрипт следующим образом: script.rb
myArray = STDIN.to_s
myArray.split(/n/)
puts field.size
Я ожидаю, что это напечатает 3, но я получаю 15. Я действительно запутался. Любой указатели?
3 ответов
вы хотите
myArray = $stdin.readlines
Это получит все $stdin в массив с одной записью массива на строку ввода.
обратите внимание, что это эффектно неэффективно (с памятью) с большими входными файлами, поэтому вам гораздо лучше использовать что-то вроде:
$stdin.each_line do |l|
...
end
вместо
a = $stdin.readlines
a.each do |l|
...
end
потому что первый не выделяет память для всего вперед. Попробуйте обработать файл журнала с несколькими гигабайтами вторым способом, чтобы узнать, насколько хороша ваша система производительность свопа есть...
все, что после используя $stdin
вместо $stdin.to_s
ruby -e 'p $stdin.readlines.size' < INPUT
3
ruby -e 'p $stdin.to_s'
"#<IO:0x7fc7cc578af0>"