2012-12-12 15 views
10

Używając IRB, chcę wprowadzić ciąg wieloliniowy, aby usunąć z niego pewne znaki. "dostaje" pozwala tylko na pojedynczą linię - czy istnieje podobna funkcja dla wielu linii.Ruby "dostaje", który działa na wielu liniach

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 

I teraz chcesz wkleić w sekcji tekstu - z powodu nowych linii nie działa. Dlatego chcę, aby zebrać na wielu liniach

Oto kod

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

hum, wystarczy zadzwonić kilka razy? – SirDarius

+0

Jeśli nie przez znak nowej linii, jak powinna wiedzieć metoda, aby przerwać czytanie? –

Odpowiedz

7

Można to zrobić w następujący sposób

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

upewnij się, aby wpisać kluczowym END gdy myślisz wejście jest zakończone,

Jak dobrze to będzie działać tylko z faktycznym tłumaczem, nie irb.

+2

To jedyne możliwe rozwiązanie w Ruby –

+0

Czy możesz wyjaśnić, co $/robi? – Joseph

+0

@Joseph to globalna zmienna ruby ​​i używana jako separator przez get i readline. –

7

Można użyć tej metody, to przyjmuje tekst aż do pierwszego pustego wiersza

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

lub ten, można zastąpić \ n \ n z dowolnego znaku końcowego zdefiniować

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

To dobra enkapsulacja procesu znaków kończących. –

+0

To jest świetne, dzięki – Joseph

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

Ale jest haczyk musisz kończyć EOF

7

można użyć readlines() na $stdin tak jak

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

Twój przykładowy kod używa niewłaściwej nazwy zmiennej dla standardu. Zmontowałbym go, ale jego limit 6 znaków: – Will

+0

@Will Dzięki, które poszło niezauważone. –

Powiązane problemy