13

使用 IRB,我想输入一个多行字符串,以便从中删除某些字符。“获取”只允许单行 - 多行是否有类似的功能。

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
4

4 回答 4

10

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

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
于 2012-12-12T13:37:36.120 回答
9

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

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

当您认为输入完成时,请确保键入 END 关键字,

同样,这只适用于实际的解释器而不是 irb。

于 2012-12-12T12:42:51.747 回答
9

你可以这样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"]
于 2013-09-30T21:45:15.043 回答
-4
str = <<-EOF
Your multi line
text goes here
.....
EOF

但问题是你必须以 EOF 结尾

于 2012-12-12T13:37:43.757 回答