Maison > développement back-end > C++ > Comment diviser efficacement les paramètres de ligne de commande d'une seule chaîne en C# ?

Comment diviser efficacement les paramètres de ligne de commande d'une seule chaîne en C# ?

Mary-Kate Olsen
Libérer: 2025-01-15 11:54:43
original
783 Les gens l'ont consulté

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

Comment diviser efficacement les paramètres de ligne de commande d'une seule chaîne en C#

En C#, obtenir le tableau d’arguments de ligne de commande transmis à l’exécutable est une tâche critique. Lorsque les paramètres sont fournis sous forme de chaîne unique, nous avons besoin d'un moyen d'extraire les paramètres individuels, de la même manière que C# gère les paramètres lorsqu'ils sont spécifiés directement sur la ligne de commande. Cet article décrit une méthode de segmentation personnalisée pour y parvenir.

Il n'existe pas de fonction standard en C# pour diviser une chaîne en fonction de conditions spécifiques, nous avons donc défini notre propre méthode d'extension Split :

<code class="language-csharp">public static IEnumerable<string> Split(this string str, Func<char, bool> controller)</code>
Copier après la connexion

Cette méthode accepte comme argument une fonction qui détermine quand diviser la chaîne. Dans notre cas nous utilisons des expressions lambda :

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

    return !inQuotes && c == ' ';
};</code>
Copier après la connexion

Cette fonction vérifie les guillemets doubles et les espaces pour déterminer le point de partage. Les guillemets doubles entourent des arguments pouvant contenir des espaces et nécessitant donc un traitement spécial.

Après avoir divisé la chaîne, nous utilisons la méthode d'extension TrimMatchingQuotes pour traiter davantage les paramètres résultants, en supprimant les guillemets doubles de début ou de fin :

<code class="language-csharp">public static string TrimMatchingQuotes(this string input, char quote)</code>
Copier après la connexion

En combinant ces méthodes, nous créons la fonction SplitCommandLine qui accepte une chaîne contenant des arguments de ligne de commande et renvoie un tableau de chaînes :

<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>
Copier après la connexion

Cette fonction divise une chaîne en fonction de critères spécifiés, supprime tous les espaces et supprime tous les guillemets doubles environnants. Le tableau de chaînes résultant représente avec précision les arguments de ligne de commande générés par C#.

Pour démontrer sa fonctionnalité, nous proposons quelques cas de tests :

<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>
Copier après la connexion

En utilisant ces fonctions de fractionnement personnalisées, nous pouvons extraire efficacement les arguments de ligne de commande d'une seule chaîne en C#, ce qui nous permet de les utiliser selon nos besoins.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal