2012-12-12 32 views
10

IRB'yi kullanarak, belirli karakterleri şeritten çıkarmak için çok satırlı bir karakter dizisi girmek istiyorum. "alır" sadece tek bir satıra izin verir - birden fazla satır için benzer bir işlev var.Birden çok satır üzerinde çalışan Ruby 'gets'

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 

Şimdi bir metin bölümüne yapıştırmak istiyorum - yeni satırlar nedeniyle çalışmaz. Ben birden fazla satır

İşte

üzerinde toplamak istediğiniz İşte bu

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

yapmak, kod

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

uğultusu gibi, sadece çağrı birkaç kez alacak? – SirDarius

+0

Yeni satır karakterine göre değilse, yöntem okumayı ne zaman durduracağını nasıl bilmelidir? –

cevap

7

Yolu aşağıdaki yapabilirsiniz olduğunu zannedersiniz SON anahtar sözcük girmek için emin giriş bittiğinde, bu yalnızca gerçek yorumlayıcı ile değil irb ile çalışacaktır. Bu yöntemi kullanabilirsiniz

+2

Bu Ruby –

+0

'daki tek geçerli çözümdür $/does'nin ne olduğunu açıklayabilir misiniz? – Joseph

+0

@Joseph, küresel bir değişken olan ve alır ve okuyan tarafından ayırıcı olarak kullanılır. –

7

, bu

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

Bu, sonlandırma karakter işleminin iyi bir şekilde kapsüllenmesidir. –

+0

Bu harika, teşekkürler – Joseph

-3
str = <<-EOF 
Your multi line 
text goes here 
..... 
EOF 
tanımlamak sen n herhangi bir son karakteri ile n \ \ yerini alabilir ilk boş satırda

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

veya buna kadar metin kabul

Ama yakalamak sen senüzerinde readlines() kullanabilirsiniz EOF

7

ile sona gerekecek olan böylece

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

Örnek kodunuz, standart içeriğin yanlış değişken adını kullanır. Düzenlemiş olsaydım, ancak 6 karakter sınırının altında olan – Will

+0

@Will Thanks, fark edilmeden gitti. –

İlgili konular