我有一个具有以下内容的文件输入:

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是懒,但给你的阵列状的结构以绕过和迭代。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top