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,用于读取文件的内容。读取的东西放到一个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语言逐行处理文件的基本方法的更多相关文章
- R语言读取EXCEL文件的各种方法
路径问题 原始文件路径C:\Users\air\Desktop\1.txt R中有两种方法读取该路径 C:\\Users\\air\\Desktop\\1.txt C:/Users/air/Deskt ...
- C语言处理CSV文件的方法(一)
什么是CSV文件 CSV是 Comma-separated values (逗号分隔值)的首字母缩写,它通常是以逗号且不仅限于逗号分隔各个值,我们都叫他CSV. 看下面的例子: China, Shan ...
- 关于swift语言中导入OC三方类找不到头文件的解决方法
首先我遇到的问题是这样的: 我之前封装的OC类,我导入现在的swift工程中,然后建立桥接文件,在Swift的控制器中可以找到这个OC写的东西. 但是问题来了,当你使用cocoapods导入的OC三方 ...
- python 逐行读取文件的三种方法
方法一: 复制代码代码如下: f = open("foo.txt") # 返回一个文件对象 line = f.readline() ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(25)|实战2:命令行工具minigrep(2)]
[易学易懂系列|rustlang语言|零基础|快速入门|(25)|实战2:命令行工具minigrep(2)] 项目实战 实战2:命令行工具minigrep 我们继续开发我们的minigrep. 我们现 ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(24)|实战2:命令行工具minigrep(1)]
[易学易懂系列|rustlang语言|零基础|快速入门|(24)|实战2:命令行工具minigrep(1)] 项目实战 实战2:命令行工具minigrep 有了昨天的基础,我们今天来开始另一个稍微有点 ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(22)|宏Macro]
[易学易懂系列|rustlang语言|零基础|快速入门|(22)|宏Macro] 实用知识 宏Macro 我们今天来讲讲Rust中强大的宏Macro. Rust的宏macro是实现元编程的强大工具. ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(20)|错误处理]
[易学易懂系列|rustlang语言|零基础|快速入门|(20)|错误处理] 实用知识 错误处理 我们今天来讲讲Rust中的错误处理. 很多语言都有自己的错误处理方式,比如,java是异常处理机制. ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(16)|代码组织与模块化]
[易学易懂系列|rustlang语言|零基础|快速入门|(16)|代码组织与模块化] 实用知识 代码组织与模块化 我们知道,在现代软件开发的过程中,代码组织和模块化是应对复杂性的一种方式. 今天我们来 ...
随机推荐
- 【Python】Python与文本处理langid工具包的文本语言检测和歧视
1.问题的叙述性说明 使用Python文本处理.文字有时被包括中国.英语.在日本和其他语言文字,进行处理.这个时候就须要判别当前文本是属于哪个语系的. Python中有个langid工具包提供了此功能 ...
- Quartz使用-入门使用(java定时任务实现)
注:这里使用的是Quartz1.6.5版本号(包:quartz-1.6.5.jar) //測试main函数 //QuartzTest.java package quartzPackage; impor ...
- android 如何加入第一3正方形lib图书馆kernel于
注意:只能lib图书馆kernel编译到位.例如下列: alps/kernel/ alps/mediatek/custom/common/kernel/ alps/mediatek/custom/$p ...
- Struts2和Struts1的主要区别(完整版)
Struts1和Struts2的区别和对比: Action 类: • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口,而struts2的Act ...
- DevExpress gridview下拉框的再次研究
原文:DevExpress gridview下拉框的再次研究 前几天写了一篇关于研究DevExpress gridview下拉框的随笔(DevExpress gridview下拉框repository ...
- How to: Installshield做安装包时如何添加文件
原文:How to: Installshield做安装包时如何添加文件 我一直以为这不是一个问题,可是没想到在几个群内,对于如何向安装包添加文件不解的大有人在,今日稍暇,整理成篇,以供参考 首先我想再 ...
- oracle获取字符串长度函数length()和hengthb()
原文:oracle获取字符串长度函数length()和hengthb() lengthb(string)计算string所占的字节长度:返回字符串的长度,单位是字节 length(string)计算s ...
- leetcode[68] Climbing Stairs
n个台阶,每次可以走一步或者两步,总共有多少种走法. 第一感觉想到的是递归,n为1的时候1种,2的时候2中.其他时候就是 fun(n) = fun(n-1) + fun(n-2);递归的代码很简单.如 ...
- 轨道sql谈话 dbms_monitor
经常会遇到一个会话存在sql性能问题,但找不到哪一个sql导致DB更高的性能问题,这是我们需要在此session通过监测dbms_monitor软件包来实现. 首先确定要监控的会话sid及serial ...
- mysql 安装后无法登陆mysql的 shell 那mysql>经验:ERROR 1045 (28000): Access denied for user 'root'@'localhost‘
[root@hzswtb2-mpc ~]# mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using pas ...