2012-12-12 15 views
10

Utilizzando l'IRB, desidero inserire una stringa di più righe per separare determinati caratteri da esso. "ottiene" consente solo una singola riga - esiste una funzione simile per più linee.Ruby 'gets' che funziona su più righe

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 

Ora voglio incollare in una sezione di testo - a causa delle nuove linee non funziona. Questo è il motivo per cui voglio raccogliere su più righe

Qui è il codice

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

hum, basta chiamare ottiene più volte? – SirDarius

+0

Se non dal carattere di nuova riga, come dovrebbe sapere il metodo quando interrompere la lettura? –

risposta

7

È possibile farlo nel modo seguente,

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

assicurarsi di digitare END parola chiave quando si ritiene che il l'input è terminato,

Inoltre, funzionerà solo con l'interprete effettivo non irb.

+2

Questa è l'unica soluzione valida in Ruby –

+0

Puoi spiegare cosa $/fa? – Joseph

+0

@Joseph è una variabile globale ruby ​​e utilizzata come separatore da gets e readline. –

7

È possibile utilizzare questo metodo, si accetta il testo fino alla prima riga vuota

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

o questo, è possibile sostituire il \ n \ n con qualsiasi personaggio fine di definire

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

Questa è una buona incapsulamento del processo di carattere di terminazione. –

+0

Questo è fantastico, grazie – Joseph

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

ma la cattura è dovrete terminare con EOF

7

si potrebbe utilizzare readlines() su 012.in questo modo

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

Il tuo codice di esempio utilizza il nome della variabile errato per lo standard in. Lo avrei modificato ma è sotto il limite di 6 caratteri – Will

+0

@Will Grazie, che passò inosservato. –

Problemi correlati