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サイトなどで紹介していただければ有り難いですが、特に当サイトからコードを利用したことの明記やその他の義務制限はございません。