일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- ubuntu
- 파이썬 알고리즘
- java
- 자바 기초
- 자바 개념
- C
- 자바
- 데이터베이스
- data communication
- Python challenge
- Reversing
- Database
- 러스트
- 파이썬 챌린지
- Python
- 파이썬
- OS
- 러스트 프로그래밍 공식 가이드
- 운영체제
- 러스트 예제
- Rust
- 백준
- 오라클DB
- 오라클
- 알고리즘
- 백준 러스트
- 파이썬 첼린지
- Operating System
- 우분투
- 데이터 통신
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 |
Comments