У гэтай публікацыі мы ўсталявем інтэрфейс камандавага лініі, які будзе прымаць файл markdown як аргумент камандавага лініі, прачытаць яго кантэнт і друкаваць ўвесь кантэнт файла ў термінале. Пасля таго, як мы зробім гэта, мы будзем добра на шляху, каб пачаць рэалізацыю аналізу асноўных тэкстаў, назвы, спісы і так далі. Я паясню ўвесь код падрабязна, і ў канцы, я дам вам увесь код, так што вы можаце паспрабаваць без любых праблем. Запрашаныя модулі Ёсць два модулі, якія мы павінны выкарыстоўваць: - 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; Загрузіць файл з камандавай лініі. Пасля атрымання патрабаваных модуляў, мы можам пачынаць працаваць над выкананнем маркераванага файла з аргумента лініі камандаў. let args: Vec<String> = env::args().collect(); Давайце разумеем, што робіць гэтая лінія. env::args() - Гэтая функцыя вяртае ітэратар аргументаў, дадзеных у камандным лініі ў праграму. collect() - Затым мы выкарыстоўваем метад collect() для выкарыстання ітэратара і збіраем усе элементы з таго ітэратара ў калекцыю. Vec<String> - Для захоўвання усіх элементаў з ітэратара мы выкарыстоўваем калекцыю Вектар, якая захоўвае элементы тыпу String. Мы давалі пераменную назву гэтага Vec<String> як args. Усё, што вы чулі пра карысць пара раней - усяго толькі чуткі і павер'і. if args.len() < 2 { println!("Please provide a markdown file"); return; } Тут мы кажам, калі колькасць камандаў менш за 2, а затым друкаваць заяву, якая запрашае карыстальніка, каб забяспечыць маркаванне файла, а затым вярнуцца з праграмы. [!Note] Кількі аргументаў У камандавай лініі першы аргумент з'яўляецца назвай праграмы. Нам патрэбны іншы аргумент, які будзе ўяўляць назву файла. У нашай багатай беларускай літаратуры няма другога такога твора, які па энцыклапедычнасці выяўлення ў ім нацыянальнага, так набліжаўся б да "Новай зямлі". Іх будзе не менш за два. args Чытаць файлы і друкаваць іх. Цяпер давайце згадаем назву файла, які мы атрымалі з аргумента лініі камандаў. let filename = &args[1]; Мы ствараем варыянты І ў другім тайме зразумелі, што нешта змянілася. filename Зараз, давайте пачнём чытаць сыравы кантэнт файла і друкаваць увесь кантэнт, як ён ёсць. 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); Перш за ўсё, мы толькі друкаем заяву, каб ведаць, што мы спрабуем прачытаць файл. fs::read_to_string(filename) - Гэтая функцыя прыходзіць з модуля fs, які чытае ўвесь кантэнт файла, які вызначаны назвай файла. Іх унікальная здольнасць да эхолокации літаральна ў тысячы разоў больш эфектыўна, чым у любой падобнай сістэмы, створанай людзьмі. Перш за ўсё, поясню Давайце паглядзім на тое, што такое рухавік у рускай мове. expect() У споведзі Result Вынікі У Rust, спосаб мы справімся з аперацыямі, якія могуць не справіцца, з'яўляецца выкарыстаннем Гэта энум з двума варыянтамі: Result enum Result<T, E> { Ok(T), // Success - contains the value of type T Err(E), // Error - contains the error of type E } А цяпер вернемся да Узнікае пытанне: калі іх ведае увесь свет, ці можна назваць іх няўдачнікамі? У азначаным выпадку адказнасць за Наступным крокам з'яўляецца выбар адпаведнага абсталявання для Тып fs::read_to_string() Result String std::io::Error Давайце звязваем гэта з І методы. expect() Гэта Гэта рэпрэсіўны механізм, які кажа: expect() Калі fs::read_to_string() працуе добра і вяртае Ok(string), то вяртае значэнне струн. калі fs::read_to_string() не працуе, то скараціць праграму з наміраваным паведамленнем пашкоджання («Чаму-небудзь пайшоў не так, каб чытаць файл»). Выпрабаванне праграмы Для таго, каб вызначыць, давайце стварыць Загрузіць файл у корын праекта і ставіць некаторыя выпадковы маркаванне тэксту. test.md # this is a header - this is a list this is a normal text Цяпер адчыніце свой тэрмін з каталогу праекта і націсніце каманда: cargo run -- test.md Гэта будзе складаць і выканаць код і даць вам наступны выхад. Гэты вынік паказвае, што мы можам паспяхова атрымаць ўтрымліванне файла markdown і друкаваць яго сыравыя дадзеныя. Поўны крынічны код 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); } Высновы У гэтым пошце, мы зразумелі, як ўзаемадзейнічаць з камандным лініі і таксама прачытаць маркаванне файла з аргументаў каманднага лініі. Таму што мы ведаем, што рэчы могуць ісці не так, і мы пацвердзілі, што наша праграма можа рабіць гэта. Result Цяпер мы разумеем, як чытаць і друкаваць ўвесь кантэнт маркетынгавых файлаў. З наступнага пастаўкі, мы паступова будзем рэалізаваць наш алгарытм аналізу крок за крокам і пакрыць асноўны тэкст, заглавы, спісы і іншыя рэчы адзін за іншым.