일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 러스트 프로그래밍 공식 가이드
- 러스트 예제
- 러스트
- Database
- 데이터 통신
- 자바 기초
- 우분투
- 운영체제
- 데이터베이스
- java
- 자바
- ubuntu
- 자바 개념
- Operating System
- 파이썬 챌린지
- 알고리즘
- data communication
- 백준 러스트
- 오라클
- Python
- 파이썬
- 파이썬 첼린지
- Python challenge
- 오라클DB
- Reversing
- C
- 백준
- 파이썬 알고리즘
- OS
- Rust
Archives
- Today
- Total
IT’s Portfolio
[Rust] How to study Rust? - "Copycat" (3) 본문
728x90
반응형
각 줄에 대하여 심볼, 명령어, 피연산 등 세 파트를 분리한 후, 심볼 10칸, 명령어 10칸, 피연산자 10칸으로 줄을 맞추어 출력(빈 파트는 공백 출력)
입력 파일
소스 코드
use std::{fs, io::Read, error::Error, process};
fn read_file() -> Result<String, Box<dyn Error>> {
let mut f = fs::File::open("sample.txt")?;
let mut contents = String::new();
f.read_to_string(&mut contents)?;
Ok(contents)
}
fn split_contents<'a>(contents: &'a str) -> (Vec<&'a str>, Vec<&'a str>, Vec<&'a str>) {
let mut symbol = vec![];
let mut command = vec![];
let mut operand = vec![];
for line in contents.lines() {
let words = line.split("\t").collect::<Vec<&str>>();
if words.len() == 4 {
symbol.push(words[1]);
command.push(words[2]);
operand.push(words[3]);
}
}
(symbol, command, operand)
}
fn print(args: Vec<&str>) {
for i in 0..args.len() {
if i%10==9 {
println!("{:10}", args[i]);
} else {
print!("{:10} ", args[i]);
}
}
}
fn main() {
let contents = read_file().unwrap_or_else(
|err| {
eprintln!("Error!\n{}", err);
process::exit(1);
}
);
let (symbol, command, operand) = split_contents(&contents);
println!("Symbol:");
print(symbol);
println!("\nCommand:");
print(command);
println!("\nOperand:");
print(operand);
}
결과
Symbol:
COPY FIRST CLOOP ENDFIL
EOF THREE ZERO RETADR LENGTH
BUFFER RDREC RLOOP
EXIT INPUT MAXLEN WRREC WLOOP
OUTPUT
Command:
START STL JSUB LDA COMP JEQ JSUB J LDA STA
LDA STA JSUB LDA RSUB BYTE WORD WORD RESW RESW
RESB LDX LDA TD JEQ RD COMP JEQ STCH TIX
JLT STX RSUB BYTE WORD LDX TD JEQ LDCH WD
TIX JLT RSUB BYTE END
Operand:
1000 RETADR RDREC LENGTH ZERO ENDFIL WRREC CLOOP EOF BUFFER
THREE LENGTH WRREC RETADR C'EOF' 3 0 1 1
4096 ZERO ZERO INPUT TLOOP INPUT ZERO EXIT BUFFER,X MAXLEN
RLOOP LENGTH X'F1' 4096 ZERO OUTPUT WLOOP BUFFER,X OUTPUT
LENGTH WLOOP X'05' FIRST
출처
728x90
반응형
'Development Study > Rust' 카테고리의 다른 글
[Rust] How to study Rust? - "Copycat" (5) (0) | 2023.09.23 |
---|---|
[Rust] How to study Rust? - "Copycat" (4) (0) | 2023.09.23 |
[Rust] How to study Rust? - "Copycat" (2) (0) | 2023.08.28 |
[Rust] How to study Rust? - "Copycat" (1) (0) | 2023.08.25 |
[Rust] Start Rust (Day 21) - An I/O Project: Building a Command Line Program (1) | 2023.08.24 |