■ PathBuf 구조체의 from 연관 함수를 사용해 디렉토리 경로 문자열에서 PathBuf 객체를 구하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
use std::path; let path_buffer : path::PathBuf = path::PathBuf::from("d:/"); println!("{}", path_buffer.to_str().unwrap()); |
■ PathBuf 구조체를 사용해 파일을 재귀 검색하는 방법을 보여준다. ▶ 예제 코드 (RS)
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
use std::borrow; use std::env; use std::fs; use std::path; fn main() { let argument_vector : Vec<String> = env::args().collect(); if argument_vector.len() < 3 { println!("findfile (path) (keyword)"); return; } let source_directory_path : &String = &argument_vector[1]; let keyword : &String = &argument_vector[2]; let source_path_buffer : path::PathBuf = path::PathBuf::from(source_directory_path); find_file(&source_path_buffer, keyword); } fn find_file(parent_path_buffer : &path::PathBuf, keyword : &str) { let child_read_directory : fs::ReadDir = parent_path_buffer.read_dir().expect("부모 경로 버퍼의 디렉토리가 존재하지 않습니다."); for child_directory_entry_result in child_read_directory { let child_path_buffer = child_directory_entry_result.unwrap().path(); if child_path_buffer.is_dir() { find_file(&child_path_buffer, keyword); continue; } let child_file_cow : borrow::Cow<str> = child_path_buffer.file_name().unwrap().to_string_lossy(); if None == child_file_cow.find(keyword) { continue; } println!("{}", child_path_buffer.to_string_lossy()); } } |
■ Result 열거형의 unwrap_or 메소드를 사용하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
let string_value = "365a"; let parse_result : Result<_, _> = string_value.parse(); let integer_value : i32 = parse_result.unwrap_or(0); println!("{}", integer_value); |
■ File 구조체의 open 연관 함수를 사용해 파일을 여는 방법을 보여준다. ▶ 예제 코드 (RS)
|
use std::fs; let file_path : &str = "source.txt"; { let file : fs::File = fs::File::open(file_path).unwrap(); } |
■ File 구조체의 write_all 메소드를 사용해 파일에 문자열을 쓰는 방법을 보여준다. ▶ 예제 코드 (RS)
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 32 33 34 35 36 37 38 39 40 41 42 43 44
|
use std::fs::File; use std::io::Write; fn main() { let file_path : &str = "d:/result.txt"; let data : String = get_data(100); let mut file : File = File::create(file_path).unwrap(); let byte_array : &[u8] = data.as_bytes(); file.write_all(byte_array).unwrap(); } fn get_data(max : u32) -> String { let mut target : String = String::new(); for i in 1..=max { if (i % 3 == 0) && (i % 5 == 0) { target += "FizzBuzz\n"; } else if i % 3 == 0 { target += "Fizz\n"; } else if i % 5 == 0 { target += "Buzz\n"; } else { target += &format!("{}\n", i); } } return target; } |
■ String 구조체의 as_bytes 메소드를 사용해 이진 데이터를 구하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
let source: String = "안녕하세요?".to_string(); let byte_array : &[u8] = source.as_bytes(); println!("{:?}", byte_array); /* [236, 149, 136, 235, 133, 149, 237, 149, 152, 236, 132, 184, 236, 154, 148, 63] */ |
■ BufWriter<T> 구조체의 write 메소드를 사용해 파일에 문자열을 쓰는 방법을 보여준다. ▶ 예제 코드 (RS)
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 32 33 34 35 36 37 38 39 40 41
|
use std::fs::{self, File}; use std::io::{Write, BufWriter}; fn main() { let file_path : &str = "d:/target.txt"; { let file : File = File::create(file_path).unwrap(); let mut writer : BufWriter<File> = BufWriter::new(file); for i in 1..=100 { let mut line : String = format!("{}\n", i); if (i % 3 == 0) && (i % 5 == 0) { line = String::from("FizzBuzz\n"); } else if i % 3 == 0 { line = String::from("Fizz\n"); } else if i % 5 == 0 { line = String::from("Buzz\n"); } let byte_array: &[u8] = line.as_bytes(); writer.write(byte_array).unwrap(); } } let file_content : String = fs::read_to_string(file_path).unwrap(); println!("{}", file_content); } |
■ BufReader<T> 구조체의 lines 메소드를 사용해 순차적으로 파일의 행을 읽는 방법을 보여준다. ▶ 예제 코드 (RS)
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 32 33 34 35 36 37
|
use std::fs; use std::io; use std::io::BufRead; fn main() { let file_path : &str = "c:/dictionary.txt"; let argument_vector : Vec<String> = std::env::args().collect(); if argument_vector.len() < 2 { println!("[USAGE] ./dictionray word"); return; } let search_word : &String = &argument_vector[1]; let file : fs::File = fs::File::open(file_path).unwrap(); let reader : io::BufReader<fs::File> = io::BufReader::new(file); for line in reader.lines() { let line_string = line.unwrap(); if line_string.find(search_word) == None { continue; } println!("{}", line_string); } } |
■ String 구조체의 trim 메소드를 사용해 공백 문자열을 제거하는 방법을 보여준다. ▶ 예제 코드 (RS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
use std::fs; fn main() { let file_path1 : &str = "c:/data1.txt"; let file_path2 : &str = "c:/data2.txt"; let source_content1 : String = fs::read_to_string(file_path1).unwrap(); let source_content2 : String = fs::read_to_string(file_path2).unwrap(); let target_content1 : &str = source_content1.trim(); let target_content2 : &str = source_content2.trim(); if target_content1 == target_content2 { println!("ok"); } else { println!("ng"); } } |
■ String 구조체의 split 메소드를 사용해 문자열 나누는 방법을 보여준다. ▶ 예제 코드 (RS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
use std::str; fn main() { let text : String = "A\nB\nC".to_string(); let line_split : str::Split<char> = text.split('\n'); for line in line_split { println!("{}", line); } } /* A B C */ |
■ 텍스트 파일 내 숫자를 더하는 방법을 보여준다. ▶ 예제 코드 (RS)
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 32 33 34 35
|
use std::{env, fs, str}; fn main() { let args : env::Args = env::args(); let mut total_value : f64 = 0.0; for (index, file_path) in args.enumerate() { if index == 0 { continue; } let text : String = fs::read_to_string(file_path).unwrap(); let line_split : str::Split<char> = text.split('\n'); for line in line_split { let value : f64 = match line.parse() { Ok(v) => v, Err(_) => 0.0 }; total_value += value; } } println!("{}", total_value); } |
■ read_to_string 함수를 사용해 텍스트 파일을 읽는 방법을 보여준다. ▶ 예제 코드 (RS)
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
|
use std::env; use std::fs; fn main() { let args : env::Args = env::args(); let argument_vector : Vec<String> = args.collect(); if argument_vector.len() < 2 { println!("읽을 파일 경로를 지정해 주시기 바랍니다."); return; } let file_path : &str = &argument_vector[1]; let text : String = match fs::read_to_string(file_path) { Ok(value) => value, Err(e) => e.to_string() }; println!("{}", text); } |
■ read_to_string 함수를 사용해 텍스트 파일을 읽는 방법을 보여준다. ▶ 예제 코드 (RS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
use std::env; use std::fs; fn main() { let args : env::Args = env::args(); let argument_vector : Vec<String> = args.collect(); if argument_vector.len() < 2 { println!("읽을 파일 경로를 지정해 주시기 바랍니다."); return; } let file_path : &String = &argument_vector[1]; let text : String = fs::read_to_string(file_path).unwrap(); println!("{}", text); } |
■ HashMap 구조체의 get 메소드를 사용해 키 존재 여부를 구하는 방법을 보여준다. ▶ 예제 코드 (RS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
use std::collections::HashMap; fn main() { let mut hashmap = HashMap::new(); hashmap.insert("A", 30); hashmap.insert("B", 50); match hashmap.get("D") { Some(value) => println!("D={}", value), None => println!("D 키는 존재하지 않습니다.") } } |
■ Args 구조체의 collect 메소드를 사용해 인자 벡터를 구하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
let args : std::env::Args = std::env::args(); let argument_vector : Vec<String> = args.collect(); println!("{:?}", argument_vector); |
■ Args 구조체를 사용해 명령줄 인수를 출력하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
use std::env; fn main() { let args = env::args(); for argument in args { println!("{}", argument); } } |
■ Args 구조체의 enumerate 메소드를 사용해 명령줄 인수를 구하는 방법을 보여준다. ▶ 예제 코드 (RS)
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
|
fn main() { let args = std::env::args(); let mut total_value = 0.0; for (index, argument) in args.enumerate() { if index == 0 { continue; } let parse_value : f64 = match argument.parse() { Ok(value) => value, Err(_) => 0.0, }; total_value += parse_value; } println!("{}", total_value); } |
■ HashMap 구조체를 사용해 우리말 월 이름을 처리하는 방법을 보여준다. ▶ 예제 코드 (RS)
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
|
use std::collections::HashMap; fn main() { let month_array = ["해오름달", "시샘달", "꽃내음달", "잎새달", "푸른달", "누리달", "빗방울달", "타오름달", "거둠달", "온누리달", "눈마중달", "매듭달"]; let mut hashmap: HashMap<&str, usize> = HashMap::new(); for (index, value) in month_array.iter().enumerate() { hashmap.insert(value, index + 1); } println!("누리달 = {:>2}월", hashmap["누리달" ]); println!("온누리달 = {:>2}월", hashmap["온누리달"]); println!("매듭달 = {:>2}월", hashmap["매듭달" ]); } /* 누리달 = 6월 온누리달 = 10월 매듭달 = 12월 */ |
■ HashMap 구조체의 get 메소드를 사용해 키 존재 여부를 구하는 방법을 보여준다. ▶ 예제 코드 (RS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
use std::collections::HashMap; fn main() { let mut hashmap = HashMap::new(); hashmap.insert("A", 30); hashmap.insert("B", 50); if hashmap.get("D") == None { println!("D 키가 존재하지 않습니다.") } else { println!("D = {}", hashmap["D"]); } } |
■ HashMap 구조체를 사용하는 방법을 보여준다. ▶ 예제 코드 (RS)
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
|
use std::collections::HashMap; const VALUE_STRING: &str = "C,C,A,A,A,B,C,C,B,B,B,C,B,C,B,A,C,C,B,C,C,C"; fn main() { let mut hashmap : HashMap<&str, i32> = HashMap::new(); hashMap.insert("A", 0); hashMap.insert("B", 0); hashMap.insert("C", 0); for value in VALUE_STRING.split(',') { hashmap.insert(value, hashMap[value] + 1); } for key in ["A","B","C"] { println!("{} : {:>2}", key, hashmap[key]); } } /* A : 4 B : 7 C : 11 */ |
■ 부동 소수점 숫자 리터럴을 사용하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
let real_value1 = 10.5; // 부동 소수점 숫자 리터럴 let real_value2 = 10.5f32; // f32 타입 부동 소수점 let real_value2 = 10.5e+8; // 지수 형식으로 1050000000를 지정한다. |
■ as 키워드를 사용해 타입 변환으로 문자 리터럴에서 유니코드를 구하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
let unicode = '곰' as u32; println!("{:4x}", unicode); // acf0 |
■ 유니코드 리터럴에서 유니코드 문자 구하기 ▶ 예제 코드 (RS)
|
let character = '\u{acf0}'; println!("{}", character); // 곰 |
■ 16진수 ASCII 코드를 사용해 문자를 구하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
let character = '\x61'; println!("{}", character); // 문자 'a' |
■ 타입이 있는 숫자 리터럴을 지정하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
let a = 100u8; let b = 100i128; let c = 10_000; |