2014-02-08 47 views
5

我想掃描未知數量的行,直到所有的行被掃描。我怎麼用紅寶石做到這一點?紅寶石掃描/得到直到EOF

對於前:

put returns between paragraphs 

for linebreak add 2 spaces at end 

_italic_ or **bold** 

輸入不是從 '文件' 而是通過STDIN。

+1

你的意思是你得到未知數量的行通過鍵盤輸入?在某些編碼競賽中有點像STDIN? – 2014-02-08 16:34:57

回答

8

使用IO#read(無length參數時,它讀取直到EOF)

lines = STDIN.read 

,或者使用getsnil作爲參數:

lines = gets(nil) 

爲了表示EOF,類型Ctrl鍵 + D(Unix)或Ctrl + Z(Windows)。

9

許多方法來做到這一點在紅寶石。 大多數通常情況下,你會想處理的時間,你可以做,例如一條線,與

while line=gets 
end 

STDIN.each_line do |line| 
end 

或通過與-n開關運行紅寶石,爲例如,這意味着上述循環之一(在每次迭代中線路將被保存到$_中,並且您可以添加BEGIN{}END{},就像在awk中那樣 - 這對於單線車來說非常有用)。

我不會做STDIN.read,雖然,因爲這將讀取整個文件到內存中一次(這可能是壞的,如果該文件是非常大的。)