Ruby’获取’可以在多行上运行

使用IRB,我想输入一个多行字符串,以便从中删除某些字符。 “gets”只允许一行 – 对于多行是否有类似的function。

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 

您可以通过以下方式执行此操作,

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

确保在输入完成后输入END关键字,

同样,这只适用于实际的翻译而不是irb。

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

 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 

您可以在$stdin上使用readlines()

 > $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"] 
 str = <<-EOF Your multi line text goes here ..... EOF 

但问题是你必须以EOF结束