LoginSignup
15
16

More than 5 years have passed since last update.

LINQで簡易コマンドラインオプション解析

Last updated at Posted at 2016-02-27

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

15
16
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
16