ホームページ >バックエンド開発 >C++ >C# でコマンド ライン パラメーターを文字列配列に効率的に解析するにはどうすればよいですか?

C# でコマンド ライン パラメーターを文字列配列に効率的に解析するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-15 11:41:48770ブラウズ

How to Efficiently Parse Command-Line Parameters into a String Array in C#?

C# コマンド ライン パラメーターは文字列配列に解析されます

C# では、多くの場合、コマンド ライン パラメーターを含む文字列を文字列配列に分割する必要があります。この記事では、このタスクを実行するための標準関数と推奨される方法について説明します。

重要な考慮事項は、スペースを含む二重引用符で囲まれた文字列の処理です。単に空白に基づいて文字列を分割するだけでは十分ではありません。二重引用符で囲まれた文字列が誤って分割されてしまうからです。

標準機能

C# は、この目的に特化した標準関数を提供していません。この機能は、各文字をチェックするカスタム関数を使用して実現できます。

おすすめの方法

推奨されるアプローチは、次のコード ブロックを使用することです:

<code class="language-csharp">public static IEnumerable<string> SplitCommandLine(string commandLine)
{
    bool inQuotes = false;

    return commandLine.Split(c =>
    {
        if (c == '\"')
            inQuotes = !inQuotes;

        return !inQuotes && c == ' ';
    })
    .Select(arg => arg.Trim().TrimMatchingQuotes('\"'))
    .Where(arg => !string.IsNullOrEmpty(arg));
}</code>

このメソッドは、引用符とスペースをチェックする関数に基づいて文字列を分割し、スペースと引用符を削除します。

カスタム拡張メソッド

別のアプローチは、カスタム拡張メソッドを作成することです:

<code class="language-csharp">public static IEnumerable<string> Split(this string str, Func<char, bool> controller)
{
    int nextPiece = 0;

    for (int c = 0; c < str.Length; c++)
    {
        if (controller(str[c]))
        {
            yield return str.Substring(nextPiece, c - nextPiece);
            nextPiece = c + 1;
        }
    }
    yield return str.Substring(nextPiece);
}

public static string TrimMatchingQuotes(this string input, char quote)
{
    if ((input.Length >= 2) && (input[0] == quote) && (input[input.Length - 1] == quote))
        return input.Substring(1, input.Length - 2);

    return input;
}</code>

コマンドライン文字列は、次のメソッドを使用して分割できます:

<code class="language-csharp">string[] parameterArray = SplitCommandLine(parameterString).ToArray();</code>

使用例

次の例は、上記のメソッドの使用方法を示しています。

<code class="language-csharp">string parameterString = @"/src:""C:\tmp\Some Folder\Sub Folder"" /users:""[email protected]"" tasks:""SomeTask,Some Other Task"" -someParam foo";

string[] parameterArray = SplitCommandLine(parameterString).ToArray();

foreach (string parameter in parameterArray)
{
    Console.WriteLine(parameter);
}</code>

以上がC# でコマンド ライン パラメーターを文字列配列に効率的に解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。