LoginSignup
8
3

More than 5 years have passed since last update.

[C#] Mono.Optionsを使ってコマンドライン引数を解析する

Last updated at Posted at 2018-04-25

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

8
3
0

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
8
3