Dans ce post, nous implémenterons une interface de ligne de commande qui acceptera un fichier de marquage comme argument de ligne de commande, lisera son contenu et imprimera l'intégralité du contenu du fichier dans le terminal. Après cela, nous serons bien sur notre chemin pour commencer à mettre en œuvre le partage des textes de base, des en-têtes, des listes, etc. Je vais expliquer tout le code en détail, et à la fin, je vais vous donner le code entier afin que vous puissiez essayer sans aucun problème. Modules nécessaires Il y a deux modules à utiliser : - we need module for interacting with the environment the program is currently running in. Now, we use it here to access the command-line arguments passed to our program. std::env env - we need for file operations like reading from and writing to files. std::fs fs use std::env; use std::fs; Obtenir le fichier de marquage de la ligne de commande. Après avoir obtenu les modules requis, nous pouvons commencer à travailler sur l'obtention du fichier de marquage à partir de l'argument de ligne de commande. let args: Vec<String> = env::args().collect(); Comprenons ce que fait cette ligne. env::args() - Cette fonction renvoie un itérateur des arguments fournis dans la ligne de commande au programme. collect() - Ensuite, nous utilisons la méthode collect() pour consommer l'itérateur et collecter tous les éléments de cet itérateur dans une collection. Vec<String> - Pour stocker tous les éléments de l'itérateur, nous utilisons la collection Vector qui stocke des éléments de type String. Nous avons donné le nom variable de ce Vec<String> comme args. Maintenant, traitons le cas où l'utilisateur saute consciemment ou inconsciemment en donnant le fichier de marquage dans l'argument de ligne de commande. if args.len() < 2 { println!("Please provide a markdown file"); return; } Ici, nous disons si le nombre de commandes est inférieur à 2, puis imprimez une déclaration demandant à l'utilisateur de fournir un fichier de marquage, puis revenez du programme. [!Note] Nombre d'arguments Dans la ligne de commande, le premier argument est le nom du programme. Nous avons besoin d'un autre argument qui représentera le nom du fichier. [!Note] Nombre d'arguments Dans la ligne de commande, le premier argument est le nom du programme. Nous avons besoin d'un autre argument qui représentera le nom du fichier. Pour être au moins 2. args Lire le fichier et imprimer son contenu. Maintenant, sauvegardons le nom de fichier que nous avons obtenu à partir de l'argument de ligne de commande. let filename = &args[1]; Nous créons une variable et enregistrer le nom du fichier à partir de l'argument de la ligne de commande 2. filename Maintenant, commençons par lire le contenu brut du fichier et imprimons tout le contenu tel qu’il est. println!("Attempting to read file: {}", filename); let content = fs::read_to_string(filename).expect("Something went wrong reading the file"); println!("File content:\n{}", content); Tout d’abord, nous imprimons simplement une déclaration de journalisation pour savoir que nous essayons de lire le fichier. fs::read_to_string(filename) - Cette fonction provient du module fs qui lit l'intégralité du contenu du fichier spécifié par le nom du fichier. Ensuite, nous stockons tout le contenu dans la variable de contenu et imprimons finalement tout le contenu sur la console. Avant d’expliquer le méthode, comprenons un type de données spécifique dans Rust. expect() dans le repos Result Résultat Dans Rust, la façon dont nous traitons les opérations qui pourraient échouer est d'utiliser Il s’agit d’un enum avec deux variantes : Result enum Result<T, E> { Ok(T), // Success - contains the value of type T Err(E), // Error - contains the error of type E } Maintenant, revenons au fonction. Si vous regardez dans les documents, il renvoie une type, et pour un cas de succès, il renvoie un type, et pour un cas d'échec, il renvoie un du type. fs::read_to_string() Result String std::io::Error Maintenant, relions ceci avec le La méthode . expect() Ceci La méthode est un raccourci qui dit : expect() si fs::read_to_string() fonctionne bien et renvoie Ok(string), puis renvoie la valeur de la chaîne. si fs::read_to_string() ne fonctionne pas, alors écrasez le programme avec le message d'erreur personnalisé (« Quelque chose ne va pas lire le fichier »). Tester le programme Pour tester, créons un fichier dans la racine du projet et mettre un texte de marqueur aléatoire. test.md # this is a header - this is a list this is a normal text Maintenant, ouvrez votre terminal à partir de votre répertoire de projet et tapez la commande: cargo run -- test.md Il compilera et exécutera le code et vous donnera la sortie suivante. Cette sortie montre que nous pouvons obtenir avec succès le contenu du fichier de marquage et imprimer ses données brutes. Code source complet use std::env; use std::fs; fn main() { let args: Vec<String> = env::args().collect(); if args.len() < 2 { println!("Please provide a markdown file"); return; } let filename = &args[1]; println!("Attempting to read file: {}", filename); let content = fs::read_to_string(filename).expect("Something went wrong reading the file"); println!("File content:\n{}", content); } Conclusion Dans ce post, nous avons compris comment interagir avec la ligne de commande et aussi lire le fichier de marquage de l'argument de ligne de commande. où nous savons que les choses peuvent aller mal, et nous nous sommes assurés que notre programme peut gérer cela. Result Maintenant, nous comprenons la lecture et l'impression de tout le contenu du fichier de marque. À partir du prochain post, nous allons lentement mettre en œuvre notre algorithme de partage étape par étape et couvrir le texte de base, les en-têtes, les listes et d'autres choses un par un.