C#でコマンドラインオプション解析したい
C#でコマンドラインの簡単なコマンドラインオプションの例ないかな。と思って以下の記事を見つけました。6年くらい前の記事です
Linqでコマンドラインオプション解析
これ以外の記事は複雑すぎて簡単に適当にいい加減に解析するには少し大きすぎるかな?という様子です。
やはり、C#ってそういう用途に選ばれにくい?
上の記事なんですけれど、使っていてみて少し使いにくいなーという部分がありました。
- 渡されていないオプションは辞書に入ってこない
つまり、辞書に値が入っているかのチェックしてから取り出さないと例外出す
ということは入ってるときと入ってない時があるオプションは、こうかかなきゃいけないわけですよ
T val;
if(dictionary.TryGet("キー",out val))
{
//val
}
これ簡易に何かしたい時には長過ぎるなーと思うわけです。だからオプションが入ってない時はnullとか入っててほしい。
これだけなんですけど結構イライラー
- 地味にキーに-が入ってる
これはString.Substringで1文字削ればいい
結果こんなかんじになりました。
static void Main(string[] args)
{
//こんな感じで引数来るよね
args = "-i 18 -hoge -huga haga -o in.txt".Split(' ');
args = args.Concat(new string[] {""}).ToArray(); // オプションのみと そもそも入っていないの識別
var options = new string[] {"-i", "-hoge", "-huga", "-o"};
var result = options.ToDictionary(p => p.Substring(1), p => args.SkipWhile(a => a != p).Skip(1).FirstOrDefault());
//パラメータなし引数は値がnullでないかでチェック
if(result["hoge"] != null) Console.WriteLine("hogeがあります");
foreach (var param in result)
{
Console.WriteLine(param.Key + "=" + param.Value);
}
}
実行結果
hogeがあります
i=18
hoge=-huga
huga=haga
o=in.txt