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
関連記事
こんにちは。
このコマンドライン引数の解析クラスの構造、参考になります。もしよろしければ、参考にさせていただいてよろしいでしょうか?(ライセンスルールの提示がございませんでしたので、コメントさせていただきました。)
だらりん様
ソースコードですが、ご自由にご利用いただいて結構です。
もし有用でしたら、アプリ内やWebサイトなどで紹介していただければ有り難いですが、特に当サイトからコードを利用したことの明記やその他の義務制限はございません。