【Ruby】コマンドを作ろう
- 作者: 高橋征義,後藤裕蔵,まつもとゆきひろ
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2013/06/04
- メディア: 単行本
- この商品を含むブログ (22件) を見る
今回は第3章「コマンドを作ろう」
ARGV(アーグヴイ)
ARGVは配列オブジェクトで、コマンドラインからスクリプトの引数として与えられた文字列を要素として持っている。引数から取得したデータは文字列になっているため、計算に使うときは to_i メソッドで数値化する必要がある。
puts "最初の引数": #{ARGV[0]}" puts "2番目の引数": #{ARGV[1]" puts "3番目の引数": #{ARGV[2}"
という内容のargv.rbファイルを作り、コマンドライン上で次のように打つ。
ruby argv.rb 1st 2nd 3rd
要素の区切りに空白を入れる点に注意。
すると、下の文が返される。
最初の引数: 1st 2番目の引数: 2nd 3番目の引数: 3rd
num0 = ARGV[0].to_i num1 = ARGV[1].to_i puts "#{num0} + #{num1} = #{num0 + num1}" #数値変換
ファイルからの読み込み
filename = ARGV[0] file = File.open(filename) text = file.read print text file.close #コマンドライン上でファイルを指定すると、その内容を一気に表示する
print File.read(ARGV[0]) #ファイルを読み込むだけならこれでもOK
しかし、これだと全てのデータをメモリにためてしまうため、大きなファイルを扱う場合に時間とメモリを無駄に使ってしまうことになる。
この問題は、データを一行ずつ出力させることで解決できる。
filename = ARGV[0] file = File.open(filename) file.each_line do |line| print line end file.close #each_line メソッドで一行ずつ読み込みと出力を行う
特定のパターンにマッチする行を出力したい場合は Regexp.new(str) を使う。
pattern = Regexp.new(ARGV[0]) #Regexp.new(str) で引数の文字列 str から正規表現オブジェクトを作成 filename = ARGV[1] file = File.open(filename) file.each_line do |line| if pattern =~ line print line end end file.close
メソッドの作成
def hello print "Hello, Ruby.\n" end hello()
別のファイルの取り込み
require 使いたいライブラリのファイル名 (.rb は省略可能)
あるプログラムで使った自作メソッドを別のプログラムで利用したい、といった場合などに使う。
他のプログラムから読み込んで利用するためのプログラムをライブラリという。