C# で単一文字列のコマンド ライン パラメーターを効率的に分割する方法
C# では、実行可能ファイルに渡されるコマンド ライン引数の配列を取得することが重要なタスクです。パラメーターが単一の文字列として提供される場合、コマンド ラインで直接指定されたパラメーターを C# が処理する方法と同様に、個々のパラメーターを抽出する方法が必要です。この記事では、これを実現するためのカスタム セグメンテーション方法について説明します。
C# には特定の条件に基づいて文字列を分割する標準関数がないため、独自の拡張メソッド Split
を定義しました。
<code class="language-csharp">public static IEnumerable<string> Split(this string str, Func<char, bool> controller)</code>このメソッドは、文字列をいつ分割するかを決定する関数を引数として受け取ります。私たちのケースでは、ラムダ式を使用します:
<code class="language-csharp">Func<char, bool> controller = c => { if (c == '\"') inQuotes = !inQuotes; return !inQuotes && c == ' '; };</code>この関数は二重引用符とスペースをチェックして分割点を決定します。二重引用符はスペースを含む可能性がある引数を囲むため、特別な処理が必要になります。
文字列を分割した後、
拡張メソッドを使用して結果のパラメータをさらに処理し、先頭または末尾の二重引用符を削除します。 TrimMatchingQuotes
<code class="language-csharp">public static string TrimMatchingQuotes(this string input, char quote)</code>これらのメソッドを組み合わせて、コマンドライン引数を含む文字列を受け取り、文字列の配列を返す
関数を作成します。
SplitCommandLine
<code class="language-csharp">public static IEnumerable<string> SplitCommandLine(string commandLine) { return commandLine.Split(controller) .Select(arg => arg.Trim(' ').TrimMatchingQuotes('\"')) .Where(arg => !string.IsNullOrEmpty(arg)); }</code>
その機能を実証するために、いくつかのテスト ケースを提供します。
これらのカスタム分割関数を使用すると、C# の単一の文字列からコマンド ライン引数を効率的に抽出でき、必要に応じて使用できるようになります。
<code class="language-csharp">Test(@"/src:""C:\tmp\Some Folder\Sub Folder"" /users:""[email protected]"" tasks:""SomeTask,Some Other Task"" -someParam", @"/src:""C:\tmp\Some Folder\Sub Folder""", @"/users:""[email protected]""", @"tasks:""SomeTask,Some Other Task""", @"-someParam");</code>
以上がC# で単一の文字列からコマンド ライン パラメーターを効果的に分割する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。