2012-12-12 34 views
10

Sử dụng IRB, tôi muốn nhập một chuỗi nhiều dòng để tách các ký tự nhất định khỏi nó. "được" chỉ cho phép một dòng - có chức năng tương tự cho nhiều dòng.Ruby 'được' hoạt động trên nhiều dòng

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 

Bây giờ tôi muốn dán vào một phần văn bản - vì các dòng mới không hoạt động. Đây là lý do tại sao tôi muốn thu thập qua nhiều dòng

Dưới đây là đoạn code

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

hum, chỉ cần gọi nhiều lần? – SirDarius

+0

Nếu không phải bằng ký tự dòng mới, phương pháp nên biết khi nào nên dừng đọc? –

Trả lời

7

Bạn có thể làm điều này trong sau bằng cách nào,

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

hãy chắc chắn để gõ từ khóa END khi bạn nghĩ rằng đầu vào được hoàn thành,

Điều này cũng sẽ chỉ hoạt động với trình thông dịch thực tế không phải là irb.

+2

Đây là giải pháp khả thi duy nhất trong Ruby –

+0

Bạn có thể giải thích $/không? – Joseph

+0

@Joseph là biến toàn cầu ruby ​​và được sử dụng làm dấu phân cách bằng cách nhận và đọc. –

7

Bạn có thể sử dụng phương pháp này, nó chấp nhận văn bản cho đến khi dòng trống đầu tiên

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

hay thế này, bạn có thể thay thế \ n \ n với bất kỳ ký tự cuối bạn xác định

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

Đây là một đóng gói tốt của quá trình ký tự chấm dứt. –

+0

Điều này thật tuyệt, cảm ơn – Joseph

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

Nhưng điểm bắt buộc là bạn sẽ phải kết thúc bằng EOF

7

Bạn có thể sử dụng readlines() trên $stdin giống như vậy

> $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

Mã mẫu của bạn sử dụng tên biến sai cho tiêu chuẩn. Tôi đã chỉnh sửa nó nhưng dưới giới hạn 6 ký tự – Will

+0

@Will Cảm ơn, điều đó không được chú ý. –

Các vấn đề liên quan