Ruby扫描/获取直到EOF

时间:2014-02-08 16:32:37

标签: ruby eof

我想扫描未知数量的线,直到扫描完所有线。我怎么用红宝石做到这一点?

例如:

put returns between paragraphs

for linebreak add 2 spaces at end

_italic_ or **bold**  

输入不是来自'文件',而是来自STDIN。

2 个答案:

答案 0 :(得分:10)

使用IO#read(不带length参数,直到EOF读取)

lines = STDIN.read

或使用gets并以nil作为参数:

lines = gets(nil)

要表示EOF,请键入 Ctrl + D (Unix)或 Ctrl + Z (Windows)。

答案 1 :(得分:9)

在ruby中有很多方法可以做到这一点。 大多数情况下,你一次要处理一行,你可以做,例如,

while line=gets
end

STDIN.each_line do |line|
end

或者使用-n开关运行ruby,例如,这意味着上述循环之一(每次迭代中行被保存到$_,并且您可以添加BEGIN{}END{}一样,就像在awk中一样 - 这对单行人员来说真的很好。)

我不会做STDIN.read,因为这会立即将整个文件读入内存(如果文件非常大,可能会很糟糕。)