1

コマンド ライン (C#) で NDesk に複数の引数リストを解析させるにはどうすればよいですか?

複数のパラメーター (ファイルのリスト) を取る 2 つのフラグがあります。つまり、1 つは -j で、もう 1 つは -c です。しかし、NDesk では、これらの各パラメーターの前に -j/-c を付ける必要があると思います)

たとえば、私が欲しい:

%> main -j file1.j file2.j file3.j -c file4.c file5.c file6.c file7.c

1 つは .j ファイル、もう 1 つは .c ファイルの 2 つのリストを作成します。ただし、このようにリストされたすべてのファイルの前にフラグがあると想定しています。

したがって、これは機能します:

%> main -j file1.j -j file2.j -j file3.j -c file4.c -c file5.c -c file6.c -c file7.c

私はむしろ最初のバージョンが欲しいのですが。

NDesk.Options ライブラリでこれを行う方法はありますか? 私はほとんどのドキュメントを読みましたが、そうではないと思います。

4

2 に答える 2

2

これを行う方法はありますが、ハックはほとんど必要ありません。NDeskは、特別なデフォルトハンドラーとして「<>」を使用します。あなたがすることは、「現在の」パラメータを追跡し、次にデフォルトのハンドラに現在のパラメータに基づいて値をどうするかを決定させることです。これは、値を辞書に入れるサンプルです。

static void Main(string[] args)
{
    string currentParameter = "";
    Dictionary<string, List<string>> parameters = new Dictionary<string, List<string>>();
    OptionSet set = new OptionSet() {
            { "c", ".c files", v => currentParameter = "c" },
            { "j", ".j files", v => currentParameter = "j" },
            { "<>", v => {

                    List<string> values;
                    if (parameters.TryGetValue(currentParameter, out values))
                    {
                        values.Add(v);
                    }
                    else
                    {
                        values = new List<string> { v };
                        parameters.Add(currentParameter, values);
                    }

                }
            }
        };

    set.Parse(args);
    foreach (var parameter in parameters)
    {
        Console.WriteLine("Parameter: {0}", parameter.Key);
        foreach (var value in parameter.Value)
        {
            Console.WriteLine("\t{0}", value);
        }
    }
}

出力は次のとおりです。

パラメーター:j
file1.j
file2.j
file3.j
パラメーター:c
file4.c
file5.c
file6.c
file7.c

于 2013-02-27T23:10:19.890 に答える