Monoでコンソールアプリケーションを作るときにargsの扱いが手間だったので作った。今のところ機能はそれだけ。dllとして書き出しているのでVB.NETやC++.NETでも使える。
shokai / ConsoleLib.NET / overview — bitbucket.org
右上からzipでダウンロードできる。mercurialを使っている人は
hg clone http://bitbucket.org/shokai/consolelibnet/ ./consolelibnet
使用例(ConsoleLibSample.exeのコード)
argsをハイフンなし、ハイフンつきなどを分けてくれる。
動かしてみる。ためしに引数を渡すと
./ConsoleLibSample.exe post -m “hello world” -o out.txt -l -s
こういう風に分割してくれる。
First: post
Switches: l s
Params:
m=hello world
output=out.txt
ARGS: post,-m,hello world,-o,out.txt,-l,-s,
使用例のコードを見ればわかるが、ParamsParserに渡せば分解してくれる。
- 一番最初の引数。postとか、メソッド名的に使うであろうもの
→ ParamsParser.Firstでアクセスできる。一番最初がハイフンで始まる時はnullを返す。 - -m “hello world”や-o out.txtの様にhashとして使うであろうもの
→ ParamsParser.ParamsプロパティとしてDictionary(.NETのHash)でアクセスできる。
ParamsParser.Params[“m”]で”hello world”が取り出せる。 - -l、-sなどハイフンありの次にハイフン無しの引数が来ない物
→ スイッチ。ParamsParser.Switchesとして、Listでアクセスできる。ParamsParser.hasSwitch(“s”)でtrue/falseで返ってくる。
頭のハイフンは何個付けても全て取り除かれる。
./ConsoleLibSample.exe post -s -l -o out.txt -m “hello world”
のように順番が変わっていても、全て同じように扱える。
-o out.txtとしたのに出力で
output=out.txtとなっているのは、Bindを使っているから。
pp.Bind(“output”, “o”);
これで、-outputでも-oでも、pp.Params[“output”]としてアクセスできる。引数の省略形を定義するのに使える。
もちろん
pp.Bind(“output”, “o”);
pp.Bind(“output”, “out”);
の様に多重にBindも可能。
VS2008で単体テストのとおり今回はテスト駆動開発した。テストコードの方が本体よりも多いが、全然生産性は高く感じる。
今回は特に正規表現を何度も使っているので、1つの関数に3つ4つテストコードが先に書かれている方が一度にチェックできる量が多い。テストは素晴らしい。