题
我有一个具有以下内容的文件输入:
123\n
456\n
789
我要运行我的脚本,像这样:script.rb
myArray = STDIN.to_s
myArray.split(/\n/)
puts field.size
我期待这对打印3,但我越来越15.我真的在这里混淆。任何指针?
解决方案
您想
myArray = $stdin.readlines
这会得到所有的标准输入$与每个输入的行一个阵列条目的阵列。
请注意,这是低效的壮观(内存明智)与输入文件较大,所以你好得多使用类似:
$stdin.each_line do |l|
...
end
代替
的a = $stdin.readlines
a.each do |l|
...
end
由于前者不一切分配存储器的前期。尝试处理多GB的日志文件中的第二种方法,看看你的系统的性能交换是多么好是... <笑容>
其他提示
您有什么后的使用的$stdin
而不是$ stdin.to_s
ruby -e 'p $stdin.readlines.size' < INPUT
3
ruby -e 'p $stdin.to_s'
"#<IO:0x7fc7cc578af0>"
STDIN.lines是懒,但给你的阵列状的结构以绕过和迭代。
不隶属于 StackOverflow