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)|代码组织与模块化] 实用知识 代码组织与模块化 我们知道,在现代软件开发的过程中,代码组织和模块化是应对复杂性的一种方式. 今天我们来 ...
随机推荐
- 【云图】如何制作全国KTV查询系统?
原文:[云图]如何制作全国KTV查询系统? 摘要:本文以[唱吧]531麦霸音乐节为案例,详细解读了如何导入自有数据到高德云图,并进行检索和展示.最后,调起高德mobile地图来进行路线规划和周边查询. ...
- shell的定义
shell一些符号区别对待不同的定义.主要的定义3途径: (1)单引號 (2)双引號 (3)反引號 我们最经常使用的就是双引號和单引號.对于这2个符号,用$变量能够非常清楚的说明它们的差别,例如以下: ...
- vector查找元素
转自:http://hi.baidu.com/chain2008/blog/item/821744585e12c5c89c8204e8.html 今天又忘了怎么在vector中查找某一个值..唉..每 ...
- Hadoop与HBase中遇到的问题(续)java.io.IOException: Non-increasing Bloom keys异常
在使用Bulkload向HBase导入数据中, 自己编写Map与使用KeyValueSortReducer生成HFile时, 出现了以下的异常: java.io.IOException: Non-in ...
- MongoDB集群
高可用的MongoDB集群 1.序言 MongoDB 是一个可扩展的高性能,开源,模式自由,面向文档的数据库. 它使用 C++编写.MongoDB 包含一下特点: l 面向集合的存储:适合存储 ...
- Web Service学习笔记:动态调用WebService
原文:Web Service学习笔记:动态调用WebService 多数时候我们通过 "添加 Web 引用..." 创建客户端代理类的方式调用WebService,但在某些情况下我 ...
- Postman (Chrome插件)
接口测试从未如此简单 - Postman (Chrome插件) Posted on 2015-01-16 15:50 WadeXu 阅读(468) 评论(7) 编辑 收藏 接口测试从未如此简单 - P ...
- PHP 18:data_valid_fns.php 看正则表达式
原文:PHP 18:data_valid_fns.php 看正则表达式 本章介绍正则表达式.先看看data_valid_fns.php的代码吧. 简要介绍一下.fill ...
- C# 根据年、月、周、星期获得日期等
原文:C# 根据年.月.周.星期获得日期等 /// 取得某月的第一天 /// </summary> /// <param name="datetime">要 ...
- IntelliJ IDEA 发布13版本——创造java奇迹
IntelliJ IDEA被公认为业界最好的Java开发平台.此次发布的了13版本,更是集合了与Java EE.Android.Spring.Scala和Gradle最新合作与支持. Java EE ...