Class: MCMD::Margs
- Inherits:
-
Object
- Object
- MCMD::Margs
- Defined in:
- lib/nysol/margs.rb
Overview
test.rbの内容
require ‘nysol/mcmd’ include MCMD
# “i=,o=,w=,-flag,-x”以外の引数が指定されればエラー終了する。 # “i=,w=”引数を指定しなければエラー終了する。 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
Instance Attribute Summary collapse
-
#argv ⇒ Object
readonly
Returns the value of attribute argv.
-
#keyValue ⇒ Object
readonly
Returns the value of attribute keyValue.
Instance Method Summary collapse
-
#bool(key) ⇒ Object
Bool型引数の値のチェックと取得 返値: 引数で指定されたかどうか(true/false).
-
#cmdline ⇒ Object
コマンドラインをkey-valuを配列で返す.
-
#field(key, iFile, default = nil, min = nil, max = nil) ⇒ Object
Field型引数の値のチェックと取得 返値: 各種配列のHash key=a1:b1%c1,a2:b2%c2,…
-
#file(key, mode = "r", default = nil) ⇒ Object
ファイル型引数の値のチェックと取得 返値: 引数で指定されたファイル名(String).
-
#float(key, default = nil, from = nil, to = nil) ⇒ Object
Float型引数の値のチェックと取得 返値: 引数で指定された値(Float).
-
#getKeyValue(prefix = nil) ⇒ Object
key-valuを配列で返す.
-
#initialize(argv, allKeyWords = nil, mandatoryKeyWords = nil, help_func = nil, ver_func = nil) ⇒ Margs
constructor
コンストラクタ argv: rubyのARGV変数.
-
#int(key, default = nil, from = nil, to = nil) ⇒ Object
Fixnum型引数の値のチェックと取得 返値: 引数で指定された値(Fixnum).
-
#str(key, default = nil, token1 = nil, token2 = nil) ⇒ Object
String型引数の値のチェックと取得 返値: 引数で指定された値(String).
Constructor Details
#initialize(argv, allKeyWords = nil, mandatoryKeyWords = nil, help_func = nil, ver_func = nil) ⇒ Margs
コンストラクタ
argv: rubyのARGV変数
allKeyWords: key=もしくは-keyによる引数キーワードリスト(String Array)
ここで指定した以外の引数がARGVに指定されていないことをチェックし、指定されていればエラー終了する。
keyListを省略した場合はこのチェックをしない。
mandatoryKeyWords: key=による引数キーワードリスト(String Array)
ここで指定した引数がコマンドラインで指定されていなければエラー終了する。
mandatoryKeyWordsを省略した場合はこのチェックをしない。
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'lib/nysol/margs.rb', line 95 def initialize(argv, allKeyWords=nil, mandatoryKeyWords=nil, help_func=nil,ver_func=nil) @argv=argv @allKeyWords=allKeyWords @mandatoryKeyWords=mandatoryKeyWords @keyValue=Hash.new @cmdName=$0.dup # コマンドラインで指定された引数を一旦全てHashに格納する。 @argv.each{|arg| if arg[0..0]=="-" then @keyValue[arg]=true begin if arg=="--help" if help_func help_func() exit() else help() exit() end elsif arg=="--version" if ver_func ver_func() exit() else ver_func() exit() end end rescue => err # help関数がなければ通過させる。 break end else pos=arg.index("=") if pos==nil then raise "invalid argument: `#{arg}'" end val=arg.split("=",2)[1] # 20140924 by ham val="" if val==nil @keyValue[arg[0..pos]]=val end } # allKeyWordsのオプションタイプのキーワードを登録する if @allKeyWords!=nil then @allKeyWords.split(",").each{|kw| if kw[0..0]=="-" and @keyValue[kw]==nil then @keyValue[kw]=false end } end # 指定のキーワード以外のキーワードが指定されていないかチェック if @allKeyWords!=nil then kwList=@allKeyWords.split(",") @keyValue.each{|kw,val| if kwList.index(kw)==nil then raise "I don't know such a argument: `#{kw}'" end } end # 必須引数のチェック if @mandatoryKeyWords !=nil then @mandatoryKeyWords.split(",").each{|kw| if @keyValue[kw]==nil and kw[0..0]!="-" then raise "argument `#{kw}' is mandatory" end } end end |
Instance Attribute Details
#argv ⇒ Object (readonly)
Returns the value of attribute argv.
82 83 84 |
# File 'lib/nysol/margs.rb', line 82 def argv @argv end |
#keyValue ⇒ Object (readonly)
Returns the value of attribute keyValue.
83 84 85 |
# File 'lib/nysol/margs.rb', line 83 def keyValue @keyValue end |
Instance Method Details
#bool(key) ⇒ Object
Bool型引数の値のチェックと取得
返値: 引数で指定されたかどうか(true/false)
key: “-key”形式の引数キーワード
ここで指定した引数がコマンドラインで指定されていればtrueを、指定されていなければfalseを返す。
259 260 261 |
# File 'lib/nysol/margs.rb', line 259 def bool(key) return @keyValue[key] end |
#cmdline ⇒ Object
コマンドラインをkey-valuを配列で返す
370 371 372 |
# File 'lib/nysol/margs.rb', line 370 def cmdline() return "#{@cmdName} #{@argv.join(' ')}" end |
#field(key, iFile, default = nil, min = nil, max = nil) ⇒ Object
Field型引数の値のチェックと取得
返値: 各種配列のHash key=a1:b1%c1,a2:b2%c2,…
names: [a1,a2,...]
newNames: [b1,b2,...]
flags: [c1,c2,...]
fld2csv: a1,a2,...のCSVファイルにおける項目番号(0から始まる)
csv2fld: CSVファイルの項目番号に対するa1,a2,...の番号(0から始まる)
298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 |
# File 'lib/nysol/margs.rb', line 298 def field(key,iFile,default=nil,min=nil,max=nil) return unless iFile val=@keyValue[key] val=default if val==nil names1=[] names2=[] flags=[] fld2csv=[] csv2fld=[] # names1,names2,flagsの設定 if val!=nil then val1=val.split(",") val1.each{|v| val2=v.split("%") val3=val2[0].split(":") names1 << val3[0] names2 << val3[1] flags << val2[1] } if min then raise "#{key} takes at least #{min} field name(s)" if names1.size<min end if max then raise "#{key} takes at most #{max} field name(s)" if names1.size>max end iNames=MCMD::Mcsvin.new("i=#{iFile}").names # fld2csvの設定 (0...names1.size).each{|i| pos=iNames.index(names1[i]) if pos==nil then raise "field name not found: `#{names1[i]}'" end fld2csv << pos } # csv2fldの設定 (0...iNames.size).each{|i| pos=fld2csv.index(i) if pos!=nil csv2fld << pos else csv2fld << nil end } ret=Hash.new ret["names"]=names1 ret["newNames"]=names2 ret["flags"]=flags ret["fld2csv"]=fld2csv ret["csv2fld"]=csv2fld ret["csvNames"]=iNames return ret else return nil end end |
#file(key, mode = "r", default = nil) ⇒ Object
ファイル型引数の値のチェックと取得
返値: 引数で指定されたファイル名(String)
key: “key=”形式の引数キーワード
ここで指定した引数の値をファイル名と想定し、そのファイルがreadable(writable)かどうかをチェックする。
readable(writable)であればそのファイル名を返し、readable(writable)でなければエラー終了する。
readable(writable)チェックをしないのであればMargs::strを使えばよい。
mode: “r”もしくは“w”を指定し、rならばreadableチェックを、wならwritebleチェックを行う。
272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 |
# File 'lib/nysol/margs.rb', line 272 def file(key,mode="r",default=nil) val=@keyValue[key] val=default if val==nil if val!=nil then # valがnilの場合(ex. 値なし指定"i=")はノーチェックで通す if mode=="r" then if not File.readable? val then raise "file open error: `#{val}' is not readable" end elsif mode=="w" then if not File.writable? File.dirname(val) then raise "file open error: `#{val}' is not writable" end end end return val end |
#float(key, default = nil, from = nil, to = nil) ⇒ Object
Float型引数の値のチェックと取得
返値: 引数で指定された値(Float)
key: “key=”形式の引数キーワード
ここで指定した引数の値をFloatとして返す。
コマンドラインで指定されていなければdefaultの値を返す。
default: コマンドラインで指定されなかったときのデフォルト値
from: 値の下限値。指定した値が下限値を下回ればエラー終了する。
to: 値の上限値。指定した値が上限値を上回ればエラー終了する。
237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 |
# File 'lib/nysol/margs.rb', line 237 def float(key, default=nil, from=nil, to=nil) val=@keyValue[key] val=default if val==nil if val!=nil then val=val.to_f if from != nil and val<from then raise "range error: `#{key}=#{val}': must be in [#{from}..#{to}]" end if to != nil and val>to then raise "range error: `#{key}=#{val}': must be in [#{from}..#{to}]" end end return val end |
#getKeyValue(prefix = nil) ⇒ Object
key-valuを配列で返す
361 362 363 364 365 366 367 |
# File 'lib/nysol/margs.rb', line 361 def getKeyValue(prefix=nil) ret=[] @keyValue.each{|k,v| ret << ["#{prefix}#{k}","#{v}"] } return ret end |
#int(key, default = nil, from = nil, to = nil) ⇒ Object
Fixnum型引数の値のチェックと取得
返値: 引数で指定された値(Fixnum)
key: “key=”形式の引数キーワード
ここで指定した引数の値をFloatとして返す。
コマンドラインで指定されていなければdefaultの値を返す。
default: コマンドラインで指定されなかったときのデフォルト値
from: 値の下限値。指定した値が下限値を下回ればエラー終了する。
to: 値の上限値。指定した値が上限値を上回ればエラー終了する。
208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 |
# File 'lib/nysol/margs.rb', line 208 def int(key, default=nil, from=nil, to=nil) val=@keyValue[key] val=default if val==nil if val!=nil then val=val.to_i if from != nil and val<from then raise "range error: `#{key}=#{val}': must be in [#{from}..#{to}]" end if to != nil and val>to then raise "range error: `#{key}=#{val}': must be in [#{from}..#{to}]" end end return val end |
#str(key, default = nil, token1 = nil, token2 = nil) ⇒ Object
String型引数の値のチェックと取得
返値: 引数で指定された値(String)
key: “key=”形式の引数キーワード(String)
ここで指定した引数の値をStringとして返す。
コマンドラインで指定されていなければdefaultの値を返す。
default: コマンドラインで指定されなかったときのデフォルト値(String)
178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 |
# File 'lib/nysol/margs.rb', line 178 def str(key,default=nil,token1=nil,token2=nil) val=@keyValue[key] val=default if val==nil if val!=nil then if token1!=nil then val=val.split(token1) if token2!=nil then ary=val.dup() val=[] ary.each{|v| val << v.split(token2) } end end end return val end |