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 caffichea,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 3affiche 3 lignes "Bonjour Alice !" ;-- --nom Boben affiche 1 ; sans--nom-> message d'usage declap.
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.