我有一个包含以下内容的文件 INPUT:
123\n
456\n
789
我想像这样运行我的脚本:script.rb < INPUT 并让它将 INPUT 文件的内容转换为数组,在换行符上拆分。所以,我有类似 myArray = [123,456,789] 的东西。这是我尝试做的事情,但运气不佳:
myArray = STDIN.to_s
myArray.split(/\n/)
puts field.size
我希望这会打印 3,但我得到了 15。我在这里真的很困惑。任何指针?
你要
myArray = $stdin.readlines
这会将所有 $stdin 放入一个数组中,每行输入一个数组条目。
请注意,对于大型输入文件,这是非常低效的(内存方面),所以你最好使用类似的东西:
$stdin.each_line do |l|
...
end
代替
a = $stdin.readlines
a.each do |l|
...
end
因为前者不会预先为所有内容分配内存。尝试以第二种方式处理数 GB 的日志文件,以查看系统的交换性能有多好... <grin>
你所追求的是使用 $stdin而不是 $stdin.to_s
ruby -e 'p $stdin.readlines.size' < INPUT
3
ruby -e 'p $stdin.to_s'
"#<IO:0x7fc7cc578af0>"
STDIN.lines 是惰性的,但为您提供了一个类似数组的结构来传递和迭代。