[C#] 使いやすいコマンドラインパーサー

C#

ちょっとしたコマンドラインパーサーがほしい

「ちょっとしたツールだし、大げさなコマンドラインパーサーを探したり実装するのは面倒だけど、楽に引数をパースしたいな」と思ったことはありませんか?

そんなときのために書きました。シングルファイルなので、一つのファイルをコピーすればすぐに使用できます。ソースコードは、こちら から直接ダウンロード可能です。

使い方

まず、オプションの各値を格納するためのクラスを作成します。

ここでそれぞれのプロパティに対して、属性を設定しておきます。設定の方法は以下の通りで、このコードの例であれば、Text というプロパティに対して、-i [value]--input [value] で入力されたオプションの値を格納させる、ということを指定しています。

class Options
{
    [Option('i', "input", Required = false, HelpText = "String value")]
    public string Text { get; set; }
    [Option('n', "count", Required = false, HelpText = "Int value")]
    public int IntValue { get; set; }
    [Option('d', "double", Required = false, HelpText = "Double value")]
    public double DoubleValue { get; set; }
}

次に受け取ったコマンドライン引数のパース方法です。パースに成功すると ParserResultValue プロパティから、オプションの値が取得できます。

static void Main(string[] args)
{
    var result = Parser.Parse<Options>(args);

    if (result.Tag == ParserResultType.Parsed)
    {
        System.Console.WriteLine("string value: {0}", result.Value.Text);
        System.Console.WriteLine("int value: {0}", result.Value.IntValue);
        System.Console.WriteLine("double value: {0}", result.Value.DoubleValue);
    }
}

最後にサンプルコードの全体です。

using CommandLineParser;

class Program
{
    class Options
    {
        [Option('i', "input", Required = false, HelpText = "String value")]
        public string Text { get; set; }
        [Option('n', "count", Required = false, HelpText = "Int value")]
        public int IntValue { get; set; }
        [Option('d', "double", Required = false, HelpText = "Double value")]
        public double DoubleValue { get; set; }
    }

    static void Main(string[] args)
    {
        var result = Parser.Parse<Options>(args);

        if (result.Tag == ParserResultType.Parsed)
        {
            System.Console.WriteLine("string value: {0}", result.Value.Text);
            System.Console.WriteLine("int value: {0}", result.Value.IntValue);
            System.Console.WriteLine("double value: {0}", result.Value.DoubleValue);
        }
    }
}

こちらのコマンドラインパーサーを実装するにあたって CommandLineParser の使い方を参考にしました。もちろん、ガワがそれっぽいだけで、本家よりもごく限定的な実装になっています。

ライセンスなど

このコマンドラインパーサーは、Unlicense として配布しています。ライセンスに関する記載も不要で、自由に編集、および再配布可能です。

コメント

タイトルとURLをコピーしました