CLI

Ces exercices portent sur les arguments de ligne de commande (std::env::args), la crate clap et la lecture de fichiers. À faire dans un projet à part (cargo new). Faites-les dans l'ordre.

Écho des arguments

Écrire un programme qui affiche chacun de ses arguments sur une ligne, sans clap. Ignore le premier (le nom du binaire).

  • Objectif : std::env::args(), .skip(1), for.
  • Signature suggérée : fn main().
  • Cas de test : cargo run -- a b c affiche a, b, c (un par ligne).

Additionneur

cargo run -- 1 2 3 4 affiche 10. Chaque argument est un entier ; si l'un n'est pas un entier, afficher un message d'erreur et quitter avec un code de sortie non nul.

  • Objectif : args, parse, gestion d'erreur, std::process::exit.
  • Signature suggérée : fn main().
  • Cas de test : -- 1 2 3 4 -> 10 ; -- 1 x 3 -> message d'erreur, code de sortie non nul.

clap : salutation

Avec clap (#[derive(Parser)]), un CLI qui accepte --nom <NOM> (obligatoire) et --repeter <N> (optionnel, défaut 1), et affiche "Bonjour !" N fois.

  • Objectif : #[derive(Parser)], #[arg(short, long)], valeur par défaut, Option.
  • Signature suggérée : struct Args { nom: String, repeter: u32 }.
  • Cas de test : -- --nom Alice --repeter 3 affiche 3 lignes "Bonjour Alice !" ; -- --nom Bob en affiche 1 ; sans --nom -> message d'usage de clap.

Compteur de lignes

cargo run -- fichier.txt affiche le nombre de lignes du fichier. Message d'erreur lisible si le fichier n'existe pas.

  • Objectif : argument, std::fs::read_to_string, str::lines().count(), ?.
  • Signature suggérée : fn main() -> Result<(), Box<dyn std::error::Error>>.
  • Cas de test : sur un fichier de 3 lignes -> 3 ; sur un chemin inexistant -> message d'erreur, code de sortie non nul.