자체 Markdown Parser : Part 2- 명령 줄에서 파일을 읽는 방법은 다음과 같습니다.

자체 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] 명령 줄의 인수 수, 첫 번째 인수는 프로그램 이름입니다. 파일 이름을 나타내는 또 다른 주장이 필요합니다. 따라서 우리는 길이가 필요합니다 args 2 이상.

파일을 읽고 내용 인쇄.

이제 명령 줄 인수에서 얻은 파일 이름을 저장합시다.

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 파일에서 원시 콘텐츠를 읽습니다Markdown 파일에서 원시 콘텐츠를 읽습니다

이 출력은 Markdown 파일의 컨텐츠를 성공적으로 가져 와서 원시 데이터를 인쇄 할 수 있음을 보여줍니다. 다음 포스트에서는 구문 분석에 대해 배우기 시작할 것입니다.

완전한 소스 코드

use std::env;
use std::fs;

fn main() {
    let args: Vec = env::args().collect();

    if args.len() 

결론

이 게시물에서는 명령 줄과 상호 작용하는 방법을 이해하고 명령 줄 인수에서 Markdown 파일을 읽었습니다. 또한 기본 오류 처리를 사용하여 이해했습니다 Result 우리가 일이 잘못 될 수 있다는 것을 알고있는 곳에서 우리의 프로그램이 그것을 처리 할 수 있는지 확인했습니다.

이제 우리는 모든 Markdown 파일 컨텐츠를 읽고 인쇄하는 것을 이해합니다. 다음 게시물에서 우리는 천천히 구문 분석 알고리즘을 단계별로 구현하고 기본 텍스트, 헤더, 목록 및 기타 물건을 하나씩 커버 할 것입니다. 나는 다음 게시물에 정말로 흥분합니다. 나도 당신도 흥분되기를 바랍니다. 곧 봐요.

출처 참조

Post Comment

당신은 놓쳤을 수도 있습니다