ちょっとしたコマンドラインパーサーがほしい
「ちょっとしたツールだし、大げさなコマンドラインパーサーを探したり実装するのは面倒だけど、楽に引数をパースしたいな」と思ったことはありませんか?
そんなときのために書きました。シングルファイルなので、一つのファイルをコピーすればすぐに使用できます。ソースコードは、こちら から直接ダウンロード可能です。
使い方
まず、オプションの各値を格納するためのクラスを作成します。
ここでそれぞれのプロパティに対して、属性を設定しておきます。設定の方法は以下の通りで、このコードの例であれば、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; }
}
次に受け取ったコマンドライン引数のパース方法です。パースに成功すると ParserResult
の Value
プロパティから、オプションの値が取得できます。
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 として配布しています。ライセンスに関する記載も不要で、自由に編集、および再配布可能です。
コメント