Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Memisahkan Rentetan Baris Perintah ke Array Rentetan dalam C#?
Rentetan parameter baris arahan C# dibahagikan kepada tatasusunan rentetan
Artikel ini bertujuan untuk menyelesaikan masalah pemisahan rentetan tunggal yang mengandungi parameter baris arahan ke dalam tatasusunan rentetan, seperti yang dilakukan oleh C# apabila menentukan parameter ini pada baris arahan.
Mengapa anda memerlukan fungsi tersuai?
Malangnya, C# tidak mempunyai fungsi terbina dalam untuk memisahkan rentetan berdasarkan keadaan aksara tertentu. Ini sesuai untuk tugasan ini kerana kami ingin membahagikan berdasarkan ruang kosong, dengan mengambil kira rentetan yang dipetik.
Skema ungkapan biasa
Seseorang mungkin mencadangkan menggunakan ungkapan biasa (regex) untuk mencapai ini. Walau bagaimanapun, ungkapan biasa boleh menjadi rumit dan sukar untuk dikekalkan, terutamanya apabila ia berkaitan dengan pengendalian rentetan petikan dengan betul.
Fungsi pembahagian tersuai
Untuk mengatasi had ini, kami akan mencipta fungsi Split tersuai kami sendiri:
<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); }</code>
Fungsi ini mengambil predikat sebagai hujah untuk menentukan sama ada watak harus membelah rentetan.
Pemprosesan tanda petikan
Untuk mengendalikan rentetan yang disebut, kami mentakrifkan kaedah sambungan TrimMatchingQuotes:
<code class="language-csharp">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>
Kaedah ini hanya mengalih keluar petikan sepadan yang muncul pada permulaan dan penghujung rentetan.
Gunakan dalam kombinasi
Menggabungkan teknik ini, kita boleh mencipta fungsi untuk memisahkan rentetan baris arahan:
<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>
Fungsi ini memisahkan rentetan berdasarkan ruang, mengabaikan ruang dalam rentetan yang disebut. Ia kemudian memangkas setiap hujah, mengalih keluar petikan di sekeliling jika ada.
Contoh penggunaan
Untuk menggunakan fungsi ini:
<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();</code>
parameterArray akan mengandungi tatasusunan jangkaan parameter rentetan sepadan dengan rentetan baris arahan.
Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Rentetan Baris Perintah ke Array Rentetan dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!