当前位置: 首页 > news >正文

Rust: Reading and Writing Files

Reading and Writing Files

We need some way to actually get data from the filesystem so we can process it, and write it back when we’re done
我们需要某种方法从文件系统中实际获取数据,以便处理它,并在完成后将其写回来

use std::fs;

std::fs::read_to_string returns a Result<String, std::io::Error>.
If the function succeeds, it produces a String. If it fails, it produces a std::io::Error, the standard library’s type for representing I/O problems.
std::fs::read_to_string返回Result<String, std::io::Error>。
如果函数成功,它将生成一个String。如果失败,它会产生std::io::Error,这是表示I/O问题的标准库类型。

fn main() {let args = parse_args();let data = match fs::read_to_string(&args.filename) { Ok(v) => v,Err(e) => {eprintln!("{} failed to read from file '{}': {:?}","Error:".red().bold(), args.filename, e);std::process::exit(1);} };match fs::write(&args.output, &data) { Ok(_) => {},Err(e) => {eprintln!("{} failed to write to file '{}': {:?}","Error:".red().bold(), args.filename, e);std::process::exit(1);} };
}

Find and Replace

The final touch for this program is to implement its actual functionality: finding and replacing. For this, we’ll use the regex crate, which compiles and executes regular expressions. It provides a struct called Regex, which represents a compiled regular expression. Regex has a method replace_all, which does exactly what it says: it searches a string for all matches of the regular expression and replaces each one with a given replacement string. We can pull this logic out into a function:

这个程序的最后一步是实现它的实际功能:查找和替换。为此,我们将使用regex crate,它编译并执行正则表达式。它提供了一个名为Regex的结构体,它表示编译后的正则表达式。Regex有一个方法replace_all,它所做的正是它所说的:它在字符串中搜索正则表达式的所有匹配项,并用给定的替换字符串替换每个匹配项。我们可以把这个逻辑放到一个函数中:

use regex::Regex;
fn replace(target: &str, replacement: &str, text: &str)-> Result<String, regex::Error>{let regex = Regex::new(target)?;Ok(regex.replace_all(text, replacement).to_string())}
fn main() {let args = parse_args();let data = match fs::read_to_string(&args.filename) { Ok(v) => v,Err(e) => {eprintln!("{} failed to read from file '{}': {:?}","Error:".red().bold(), args.filename, e);std::process::exit(1);} };let replaced_data = match replace(&args.target, &args.replacement, &data) {Ok(v) => v,Err(e) => {eprintln!("{} failed to replace text: {:?}","Error:".red().bold(), e);std::process::exit(1);}};match fs::write(&args.output, &replaced_data) { Ok(v) => v,Err(e) => {eprintln!("{} failed to write to file '{}': {:?}","Error:".red().bold(), args.filename, e);std::process::exit(1);} };
}
$ echo "Hello, world" > test.txt
$ cargo run "world" "Rust" test.txt test-modified.txt
$ cat test-modified.txt 
Hello, Rust

http://www.mrgr.cn/news/12523.html

相关文章:

  • Akka-路由策略
  • 求解器的学习记录
  • vue调用booststrap弹窗
  • Apache RocketMQ 批处理模型演进之路
  • Jackson 忽略注解 @JsonIgnore 不生效
  • ssrf,csrf漏洞复现
  • 蓝牙资讯|2024Q2全球个人智能音频市场出货量1.1亿部
  • 集合及数据结构第十节(下)————常用接口介绍、堆的应用和java对象的比较
  • 【Linux入门】shell基础篇——while循环与until循环
  • 简易的 Websocket + 心跳机制 + 尝试重连
  • 全国首个高速公路5G-A通感一体基站在宁开通测试
  • Mysql的命令大全
  • 【附源码】Python :三棱柱建模
  • JVM经典的垃圾收集器
  • 自动化编译项目:使用 Bash 脚本与 CMake
  • 游戏开发中的打砖块反弹(godot)
  • 自动化刷题小练习
  • pytorch Dataset类代码学习
  • 牛客小白月赛99部分题解
  • 分布式系统