Вы могли бы позволить конечный пользователь ввод, нажав Enter на пустой строке и оставляя остальные линии нетронутым:
puts "Enter the value, then hit ENTER on blank line to finish"
value = ''
until (line = gets).chomp.empty?
value << line
end
value.chomp!
data = { "test" => "data", "value" => value }
puts data
Это, после ввода foo
Введитеbar
EnterEnter будет производить:
Enter the value, then hit ENTER on blank line to finish
foo
bar
{"test"=>"data", "value"=>"foo\nbar"}
Единственное ограничение заключается в том, что вы не можете иметь символ новой строки в конце значения.
Другая возможность состоит в том, чтобы «экранирования в» строка после прочтения его от входа с eval
. Поскольку eval
является потенциально небезопасным, я предпочел бы пойти с yaml
библиотеки, как это было предложено в this answer to a related question:
require 'yaml'
puts "Enter the value"
line = gets.chomp
value = YAML.load(%Q(---\n"#{line}"\n))
data = { "test" => "data", "value" => value }
puts data
Этот, после ввода foo\nbar
Enter будет производить:
Enter the value
foo\nbar
{"test"=>"data", "value"=>"foo\nbar"}
Плюс в том, что это может обрабатывать символы новой строки на произвольных позициях.
Большое спасибо .. Он отлично работал .. – NagaLakshmi
Отлично! Тогда, пожалуйста, подумайте о принятии ответа, чтобы он больше не отображался как без ответа. –