2016-11-30 11 views
0

Rubyの標準出力を複数の変数に保存するにはどうすればよいですか?例えば標準出力を複数の変数に保存するにはどうすればよいですか?

、私が持っている場合:

puts "hello" 

puts "thanks" 

がどのように保存する「ハロー」と二つの異なるstrVarような変数(値を「hello」を含む)とstrVar2(値を含むことに「感謝」「ん感謝 ")。

私のスクリプトでは、putsという複数の文字列を標準出力に書き出す別のRubyスクリプトを呼び出しています。標準出力から各文字列を個別に保存するにはどうすればよいですか?

+0

あなた自身のスクリプトの標準出力を変数に取り込もうとしていますか? –

+0

@muistooshort並べ替え私のスクリプトでは、標準出力に複数の文字列を入れる別のrubyスクリプトを呼び出しています。標準出力から各文字列を個別に保存するにはどうすればよいですか?ありがとう。 – 000000000000000000000

+1

私はそれをお勧めしませんが、[StringIO](http://ruby-doc.org/stdlib-1.9.3/libdoc/stringio/rdoc/StringIO.html)は行く方法です。 [この回答](http://stackoverflow.com/a/14988271/1179430) – GAntoine

答えて

0

私はこの質問をよく理解していませんが、文字列を保存/印刷する方法は無数にあります。それは、putsに続く値が手動で入力されないか、プログラム的に設定される状況を想像するのは難しいです。

getsや$ stdin.getsやARGV配列の引数として入力変数を保存することができます。たとえば、次のように

puts "Enter the first string" 
var0 = $stdin.gets.chomp 

すでに値があなたが基本的には一緒にアプリケーション/スクリプトを連鎖している

var1 = "hello" 
var2 = "thanks" 
array = [var1, var2] 
hash = {:key1 => var1, :key2 => var2} 


puts var1 
puts var2 
array.each do |str| puts str end 
hash.map do |k, v| puts v end 
+0

をご覧くださいありがとう。しかし、値を保存しないとどうなりますか?たとえば、私の場合、スクリプト内に別のスクリプトを呼び出すので、私は制御できません。他のスクリプトは、文字列が目立つ出力に置かれる多くの行を持っています。 – 000000000000000000000

+0

パイプを使用できますか?たとえば、ruby script1.rb | ruby script2.rbと$ stdin.getsを使用して出力を取得しますか?私は別のルビスクリプトを実行する方法と、script2内で同時に$ stdinを監視する方法はないと思います。また、script1にExceptionがある場合はどうなりますか?これを行う適切な方法は、データベース/ redis/filestoreを使用してそこに値を格納することです: – whodini9

+0

これも:http://stackoverflow.com/questions/14987362/how-can-i-capture-stdout-to- a-string – whodini9

0

を保存した場合。複数の方法がありますが、最も単純なパスはSTDIN/STDOUTパイプラインを使用します。

簡単な例では、2つの小さなスクリプトを使用しています。 test.rbとして保存:

test2.rbとして
puts 'foo' 
puts 'bar' 

と、この:

v1 = gets.chomp 
v2 = gets.chomp 

puts "v1=#{v1} v2=#{v2}" 

、その後、コマンドラインの使用で:

:出力は以下となります

ruby test.rb | ruby test2.rb 

v1=foo v2=bar 

|あるスクリプトの出力を別のスクリプトの入力に連鎖させ、Rubyの一部ではなく、OSの一部です。

これは、デフォルトでputsがSTDOUTに書き込み、getsがSTDINから読み込むため、これが機能します。 |はそれらを結線します。

+0

完璧な説明!あなたからこれを学ぶのは良いことです。 – 000000000000000000000

関連する問題