[C#]コマンドライン引数の解析ライブラリ WinGetOpt


C#でコマンドラインプログラムを作成した際の、起動引数を解析するためのライブラリを作りました。


出来ること

以下の形式でパラメータ指定された引数を解析できます

1:key,valueの指定が可能
  例: example.exe /key1 value1 /key2 value2

2:value無しで、キーだけ指定することも可能(スイッチ・フラグ等)
  例: example.exe /verbose

3:普通に値だけ指定することももちろん可能
  例: example.exe c:\out.txt

4:もちろん上記全部を組み合わせることも可能
  例: getOrder.exe /MarchantId MID001 /MarketplaceId A1XXX /verbose c:\orderList.txt


サンプル

この手のライブラリを使う人は、仕様説明の文章より、サンプルコード見た方が速いと思うので、いきなりサンプルプログラムを提示します。プログラム中のWinGetOpt.Options, WinGetOpt.CommandLine, WinGetOpt.OptionParserの3つが、今回作成したクラスです。

    using WinGetOpt;
    public static void Main( String[] args ) {
        //---------------------
        // テスト用パラメータ
        //---------------------
        String [] test = { "/secret_key",   "SEC_AAAAA",
                           "/access_key",   "ACC_AAAAA",
                           "/multi_key",    "value1",
                           "/multi_key",    "value2",
                           "/verbose",
                           "/nodefined_key","valueZ",
                           "c:\\outfileName.txt"
                         };
 
        //------------------------------------
        // コマンドラインパラメータを解析する
        //------------------------------------
        CommandLine cl = getParam( test );
 
 
        //------------------------------------
        // 解析後のパラメータを出力する
        //------------------------------------
 
        // dump
        Console.WriteLine( "ToString() :" + cl.ToString() );
 
        // 指定されたパラメータの取得
        Console.WriteLine( "secret_key :" + cl.GetOptionValue( "secret_key" ) );
 
        // 値を持たないflgも指定可能
        if ( cl.HasOption( "verbose" ) ) {
            Console.WriteLine( "verboseが指定されています" );
        }
 
 
        // オプションパラメータが指定されているかのチェック
        if ( cl.HasOption( "entry_point" ) ) {
            Console.WriteLine( "entry_pointが指定されています" );
        } else {
            Console.WriteLine( "entry_pointが指定されていません" );
        }
 
        // 特定のキーに対して複数パラメータの指定も可能
        foreach ( String value in cl.GetOptionValues( "multi_key" ) ) {
            Console.WriteLine( "key1 : " + value );
        }
    }
 
 
    //**********************************************************************************************
    /// <summary>起動引数を取得する
    /// </summary>
    /// <param name="mws"></param>
    //**********************************************************************************************
    private static CommandLine getParam( String[] args ) {
        Options optdef;
 
        //---------------------------------------------------------
        // オプションの定義を行う(optName, hasArg, description)
        //---------------------------------------------------------
        optdef = new Options();
        optdef.AddOption( "access_key",  true , "MWSの秘密キー"                );
        optdef.AddOption( "secret_key",  true , "MWSのアクセスキー"            );
        optdef.AddOption( "entry_point", true , "検索を行うサイトのURL"        );
        optdef.AddOption( "multi_key",   true , "このキーは複数指定できます"   );
        optdef.AddOption( "verbose",     false, "ログの詳細表示を行うかフラグ" );
 
        //---------------------------------------------------------
        // コマンドラインオプションを解析する
        //---------------------------------------------------------
        OptionParser parser = new OptionParser();
        return parser.parse( optdef, args );
    }



実行結果


見やすくするため、一部改行しています

ToString() :param={{key:secret_key value:SEC_AAAAA},
                   {key:access_key value:ACC_AAAAA}, 
                   {key:multi_key value:{value1,value2,},
                   {key:verbose value:true},
                   {key: value:{/nodefined_key,valueZ,c:\outfileName.txt,},
 
secret_key :SEC_AAAAA
 
verboseが指定されています
 
entry_pointが指定されていません
 
key1 : value1
key1 : value2



ちなみに、key(xxx.exe /keyの”/key”部)無しパラメータは、cl.GetOptionValues(“”)で取得できます。


ダウンロード:
WinGetOpt.zip

関連記事

2 Responses to “[C#]コマンドライン引数の解析ライブラリ WinGetOpt”

  1. だらりん より:

    こんにちは。
    このコマンドライン引数の解析クラスの構造、参考になります。もしよろしければ、参考にさせていただいてよろしいでしょうか?(ライセンスルールの提示がございませんでしたので、コメントさせていただきました。)

    • admin より:

      だらりん様
      ソースコードですが、ご自由にご利用いただいて結構です。


      もし有用でしたら、アプリ内やWebサイトなどで紹介していただければ有り難いですが、特に当サイトからコードを利用したことの明記やその他の義務制限はございません。

コメントを残す

メールアドレスが公開されることはありません。