2012-12-12 23 views
10

使用IRB,我想輸入一個多行字符串以從中剝離某些字符。 「獲取」只允許一條線 - 對於多條線有沒有類似的功能。Ruby'gets'可以在多行上工作

ASCII_project.rb(main):002:0* puts = "What's the text you want to strip?" 
=> "What's the text you want to strip?" 
ASCII_project.rb(main):003:0> str = gets 

我現在想粘貼一段文字 - 因爲新行不起作用。這就是爲什麼我想收集多行

這裏是代碼

# encoding: CP850 
puts = "What's the text you want to strip?" 
str = gets 
str.gsub!(/\P{ASCII}/, '') 
puts str 
+0

哼哼,只是打了幾次電話? – SirDarius

+0

如果不是換行符,該方法應該如何知道何時停止閱讀? –

回答

7

您可以按以下方式做到這一點,

$/ = "END" 
user_input = STDIN.gets 
puts user_input 

確保鍵入END關鍵字時,您認爲輸入完成,

這也只適用於實際的解釋器而不是irb。

+2

這是Ruby中唯一可行的解​​決方案 –

+0

你能解釋一下$ /的功能嗎? – Joseph

+0

@Joseph這是一個紅寶石全局變量,並被get和readline用作分隔符。 –

7

您可以使用此方法,它接受文本直到第一個空行

def multi_gets all_text="" 
    while (text = gets) != "\n" 
    all_text << text 
    end 
    all_text 
end 

或這一個,你可以替換成\ n \ n任何結束字符定義

def multi_gets all_text="" 
    while all_text << STDIN.gets 
    return all_text if all_text["\n\n"] 
    end 
end 
+0

這是終止字符過程的一個很好的封裝。 –

+0

這太好了,謝謝 – Joseph

-3
str = <<-EOF 
Your multi line 
text goes here 
..... 
EOF 

但是,捕獲是你必須以EOF結束

7

你可以使用readlines()$stdin像這樣

> $stdin.readlines 
Mit Wohnungen, mit Bergen, Hügeln, Flüssen, 
Solang ichs deutlich sah, ein Schatz der Freuden; 
Zuletzt im Blauen blieb ein Augenweiden 
An fernentwichnen lichten Finsternissen. 

# ^D 
=> ["Mit Wohnungen, mit Bergen, Hügeln, Flüssen,\n", 
"Solang ichs deutlich sah, ein Schatz der Freuden;\n", 
"Zuletzt im Blauen blieb ein Augenweiden\n", 
"An fernentwichnen lichten Finsternissen.\n"] 
+0

您的示例代碼使用錯誤的變量名稱作爲標準英寸我將編輯它,但它的字符數不超過6個字符 – Will

+0

@Will謝謝,這引起了人們的注意。 –

相關問題