Rustlang语言逐行处理文件的基本方法
文件操作
需求:
將文件中的內(nèi)容按行讀取出來,然后對改行的數(shù)據(jù)進行處理,最后將處理后的行數(shù)據(jù)存放到新的文件中。
使用RUST來處理的方法如下。
首先引入需要的標準庫:
use std::io::prelude::*; use std::fs::File; use std::io::BufWriter; use std::io::BufReader;
然后將處理函數(shù)放到一個main函數(shù)中,這是我處理小問題的習慣。
定義一個main函數(shù),
fnman(){
}
將我們的實現(xiàn)代碼放到上述的花括號中,首先試一下讀取一個文件,代碼如下。
use std::io::prelude::*;
use std::fs::File;
use std::io::BufWriter;
use std::io::BufReader;
fn main() {
let file = File::open("./data.dat").unwrap();
let mut fin = BufReader::new(file);
let mut line = String::new();
fin.read_line(&mut line).unwrap();
println!("{}", line);
}
首先,通過標準庫的Fileopen一個文件,然后通過unwrap()獲得文件。打開一個文件之后,再定義一個BufReader,用于讀取文件的內(nèi)容。讀取的東西放到一個String中l(wèi)ine,然后通過fin.read_line()函數(shù)讀取文件的一行。最后打印出來讀取的內(nèi)容,看看是否讀取成功。
現(xiàn)在,我們要讀取文件的整個行,代碼如下。
| 12345678910111213141516171819202122232425 | use std::io::prelude::*;use std::fs::File;use std::io::BufWriter;use std::io::BufReader;fn main() {letfile = File::open("./data.dat").unwrap();letmut fin = BufReader::new(file);forlineinfin.lines() {println!("{}", line.unwrap());}} |
這里,為了讀取所有的行,RUST的BufReader提供了一個lines()函數(shù),返回Lines迭代器,使用for來取出所有的行。需要注意的就是line需要通過upwrap()來釋放出來,當然也可以采用別的更加安全的方法。
現(xiàn)在需要的就是將處理過的行l(wèi)ine,存儲到新的文件中,代碼如下。
use std::io::prelude::*;
use std::fs::File;
use std::io::BufWriter;
use std::io::BufReader;
fn main() {
let file = File::open("./data.dat").unwrap();
let mut fin = BufReader::new(file);
let file_new = File::create("./data_new.dat").unwrap();
let mut fout = BufWriter::new(file_new);
for line in fin.lines() {
let new_line = ope_line(&line.unwrap());
fout.write_all((new_line + "
").as_bytes());
}
fout.flush();
}
fn ope_line(line: &String) -> String {
line.clone()
}
我們使用BufWriter的write_all()方法很方便的將處理后的行輸出了。
RUST有很強的內(nèi)存管理,所以在處理數(shù)據(jù)的時候要小心,編譯器很找出所有的關(guān)于內(nèi)存的錯誤。
注意,如果處理的字符串中有中文,而且使用write_fmt()函數(shù)寫文件的時候,格式化字符串時一定要用{},而不是{:?}。
總結(jié)
以上是生活随笔為你收集整理的Rustlang语言逐行处理文件的基本方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 欢乐斗地主APP怎么改名字(欢乐祥和满神
- 下一篇: 梦幻花园怎么找回原来的账号