新手有关网站建设需要看哪些书,手机配件网站模板,qq电脑版官方网站,怎么做网络推广赚钱12.2.0. 写在正文之前
第12章要做一个实例的项目——一个命令行程序。这个程序是一个grep(Global Regular Expression Print)#xff0c;是一个全局正则搜索和输出的工具。它的功能是在指定的文件中搜索出指定的文字。
这个项目分为这么几步#xff1a;
接收命令行参数读…12.2.0. 写在正文之前
第12章要做一个实例的项目——一个命令行程序。这个程序是一个grep(Global Regular Expression Print)是一个全局正则搜索和输出的工具。它的功能是在指定的文件中搜索出指定的文字。
这个项目分为这么几步
接收命令行参数读取文件本文重构改进模块和错误处理使用TDD测试驱动开发开发库功能使用环境变量将错误信息写入标准错误而不是标准输出
喜欢的话别忘了点赞、收藏加关注哦加关注即可阅读全文对接下来的教程有兴趣的可以关注专栏。谢谢喵(ω)
12.2.2. 回顾
这是截止到上文所写出的所有代码
use std::env; fn main() { let args:VecString env::args().collect(); let query args[1]; let filename args[2];println!(search for {}, query); println!(In file {}, filename);
}代码到此解决了读取用户指令的部分接下来要根据用户的输入读取文件。
12.2.3. 读取文件
为了实现读取文件的操作需要引入std::fs这个模块可以处理与文件相关的事物:
use std::fs;接下来根据filename来读取文件:
let contents fs::read_to_string(filename);当然读取会可能发生错误所以它的返回值并不直接就是内容而是Result枚举针对这个枚举可以使用expect方法来解包expect方法的参数是如果发生错误时打印的错误信息expect方法在 9.2. Result枚举与可恢复的错误 Pt.1 中有详细介绍。
let contents fs::read_to_string(filename)
.expect(Somthing went wrong while reading the file);//这里换行只是为了这行不过长如果能成功读取就把读取到的内容打印出来
println!(With text:\n{}, contents);12.2.4. 代码测试
实现到这一步可以对代码进行一些测试了。
这是截止到目前所写出的所有代码
use std::env;
use std::fs; fn main() { let args:VecString env::args().collect(); let query args[1]; let filename args[2]; println!(search for {}, query); println!(In file {}, filename); let contents fs::read_to_string(filename) .expect(Somthing went wrong while reading the file);//这里换行只是为了这行不过长 println!(With text:\n{}, contents);
}首先在项目目录下创建一个.txt文本名字可以自己取我取的是poem.txt然后在里面随便放点文本内容我放的是
Im nobody! Who are you?
Are you nobody, too?
Then theres a pair of us - dont tell!
Theyd banish us, you know.How dreary to be somebody!
How public, like a frog
To tell your name the livelong day
To an admiring bog!然后输入命令
cargo run -- the poem.txt这里的--是代表后面所写的是参数是用来区分Cargo 命令的参数和传递给程序的参数的。它的作用是告诉 Cargo接下来的内容不是 Cargo 的选项或参数而是运行程序时需要传递给程序的参数。它并不会被读取和存储。the对应的就是要查找的内容会被存储在query中poem.txt就是文件名会被存储在filename中
输出
$ cargo run -- the poem.txtCompiling minigrep v0.1.0 (file:///projects/minigrep)Finished dev profile [unoptimized debuginfo] target(s) in 0.0sRunning target/debug/minigrep the poem.txt
Searching for the
In file poem.txt
With text:
Im nobody! Who are you?
Are you nobody, too?
Then theres a pair of us - dont tell!
Theyd banish us, you know.How dreary to be somebody!
How public, like a frog
To tell your name the livelong day
To an admiring bog!没有任何问题。