Mono.Optionsを使ってコマンドライン引数を解析する
QiitaでMono.Optionsに関する記事が恐らく見当たらなかったため、Mono.Optionsの使い方を記載する。
Mono.Optionsの使い方
Mono.Optionsとは、コマンドライン引数を解析するNugetパッケージのライブラリのこと。
今回は、3つの処理をそれぞれ説明する。
- オプションを定義する
- オプションを解析する
- オプションの説明文を出力する
オプションを定義する
OptionSetインスタンスにて、解析したいオプションを定義する。
OptionSet p = new OptionSet () {
{ /* オプション名 */, /* オプションの説明文 */, v => { /* 引数の処理方法 */ } },
};
オプション名
指定するオプション名を記載する。
|を用いて複数の形式でオプションを指定することが可能である。
同じオプション名を記載するとArgumentExceptionが発生する。
オプションの説明文
オプションの説明文を記載する。
記載するとオプションの説明文を出力する際に用いることが可能になる。
省略可。
引数の処理方法
オプションの引数の処理方法をラムダ式で記載する。
引数はstring型で渡ってくる。
ヘルプのようにオプションの有無だけを確認する場合、引数がnullであるかどうか判断する。
オプションを解析する
Parseメソッドにて、定義したオプションに従い解析する。
オプションで定義しておらず解析できなかったものはstring型のリストに格納され、戻り値として返ってくる。
解析に失敗した場合、OptionExceptionが発生する。
オプションの説明文を出力する
WriteOptionDescriptionsメソッドにて、OptionSetインスタンスにて定義したオプションの説明文を出力する。
下記のサンプルコードを実行すると以下のように出力される。
-v, --value=VALUE specify a value.
-n, --number=VALUE specify a number.
-h, --help show help.
サンプルコード
static void Main(string[] args)
{
string value = "";
int number = 0;
bool help = false;
OptionSet options = new OptionSet()
{
// string型の引数を取るオプション
{ "v|value=", "specify a value.", v => value = v },
// string型以外の引数を取るオプション
{ "n|number=", "specify a number.", (int v) => number = v },
// 引数を取らないオプション
{ "h|help", "show help.", v => help = v != null },
};
List<string> extra;
try
{
extra = options.Parse(args);
if (help)
{
options.WriteOptionDescriptions(Console.Out);
}
}
catch (OptionException e)
{
Console.WriteLine(e.Message);
}
}
参考
https://components.xamarin.com/gettingstarted/mono.options?version=5.3.0
https://www.ownway.info/WinDev/mono_options/about
https://opcdiary.net/?p=26847