Rustlang語言逐行處理文件的基本方法

文件操做

需求:安全

將文件中的內容按行讀取出來,而後對改行的數據進行處理,最後將處理後的行數據存放到新的文件中。函數

使用RUST來處理的方法以下。spa

首先引入須要的標準庫:code

use std::io::prelude::*;

use std::fs::File;

use std::io::BufWriter;

use std::io::BufReader;

 

 

而後將處理函數放到一個main函數中,這是我處理小問題的習慣。blog

定義一個main函數,內存

fn man() {字符串

 

}編譯器

將咱們的實現代碼放到上述的花括號中,首先試一下讀取一個文件,代碼以下。it

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);

}

 

首先,經過標準庫的File open一個文件,而後經過unwrap()得到文件。打開一個文件以後,再定義一個BufReader,用於讀取文件的內容。讀取的東西放到一個Stringline,而後經過fin.read_line()函數讀取文件的一行。最後打印出來讀取的內容,看看是否讀取成功。內存管理

如今,咱們要讀取文件的整個行,代碼以下。

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);

 

    for line in fin.lines() {

        println!("{}", line.unwrap());

    }

}

  

這裏,爲了讀取全部的行,RUSTBufReader提供了一個lines()函數,返回Lines迭代器,使用for來取出全部的行。須要注意的就是line須要經過upwrap()來釋放出來,固然也能夠採用別的更加安全的方法。

如今須要的就是將處理過的行line,存儲到新的文件中,代碼以下。

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 + "\n").as_bytes()); 

    }

    fout.flush();

}

 

fn ope_line(line: &String) -> String {

    line.clone()

}

 

咱們使用BufWriterwrite_all()方法很方便的將處理後的行輸出了。

RUST有很強的內存管理,因此在處理數據的時候要當心,編譯器很找出全部的關於內存的錯誤。

注意,若是處理的字符串中有中文,並且使用write_fmt()函數寫文件的時候,格式化字符串時必定要用{},而不是{:?}

相關文章
相關標籤/搜索