자체 Markdown Parser : Part 2- 명령 줄에서 파일을 읽는 방법은 다음과 같습니다.
이 게시물에서는 마크 다운 파일을 명령 줄 인수로 받아들이고 내용을 읽고 터미널에서 파일의 전체 내용을 인쇄하는 명령 줄 인터페이스를 구현합니다.
이 작업을 수행 한 후, 우리는 기본 텍스트, 헤더, 목록 등을 구문 분석하기 시작할 것입니다.
모든 코드를 자세히 설명하겠습니다. 결국에는 문제없이 시도 할 수 있도록 전체 코드를 알려 드리겠습니다.
필요한 모듈
사용해야하는 두 가지 모듈이 있습니다.
-
std::env– 우리는 필요합니다env환경과 상호 작용하기위한 모듈 현재 프로그램이 실행 중입니다. 이제 우리는이를 사용하여 프로그램에 전달 된 명령 줄 인수에 액세스합니다. -
std::fs– 우리는 필요합니다fs파일을 읽고 파일 쓰기와 같은 파일 작업의 경우.std :: env를 사용합니다. std :: fs를 사용하십시오.
명령 줄에서 마크 다운 파일을 가져옵니다.
필요한 모듈을 얻은 후 명령 줄 인수에서 Markdown 파일을 얻기 시작할 수 있습니다. 이제부터 모든 코드 라인을 기본 기능 안에 쓸 것입니다.
let args: Vec = env::args().collect();
이 라인이 무엇을하는지 이해합시다.
env::args()-이 함수는 명령 줄에 제공된 인수의 반복자를 프로그램에 반환합니다.collect()– 그런 다음 Collect () 메소드를 사용하여 반복자를 소비하고 해당 반복자에서 모든 항목을 컬렉션으로 수집합니다.Vec– 반복기에서 모든 항목을 저장하려면 유형의 요소를 저장하는 벡터 컬렉션을 사용하고 있습니다.String. 우리는 이것의 변수 이름을 주었다Vec~처럼args. 그래서,이args해당 명령 줄 반복자에서 모든 항목을 보관하고 있습니다.
이제 사용자가 명령 줄 인수에 Markdown 파일을 제공하는 사용자가 고의적으로 또는 무의식적으로 건너 뛰는 경우를 처리 해 봅시다. 이 경우 사용자에게 마크 다운 파일을 제공하도록 요청해야합니다.
if args.len()
여기서 명령 번호가 2 미만인 경우 사용자에게 Markdown 파일을 제공하도록 요청한 다음 프로그램에서 돌아 오도록 명령문을 인쇄합니다.
[!Note] 명령 줄의 인수 수, 첫 번째 인수는 프로그램 이름입니다. 파일 이름을 나타내는 또 다른 주장이 필요합니다. 따라서 우리는 길이가 필요합니다
args2 이상.
파일을 읽고 내용 인쇄.
이제 명령 줄 인수에서 얻은 파일 이름을 저장합시다.
let filename = &args[1];
우리는 변수를 만들고 있습니다 filename 제 2 차 명령 줄 인수에서 파일 이름을 저장합니다.
이제 파일의 원시 콘텐츠를 읽고 전체 내용을 그대로 인쇄하겠습니다.
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파일 이름으로 지정된 파일의 전체 내용을 읽는 모듈.- 그런 다음 전체 내용을 저장하고 있습니다
content가변적이며 마지막으로 콘솔에서 전체 컨텐츠를 인쇄합니다.
설명하기 전에 expect() 방법, Rust의 특정 데이터 유형을 이해해 봅시다.
Result 녹에서
Rust에서 실패 할 수있는 작업을 처리하는 방법은 사용하는 것입니다. Result 유형. 그것은 두 가지 변형이있는 열거입니다.
enum Result {
Ok(T), // Success - contains the value of type T
Err(E), // Error - contains the error of type E
}
이제 다시 돌아가 봅시다 fs::read_to_string() 기능. 문서를 보면 a Result 유형 및 성공의 경우 a를 반환합니다 String 유형 및 실패 케이스의 경우 a를 반환합니다 std::io::Error 유형.
이제 이것과 연결합시다 expect() 방법.
이것 expect() 방법은 다음과 같은 바로 가기입니다.
- 만약에
fs::read_to_string()잘 작동하고 돌아옵니다Ok(string)그런 다음 문자열 값을 반환합니다. - 만약에
fs::read_to_string()작동하지 않으면 사용자 정의 오류 메시지로 프로그램을 충돌시킵니다 (“파일을 읽는 것이 잘못되었습니다”).
프로그램 테스트
테스트하려면 a를 만들어 봅시다 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 = env::args().collect();
if args.len()
결론
이 게시물에서는 명령 줄과 상호 작용하는 방법을 이해하고 명령 줄 인수에서 Markdown 파일을 읽었습니다. 또한 기본 오류 처리를 사용하여 이해했습니다 Result 우리가 일이 잘못 될 수 있다는 것을 알고있는 곳에서 우리의 프로그램이 그것을 처리 할 수 있는지 확인했습니다.
이제 우리는 모든 Markdown 파일 컨텐츠를 읽고 인쇄하는 것을 이해합니다. 다음 게시물에서 우리는 천천히 구문 분석 알고리즘을 단계별로 구현하고 기본 텍스트, 헤더, 목록 및 기타 물건을 하나씩 커버 할 것입니다. 나는 다음 게시물에 정말로 흥분합니다. 나도 당신도 흥분되기를 바랍니다. 곧 봐요.




Post Comment