Ebben a bejegyzésben végrehajtunk egy parancssori felületet, amely elfogadja a markdown fájlt parancssori argumentumként, elolvassa annak tartalmát, és kinyomtatja a fájl teljes tartalmát a terminálban. Miután ezt megtettük, jó úton leszünk az alapvető szövegek, fejlécek, listák stb. elemzésének végrehajtása felé. Részletesen elmagyarázom az összes kódot, és a végén megadom neked az egész kódot, hogy minden probléma nélkül kipróbálhasd. Szükséges modulok Két modul van, amelyeket használni kell: - 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; A markdown fájl megszerzése a parancssorból. Miután megkaptuk a szükséges modulokat, elkezdhetjük dolgozni a markdown fájl megszerzésén a parancssori argumentumból. let args: Vec<String> = env::args().collect(); Nézzük meg, mit tesz ez a vonal. env::args() - Ez a függvény a programnak a parancssorban megadott argumentumok iterátorát adja vissza. collect() - Ezután a collect() módszert használjuk az iteratort fogyasztani és az iteratortól származó összes elemet gyűjteni egy gyűjteménybe. Vec<String> - Az iteratortól származó összes elem tárolásához a Vector gyűjteményt használjuk, amely a String típusú elemeket tárolja. A Vec<String> változó nevét args-ként adtuk. Most kezeljük azt az esetet, amikor a felhasználó tudatosan vagy tudattalanul kihagyja a markdown fájlt a parancssori argumentumban. if args.len() < 2 { println!("Please provide a markdown file"); return; } Itt azt mondjuk, ha a parancsok száma kevesebb, mint 2, akkor nyomtasson ki egy kijelentést, amely felkéri a felhasználót, hogy adjon meg egy markdown fájlt, majd térjen vissza a programból. [!Megjegyzés] Argumentumok száma A parancssorban az első argumentum a program neve. Szükségünk van egy másik argumentumra, amely a fájlnevet képviseli. [!Megjegyzés] Argumentumok száma A parancssorban az első argumentum a program neve. Szükségünk van egy másik argumentumra, amely a fájlnevet képviseli. Olvassa el a fájlt és nyomtassa ki annak tartalmát. Most tároljuk a fájl nevét, amelyet a parancssori argumentumból kaptunk. let filename = &args[1]; Egy változót hozunk létre és tárolja a fájl nevét a második parancsfájl-argumentumból. filename Most kezdjük el elolvasni a fájl nyers tartalmát, és nyomtassuk ki az egész tartalmat. 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); Először is, csak nyomtatunk egy naplózási nyilatkozatot, hogy tudjuk, hogy megpróbáljuk elolvasni a fájlt. fs::read_to_string(filename) - Ez a funkció az fs modulból származik, amely elolvassa a fájlnév által megadott fájl teljes tartalmát. Ezután az egész tartalmat tároljuk a tartalmi változóban, és végül kinyomtatjuk az egész tartalmat a konzolon. Mielőtt elmagyaráznám a megértjük a Rust egy adott adattípusát. expect() A nyugalomban eredmény eredmény A Rustban a sikertelen műveletek kezelésének módja az, hogy Ez egy enum két variációval: Result enum Result<T, E> { Ok(T), // Success - contains the value of type T Err(E), // Error - contains the error of type E } Most térjünk vissza a funkciót. Ha megnézi a dokumentumokat, a típus, és egy sikeres eset esetén visszatér a meghibásodás esetén, és visszaadja a A típus. fs::read_to_string() Result String std::io::Error Ezzel összekapcsoljuk a A módszer. expect() Ezt A módszer egy rövidítés, amely azt mondja: expect() ha fs::read_to_string() jól működik, és visszaadja az Ok(string), akkor adja vissza a karakterlánc értéket. ha fs::read_to_string() nem működik, akkor a program összeomlik a testreszabott hibaüzenettel („valami rosszul ment a fájl olvasásakor”). A program tesztelése A teszteléshez hozzon létre egy fájl a projekt gyökerében, és helyezzen be egy véletlenszerű markdown szöveget. test.md # this is a header - this is a list this is a normal text Most nyissa meg a terminált a projektkönyvtárból, és írja be a parancsot: cargo run -- test.md Összeállítja és végrehajtja a kódot, és megadja a következő kimenetet. Ez a kimenet azt mutatja, hogy sikeresen megkaphatjuk a markdown fájl tartalmát, és kinyomtathatjuk nyers adatait. Teljes forráskód 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); } következtetés Ebben a bejegyzésben megértettük, hogyan kell kölcsönhatásba lépni a parancssorral, és olvassuk el a markdown fájlt a parancssor argumentumából. ahol tudjuk, hogy a dolgok rosszul menhetnek, és biztosak voltunk benne, hogy programunk képes erre. Result Most megértjük az összes markdown fájl tartalmának olvasását és kinyomtatását. A következő poszttól kezdve lassan lépésről lépésre végrehajtjuk az elemzési algoritmust, és az alapvető szöveget, fejléceket, listákat és más dolgokat egyenként fedjük le.