文件操作

需求:

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

使用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,用于读取文件的内容。读取的东西放到一个String中line,然后通过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());

    }

}

  

这里,为了读取所有的行,RUST的BufReader提供了一个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()

}

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

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

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

Rustlang语言逐行处理文件的基本方法的更多相关文章

  1. R语言读取EXCEL文件的各种方法

    路径问题 原始文件路径C:\Users\air\Desktop\1.txt R中有两种方法读取该路径 C:\\Users\\air\\Desktop\\1.txt C:/Users/air/Deskt ...

  2. C语言处理CSV文件的方法(一)

    什么是CSV文件 CSV是 Comma-separated values (逗号分隔值)的首字母缩写,它通常是以逗号且不仅限于逗号分隔各个值,我们都叫他CSV. 看下面的例子: China, Shan ...

  3. 关于swift语言中导入OC三方类找不到头文件的解决方法

    首先我遇到的问题是这样的: 我之前封装的OC类,我导入现在的swift工程中,然后建立桥接文件,在Swift的控制器中可以找到这个OC写的东西. 但是问题来了,当你使用cocoapods导入的OC三方 ...

  4. python 逐行读取文件的三种方法

    方法一: 复制代码代码如下: f = open("foo.txt")             # 返回一个文件对象  line = f.readline()             ...

  5. [易学易懂系列|rustlang语言|零基础|快速入门|(25)|实战2:命令行工具minigrep(2)]

    [易学易懂系列|rustlang语言|零基础|快速入门|(25)|实战2:命令行工具minigrep(2)] 项目实战 实战2:命令行工具minigrep 我们继续开发我们的minigrep. 我们现 ...

  6. [易学易懂系列|rustlang语言|零基础|快速入门|(24)|实战2:命令行工具minigrep(1)]

    [易学易懂系列|rustlang语言|零基础|快速入门|(24)|实战2:命令行工具minigrep(1)] 项目实战 实战2:命令行工具minigrep 有了昨天的基础,我们今天来开始另一个稍微有点 ...

  7. [易学易懂系列|rustlang语言|零基础|快速入门|(22)|宏Macro]

    [易学易懂系列|rustlang语言|零基础|快速入门|(22)|宏Macro] 实用知识 宏Macro 我们今天来讲讲Rust中强大的宏Macro. Rust的宏macro是实现元编程的强大工具. ...

  8. [易学易懂系列|rustlang语言|零基础|快速入门|(20)|错误处理]

    [易学易懂系列|rustlang语言|零基础|快速入门|(20)|错误处理] 实用知识 错误处理 我们今天来讲讲Rust中的错误处理. 很多语言都有自己的错误处理方式,比如,java是异常处理机制. ...

  9. [易学易懂系列|rustlang语言|零基础|快速入门|(16)|代码组织与模块化]

    [易学易懂系列|rustlang语言|零基础|快速入门|(16)|代码组织与模块化] 实用知识 代码组织与模块化 我们知道,在现代软件开发的过程中,代码组织和模块化是应对复杂性的一种方式. 今天我们来 ...

随机推荐

  1. HDU 4873 ZCC Loves Intersection(可能性)

    HDU 4873 ZCC Loves Intersection pid=4873" target="_blank" style="">题目链接 ...

  2. 用DIV+css写Table

    做出的效果样式如下图, 1,首先考虑的是如何显示border,就像是分割代码,我把border分割为最外层DIV全border,和内层DIV的right和bottom的border,就是右边和下边. ...

  3. 在WAMPSERVER下增加多版本的PHP(PHP5.3,PHP5.4,PHP5.5)支持。

    原文:在WAMPSERVER下增加多版本的PHP(PHP5.3,PHP5.4,PHP5.5)支持. WAMPServer可以让开发者在Windows系统下快速搭建WAMP环境,它支持多版本的Apach ...

  4. Cassandra C++/NodeJs开发环境

    工作的需要,开始更多地倾向于去中心化的结构,目前看来Cassandra算是去中心化DB中性能/管理最热门的选择,崇尚其P2P的理念. 自身原因对JAVA不擅长(周围写C的好少),还是更热衷于C++/J ...

  5. 创建GitHub技术博客

    创建GitHub技术博客全攻略 githubio技术博客网站生成 说明: 首先,你需要注册一个 github 账号,最好取一个有意义的名字,比如姓名全拼,昵称全拼,如果被占用,可以加上有意义的数字.本 ...

  6. CSS3字体模块

    介绍 字体提供了包含字符的视觉表现的资源.在最简单的等级中,其包含由字符编码到表示这些字符的形状(被称为字形)的映射信息.根据一组标准字体属性被分入一个字体家族的字体共享一个通用设计风格.在一个家族中 ...

  7. C#框架

    从零开始编写自己的C#框架(1)——前言   记得十五年前自学编程时,拿着C语言厚厚的书,想要上机都不知道要用什么编译器来执行书中的例子.十二年前在大学自学ASP时,由于身边没有一位同学和朋友学习这种 ...

  8. loadrunner常用函数总结

    事务函数:lr_end_sub_transaction 标记子事务的结束以便进行性能分析lr_end_transaction 标记 LoadRunner 事务的结束lr_end_transaction ...

  9. VC++.Net CAD编程架构

    1.每个对应的菜单项的图形抽象的, 图形抽象基类, 取决于改变来自子(如矩形.椭圆形) 2.在Doc对象管理列表管理,图形对象,当图形需要重绘或序列存储,通过遍历该列表的对象可以是 3. 每个类的职责 ...

  10. PHP系列目录

    原文:PHP系列目录 PHP系列的对象是已经熟悉了一门或多门语言的开发人员.如果你是其中一份子,而且你也打算学习PHP,相信你根据本系列会很快掌握PHP的.欢迎大家给出意见或建议.同时也欢迎大家的批评 ...