Ruby "получает", который работает по нескольким строкам

Используя IRB, я хочу ввести строку с несколькими строками, чтобы удалить из нее определенные символы. "получает" разрешает только одну строку - есть ли аналогичная функция для нескольких строк.

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

Теперь я хочу вставить раздел текста - из-за новых строк он не работает. Вот почему я хочу собирать несколько строк

Вот код

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

Ответ 1

Вы можете сделать это следующим образом:

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

Обязательно введите ключевое слово END, если вы считаете, что ввод завершен,

Кроме того, это будет работать только с фактическим интерпретатором, а не с irb.

Ответ 2

Вы можете использовать этот метод, он принимает текст до первой пустой строки

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

Ответ 3

Вы можете использовать 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"]

Ответ 4

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

Но уловка вам придется закончить с помощью EOF