我想扫描未知数量的线,直到扫描完所有线。我怎么用红宝石做到这一点?
例如:
put returns between paragraphs
for linebreak add 2 spaces at end
_italic_ or **bold**
输入不是来自'文件',而是来自STDIN。
答案 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
,因为这会立即将整个文件读入内存(如果文件非常大,可能会很糟糕。)