以下のプログラムを emj.rb
という名前で保存して
実行してみよう。
#!/usr/koeki/bin/ruby # -*- coding: utf-8 -*- print "英語は何点?: " english = gets.chomp.to_i print "数学は何点?: " math = gets.chomp.to_i print "国語は何点?: " japanese = gets.chomp.to_i printf("合計は%d点です\n", english+math+japanese)
./emj.rb 英語は何点?: 80 数学は何点?: 66 国語は何点?: 54 合計は200点です
プログラムを普通に起動するとgets
メソッド
に与えるデータはキーボードから入力することになる。このように入力
が少ない(3個)のデータを一度入力するくらいならキーボードから
入れるのも苦でないが、これを何度も、あるいは大量に手で入れるのは
厳しい。本格的なプログラムに与えるデータはファイルに保存しておく。
emj.rb
に与えたのと同じ並びの3つのデータから
なるファイル emj.dat
を作ろう。
80 66 54
cat
コマンドを使って emj.dat
ファイルの中味を画面に出力してみる。
cat emj.dat
80
66
54
ファイルに保存したデータをプログラムの入力として与えること
ができる。以下の3つの方法は、どれも emj.dat
に保存してあるデー
タをRubyプログラムのgets
に与えるためのコマンドラインである。
./emj.rb < emj.dat
cat emj.dat | ./emj.rb
./emj.rb emj.dat
上記のいずれかの方法でプログラムを起動すると以下のような 出力画面が得られる。
英語は何点?: 数学は何点?: 国語は何点?: 合計は200点です
一見、画面が乱れてしまったように見えるが正しい結果が出ている。
これは、ファイルの内容が自動的にgets
メソッドに
供給されているからである。
gets
メソッドがデータを読む場所は
一概に「キーボード」とは言えないことに注意しておこう。
Rubyプログラムを起動するとき、プログラム名の後に何も指定しない場合に
gets
メソッドがデータを読む場所のことを正しくは
標準入力という。Rubyプログラムに限らず、全てのコマンドの
標準入力はファイルや別のプログラムの出力結果に変更することができる。
./emj.rb # 標準入力は端末(キーボード) ./emj.rb < file # 標準入力は file ファイルの中味 cmd | ./emj.rb # 標準入力は cmd コマンドの出力結果
Rubyプログラムのprintf
メソッドは、通常端末画面に
結果を出力する。プログラムの起動方法を変えるとこの出力先を
変更することができる。
./emj.rb # 標準出力は端末(画面) ./emj.rb > file # 標準出力は file ファイルに保存される ./emj.rb | cmd # 標準出力は cmd コマンドの入力として送られる