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>
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>
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>
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>
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>
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!