Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Memisahkan Parameter Baris Perintah dengan Berkesan daripada Rentetan Tunggal dalam C#?

Bagaimana untuk Memisahkan Parameter Baris Perintah dengan Berkesan daripada Rentetan Tunggal dalam C#?

Mary-Kate Olsen
Lepaskan: 2025-01-15 11:54:43
asal
778 orang telah melayarinya

How to Effectively Split Command-Line Parameters from a Single String in C#?

Cara memisahkan parameter baris arahan rentetan tunggal dengan cekap dalam C#

Dalam C#, mendapatkan tatasusunan argumen baris perintah yang dihantar kepada boleh laku ialah tugas yang kritikal. Apabila parameter disediakan sebagai rentetan tunggal, kami memerlukan cara untuk mengekstrak parameter individu, sama seperti cara C# mengendalikan parameter apabila ia dinyatakan secara langsung pada baris arahan. Artikel ini menerangkan kaedah pembahagian tersuai untuk mencapai matlamat ini.

Tiada fungsi standard dalam C# untuk memisahkan rentetan berdasarkan keadaan tertentu, jadi kami menentukan kaedah sambungan kami sendiri Split:

<code class="language-csharp">public static IEnumerable<string> Split(this string str, Func<char, bool> controller)</code>
Salin selepas log masuk

Kaedah ini menerima sebagai argumen fungsi yang menentukan masa untuk memisahkan rentetan. Dalam kes kami, kami menggunakan ungkapan lambda:

<code class="language-csharp">Func<char, bool> controller = c =>
{
    if (c == '\"')
        inQuotes = !inQuotes;

    return !inQuotes && c == ' ';
};</code>
Salin selepas log masuk

Fungsi ini menyemak petikan berganda dan ruang untuk menentukan titik perpecahan. Petikan berganda melampirkan hujah yang mungkin mengandungi ruang dan oleh itu memerlukan pengendalian khas.

Selepas membelah rentetan, kami menggunakan kaedah sambungan TrimMatchingQuotes untuk memproses lagi parameter yang terhasil, mengalih keluar sebarang petikan berganda di hadapan atau di belakang:

<code class="language-csharp">public static string TrimMatchingQuotes(this string input, char quote)</code>
Salin selepas log masuk

Menggabungkan kaedah ini, kami mencipta fungsi SplitCommandLine yang menerima rentetan yang mengandungi argumen baris arahan dan mengembalikan tatasusunan rentetan:

<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>
Salin selepas log masuk

Fungsi ini memisahkan rentetan berdasarkan kriteria yang ditentukan, memangkas sebarang ruang putih dan mengalih keluar sebarang petikan berganda di sekelilingnya. Tatasusunan rentetan yang terhasil dengan tepat mewakili argumen baris arahan yang dijana oleh C#.

Untuk menunjukkan kefungsiannya, kami menyediakan beberapa kes ujian:

<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>
Salin selepas log masuk

Dengan menggunakan fungsi split tersuai ini, kami boleh mengekstrak argumen baris perintah dengan berkesan daripada rentetan tunggal dalam C#, membolehkan kami menggunakannya mengikut keperluan.

Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Parameter Baris Perintah dengan Berkesan daripada Rentetan Tunggal dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan