コマンドライン引数を扱うクラス。 以下のような特徴を持つ。
keyword=value および -keyword の二つのフォーマットの引数を扱う。
-keywordはオプションで、Bool型(true/false)に変換される。
valueの型としては、Rubyの原型として、String配列、Fixnum配列、Float配列を扱うことができる。
その他の特殊な型として、ファイル型や項目名型を提供する。
デフォルト値や値の範囲を指定することができる。
指定が正しくなければエラーメッセージを表示して終了する。
--helpが指定されればhelp()を呼び出し終了する。またヘルプ関数名を指定することも可能。--helpは、一般のオプションとは違い、マイナス記号が2つであることに注意する。
* MCMD::Margs.new(ARGV[,allKeyWords][,mandatoryKeyWords][,helpFunction)
Margsオブジェクトを生成する。 「keyword=値」もしくは「-keyword」の形式で与えられたコマンドライン引数が、クラス内部のHashもしくはArray変数にセットされる。
ARGV RubyのARGV変数。
allKeyWords key=valueもしくは-keyによる引数キーワードリスト。 ここで指定した以外の引数がARGVに指定されていないことをチェックし、 指定されていればエラー終了してくれる。 allKeyWordsを省略した場合はこのチェックをしない。
mandatoryKeyWords key=valueによる引数キーワードリスト。 ここで指定した引数がコマンドラインで指定されていなければ エラー終了してくれる。 mandatoryKeyWordsを省略した場合はこのチェックをしない。
helpFunction --helpが指定されたときに呼び出される関数名。
# コマンドライン $ ruby test.rb i=dat.csv -abc # test.rbの内容 args=Margs.new(ARGV, "i=,v=,-abc") # OK args=Margs.new(ARGV, "i=,v=") # -abcは指定できないのでエラー終了 args=Margs.new(ARGV, "i=,v=,-abc","i=,v=") # v=は必須だが指定されてないのでエラー終了
* MCMD::Margs.file(keyWord,mode): ファイル名の取得
keyWord key=形式のキーワード(String)
mode "r"(readableのチェック)、もしくは"w"(writableのチェック)を指定する。(String)
keywordで指定された値を入力ファイル名とみなし、modeが"r"の場合、 そのファイルが読み取り可能であればそのファイル名を返す。 読み取りが可能でなければエラー終了する。 modeが"w"の場合は、書き込みを行うディレクトリに書き込み可能かどうかチェックし、 書き込み可能であればそのファイル名を返す。 書き込み可能でなければエラー終了する。
# コマンドライン $ ruby test.rb i=dat.csv # test.rbの内容 args=Margs.new(ARGV) puts args.file("i=","r") # dat.csvがreadableであれば"dat.csv" puts args.file("i=","w") # カレントディレクトリがwritableであれば"dat.csv"
* MCMD::Margs.field(keyWord,fileName)
keyWordで指定した項目名について、fileNameで指定されたファイルの項目 と関連付けて各種情報を返す。
keyWord "key="形式のキーワード(String)。
fileName ファイル名。
コマンドラインでの項目名の指定は以下のフォーマットに従わなければならない。
![]() |
(2.3) |
複数の項目名はカンマで区切って指定する。 は、fileNameで指定されたCSVファイルの項目名でなければならない。 さもなければ"field name not found"のエラーにて終了する。
項目名には二つの属性
と
を指定できる(省略可)。 それぞれ用途は自由であるが、:と%で区切らなければならない。
一般的な用途としては、ある項目に対する演算結果を 新しい項目名
として追加出力することを想定している。 そして
は処理内容を制御するオプションとして利用する。
このメソッドは、以下に示す各種情報をHashで返す。太字はHashキー。
names 項目名namesの配列(String Array)。
newNames 新項目名newNamesの配列(String Array)。指定がなければnil。
options オプションoptionsの配列(String Array)。指定がなければnil。
fld2csv "key="で指定された項目に対応するCSVファイル(fileName)の項目番号(0から始まる)(String Array)。
csv2fld CSVファイルの項目番号を要素番号とした"key="で指定された項目の指定順序番号(0から始まる)(String Array)。 指定のない項目はnil。
# test.csvの内容 fld1,fld2,fld3 1,2,3 4,5,6 # コマンドライン $ ruby test.rb f=fld1,fld3 # test.rbの内容 args=Margs.new(ARGV) fld=args.field("f=","test.csv") p fld["names"] # -> ["fld1","fld3"] p fld["fld2csv"] # -> [0,2] fld1,fld3はtest.csvの0番目と2番目の項目に対応 p fld["csv2fld"] # -> [0,nil,1] test.csvの0番目の項目はf=の0番目に指定された # コマンドライン $ ruby test.rb f=fld3:newFld3%n,fld2%nr # test.rbの内容 args=Margs.new(ARGV) fld=args.field("f=","test.csv") p fld["names"] # -> ["fld3", "fld2"] p fld["newNames"] # -> ["newFld3", nil] p fld["options"] # -> ["n", "nr"] p fld["fld2csv"] # -> [2, 1] p fld["csv2fld"] # -> [nil, 1, 0]
* MCMD::Margs.str(keyWord[,default][,token1][,token2])
文字列引数の取得
keyWord "key="形式のキーワード(String)
default 指定がなかったときのデフォルト値。省略時はnil。
token1 複数の文字列を指定する場合の区切り文字。省略時は区切りは無いものと見なす。
token2 token1で切り出された文字列をさらにtoken2を区切りとする文字列で区切る。省略時は区切りは無いものと見なす。
コマンドライン上で指定された引数のうち、keyWordとマッチする値を文字列として返す。 コマンドラインで指定されていなければdefaultの文字列を返す。 この時defaultがnilであればnilを返す。
token1が指定されていれば区切られた文字列を要素とする配列を返す。 さらにtoken2が指定されていれば、配列の配列を返す。
# コマンドライン $ ruby test.rb v=abc # test.rbの内容 args=Margs.new(ARGV) puts args.str("v=") # ->"abc" puts args.str("w=") # -> nil puts args.str("w=","xyz") # -> "xyz"
# コマンドライン $ ruby test.rb v=abc,efg:xyz,hij # test.rbの内容 args=Margs.new(ARGV) puts args.str("v=") # ->"abc,efg:xyz,hij" puts args.str("v=",nil,",") # ->["abc", "efg:xyz", "hij"] puts args.str("v=",nil,",",":") # ->[["abc"], ["efg","xyz"], ["hij"]]
* MCMD::Margs.float(keyWord[,default][,from][,to]): Float型数値引数の取得
keyWord “key=”のキーワード(String)
default 指定がなかったときのデフォルト値(Float)。省略時はnil。
from 範囲チェックの下限値(Float)。省略時は下限値チェックをしない。
to 範囲チェックの上限値(Float)。省略時は上限値チェックをしない。
コマンドライン上で指定された引数のうち、keyWordとマッチする値をFloatに変換して返す。 コマンドラインで指定されていなければdefaultの値を返す。 範囲チェックにパスしなければエラー終了する。
# コマンドライン $ ruby test.rb v=0.12 # test.rbの内容 args=Margs.new(ARGV) puts args.float("v=") # -> 0.12 puts args.float("v=",nil,0.2,0.3) # -> 範囲エラー puts args.float("w=") # -> nil puts args.float("w=",0.1) # -> 0.1
* MCMD::Margs.int(keyWord[,default][,from][,to]) Fixnum型数値引数の取得
keyWord key=のキーワード(String)
default 指定がなかったときのデフォルト値(Float)。省略時はnil。
from 範囲チェックの下限値(Float)。省略時は下限値チェックをしない。
to 範囲チェックの上限値(Float)。省略時は上限値チェックをしない。
コマンドライン上で指定された引数のうち、keyWordとマッチする値をFloatに変換して返す。 コマンドラインで指定されていなければdefaultの値を返す。 範囲チェックにパスしなければエラー終了する。
# コマンドライン $ ruby test.rb v=10 # test.rbの内容 args=Margs.new(ARGV) puts args.int("v=") # -> 10 puts args.int("v=",,20,30) # -> 範囲エラー puts args.int("w=") # -> nil puts args.int("w=",15) # -> 15
* MCMD::Margs.bool(keyWord) Bool型引数の取得
keyWord "-key"によるキーワード(String)
コマンドライン上で指定された引数のうち、keyWordとマッチする引数があればtrueを、なければfalseを返す。
# コマンドライン $ ruby test.rb -flag # test.rbの内容 args=Margs.new(ARGV) puts args.bool("-flag") # -> true puts args.bool("-x") # -> false
# コマンドライン $ ruby test.rb i=dat.csv v=value -abc # test.rbの内容 args=Margs.new(ARGV, "i=,o=,w=,-flag,-x", "i=,w=") iFileName = args.file("i=") # -> "dat.csv" oFileName = args.str("o=","result.csv") # -> "result.csv" weight = args.float("w=",0.1,0.0,1.0) # -> 0.1 flag = args.bool("-abc") # -> true wFlag = args.bool("-w") # -> false