2012-12-12 6 views
10

IRBを使用して、複数行の文字列を入力して、特定の文字を取り除きたいとします。 "取得"は1行しか許可しません - 複数の行に対して同様の機能があります。複数の行にまたがる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 

新しい行が機能しないため、テキストのセクションに貼りたいと思っています。私は複数行

ここ

上で収集したい理由は

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

行い、コード

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

ハム、ちょうど呼び出しが何度か取得する? – SirDarius

+0

改行文字でない場合、メソッドはいつ読み込みを停止するかを知っていますか? –

答えて

7

あなたが道を以下にこれを行うことができますされているあなたが考えるときENDキーワードを入力してください入力が完了しました。

また、irbではなく実際のインタプリタでのみ機能します。あなたがこの方法を使用することができます

+2

これはRubyの唯一の実行可能なソリューションです –

+0

$ /何を説明できますか? – Joseph

+0

@Josephはルビーのグローバル変数で、getsとreadlineの区切り記号として使用されます。 –

7

は、それはあなたが

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

これは、終了文字プロセスの優れたカプセル化です。 –

+0

これはすばらしいです、ありがとう – Joseph

-3
str = <<-EOF 
Your multi line 
text goes here 
..... 
EOF 
を定義nを任意の終了文字のn \ \を置き換えることができ、最初の空行

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

またはこれまでのテキストを受け入れ

しかし、キャッチはEOFで終了する必要があります

7

にを使用できますように

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

あなたのサンプルコードで標準の間違った変数名が使用されています。私はそれを編集しましたが、その文字数は6文字以下です – Will

+0

@おかげさまで、 –

関連する問題