Analyser les arguments de ligne de commande en C#

Saad Aslam 12 octobre 2023
  1. Utilisez le CommandLineParser pour analyser les arguments en C#
  2. Utiliser l’instruction If-Else pour analyser les arguments en C#
Analyser les arguments de ligne de commande en C#

Cet article présentera comment analyser les arguments de ligne de commande à l’aide du langage de programmation C#. Nous étudierons deux approches et stratégies pour atteindre cet objectif.

Le format standard pour une commande est commandName -argumentName argumentValue, où commandName est le nom de la commande. Prenez, par exemple, la commande bien connue apt utilisée sous Linux.

apt install exiftool

Utilisez le CommandLineParser pour analyser les arguments en C#

Au lieu d’analyser manuellement les commandes et les arguments, vous pouvez utiliser une bibliothèque comme CommandLineParser pour effectuer la tâche à votre place, vous n’avez donc pas à vous en soucier. Votre concentration principale peut alors consister à mettre la logique de commande en action.

Nous allons vous montrer comment développer du code permettant à CommandLineParser de recevoir des arguments et d’exécuter vos commandes de la manière suivante.

static void Main(string[] args) {
  Parser.Default.ParseArguments<UpdateCommand, InstallCommand>(args).WithParsed<ICommand>(
      t => t.Execute());
}

Tout d’abord, vous devez installer le package NuGet, ce qui peut être fait en exécutant la commande suivante.

Install-Package CommandLineParser

Créez une classe ou une interface de base pour vos commandes si elles n’existent pas déjà. En revanche, construire une interface vous permet de n’utiliser qu’un seul .WithParsed<ICommand> dans votre code.

public interface ICommand {
  void Execute();
}

UpdateCommand doit être ajouté en premier, puis l’attribut Verb. Ce paramètre demande à CommandLineParser de produire un objet UpdateCommand lorsqu’il rencontre le mot update.

[Verb("update", HelpText = "updates your system to the newest version")]
public class UpdateCommand : ICommand {
  public void Execute() {
    Console.WriteLine("Updating the system");
  }
}

Mettez la InstallCommand à ce moment précis et le paramètre message de la commande install. Incluez la propriété message et l’attribut Option en conséquence directe.

Cet attribut fournit au CommandLineParser des instructions sur la conversion des arguments en propriétés.

[Verb("install", HelpText = "installing your software")]
public class InstallCommand : ICommand {
  [Option("message", Required = true, HelpText = "installing the program")]
  public string Message { get; set; }
  public void Execute() {
    Console.WriteLine($"Executing install for the : {Message}");
  }
}

Enfin, passez les arguments à CommandLineParser en tant que paramètres de type pour les analyser.

Utiliser l’instruction If-Else pour analyser les arguments en C#

Vous trouverez ci-dessous un exemple d’analyse des arguments de la ligne de commande.

static void Main(string[] args) {
  if (!(args.Length != 0)) {
    Console.WriteLine("arguments not correct");
    return;
  }
}

Le but de la ligne qui lit static void Main(string[] args) est d’obtenir les arguments de la ligne de commande et de les enregistrer dans le tableau args. La ligne if (!(args.Length != 0)) vérifie si la longueur totale des arguments est 0 ou non.

Si la longueur est 0, cela indique qu’aucun argument de ligne de commande n’a été fourni au programme.

La ligne qui lit Console.WriteLine("arguments not correct"); indique à l’écran que les arguments sont incorrects afin que l’utilisateur saisisse le nombre correct d’arguments la prochaine fois.

var c = args[0];

La var c = args[0]; ligne crée le nom de variable c et stocke le premier argument passé dans la ligne de commande.

if (c == "update") {
  update();
} else if (c == "install") {
  if (args.Length == 2)
    install(args[1]);
} else {
  Console.WriteLine("Invalid Command");
}

Nous déterminerons si oui ou non la variable c est munie de l’argument update au début des arguments envoyés via la ligne de commande. La fonction update est appelée si la réponse est affirmative.

La condition install vérifie si la variable c inclut l’argument install au début de celle-ci, et si c’est le cas, elle détermine si elle doit ou non avoir deux arguments en comparant la longueur des args variable à 2.

Par conséquent, nous vérifions que dans la liste des paramètres des paramètres qui lui sont donnés via la ligne de commande.

Si la longueur de args est de 2, il appelle la fonction install() avec args[1] comme paramètre.

Le cas autrement sera exécuté chaque fois qu’aucun des autres cas ne correspondra, auquel cas il s’affichera à l’écran Invalid Command.

static void update() {
  Console.WriteLine("updating your system");
}

La fonction update() affiche "updating your system" lorsque la update est envoyée en argument.

static void install(string message) {
  Console.WriteLine($"installing the program {message}");
}

La fonction install() affiche "installing the program {message}" lorsque le install est envoyé en argument.

Code source complet :

using System;

class CommandLineParser {
  static void Main(string[] args) {
    if ((args.Length == 0)) {
      Console.WriteLine("arguments not correct");
      return;
    }
    var c = args[0];

    if (c == "update") {
      update();
    } else if (c == "install") {
      if (args.Length == 2)
        install(args[1]);
    } else {
      Console.WriteLine("Invalid Command");
    }
  }
  static void update() {
    Console.WriteLine("updating your system");
  }
  static void install(string message) {
    Console.WriteLine($"installing the program {message}");
  }
}
Auteur: Saad Aslam
Saad Aslam avatar Saad Aslam avatar

I'm a Flutter application developer with 1 year of professional experience in the field. I've created applications for both, android and iOS using AWS and Firebase, as the backend. I've written articles relating to the theoretical and problem-solving aspects of C, C++, and C#. I'm currently enrolled in an undergraduate program for Information Technology.

LinkedIn