zoukankan      html  css  js  c++  java
  • Rustlang语言逐行处理文件的基本方法

    文件操作

    需求:

    将文件中的内容按行读取出来,然后对改行的数据进行处理,最后将处理后的行数据存放到新的文件中。

    使用RUST来处理的方法如下。

    首先引入需要的标准库:

    复制代码
    use std::io::prelude::*;
    
    use std::fs::File;
    
    use std::io::BufWriter;
    
    use std::io::BufReader;
    
     
    复制代码

     

    然后将处理函数放到一个main函数中,这是我处理小问题的习惯。

    定义一个main函数,

    fn man() {

     

    }

    将我们的实现代码放到上述的花括号中,首先试一下读取一个文件,代码如下。

    复制代码
    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()函数读取文件的一行。最后打印出来读取的内容,看看是否读取成功。

    现在,我们要读取文件的整个行,代码如下。

    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::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 + "
    ").as_bytes()); 
    
        }
    
        fout.flush();
    
    }
    
     
    
    fn ope_line(line: &String) -> String {
    
        line.clone()
    
    }
    复制代码

     

    我们使用BufWriterwrite_all()方法很方便的将处理后的行输出了。

    RUST有很强的内存管理,所以在处理数据的时候要小心,编译器很找出所有的关于内存的错误。

    注意,如果处理的字符串中有中文,而且使用write_fmt()函数写文件的时候,格式化字符串时一定要用{},而不是{:?}

  • 相关阅读:
    MarkDown语法
    AxureRP 序列号
    数据库选型相关
    linux 防火墙
    SpringMVC控制器方法参数传入的ModelMap 和Model类型有啥区别
    2017中国软件技术大会参会总结
    SpringMVC的Model ModeMap ModelAndView @ModelAttribute @SessionAttribute区分
    mybatis调用oracle存储过程 out游标类型参数 如何赋给java map
    mybatis 调用 oracle 存储过程 select into 无记录时NO_DATA_FOUND异常处理分析
    mybatis 调用oracle存储过程如何返回out参数值
  • 原文地址:https://www.cnblogs.com/zhangboyu/p/810a1a19f249a81bd2793f8e49503c8c.html
Copyright © 2011-2022 走看看