既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
我们需要实现的效果如下,在poem.txt
中写入文件内容,我们写入一首诗
中山孺子妾,特以色见珍。虽然不如延年妹,亦是当时绝世人。
桃李出深井,花艳惊上春。一贵复一贱,关天岂由身。
芙蓉老秋霜,团扇羞网尘。戚姬髡发入舂市,万古共悲辛。
运行以下命令
cargo run abc poem.txt
然后屏幕会输出在poem.txt
中写入的文件内容
中山孺子妾,特以色见珍。虽然不如延年妹,亦是当时绝世人。
桃李出深井,花艳惊上春。一贵复一贱,关天岂由身。
芙蓉老秋霜,团扇羞网尘。戚姬髡发入舂市,万古共悲辛。
这样就意味着我们取到了传递的命令行参数,并且通过io来读取到了文件的内容。
二、创建新项目
和以前一样,我们找个地方,打开 终端
运行以下新建项目的命令,
cargo new minigrep
然后使用vscode打开minigrep文件夹,里面就是cargo为我们创建好的基础项目。
三、读取参数值
Rust 标准库提供了一个函数std::env::args
,返回一个传递给程序的命令行参数的 迭代器
,迭代器
我们在后面会详细介绍,现在你只需记住两件事:
- 迭代器生成一系列的值
- 可以在迭代器上调用
collect
方法将其转换为一个集合
我们将传递给程序的命令行参数读取并收集到 vector
中,先导入标准库
use std::env;
然后在 main
中接收该参数,并且调用 collect
方法接收参数,并且存入变量 args
中
let args: Vec<String> = env::args().collect();
完整代码如下
use std::env;
fn main() {
let args: Vec<String> = env::args().collect();
println!("{:#?}", args);
}
接下来我们使用 cargo run
传入参数运行程序看看效果,
cargo run needle haystack
运行效果如下图所示,可以看到,接收到的参数一共有三个,
第一个参数是:二进制文件的名称,也是位置。后面的参数就是我们输入的参数,我们传入的参数一共有两个,但是这里给出了三个参数,这是没有问题的,传入的参数第一个是文件名,接下来才我们传入的参数
四、将参数保存至变量
由于我们将参数存入了 Vector
的变量 args
中,并且我们已知参数的数量和含义是什么,利用以前学过的知识,取到这两个参数
let query = &args[1];
let filename = &args[2];
完整代码
use std::env;
fn main() {
let args: Vec<String> = env::args().collect();
println!("{:#?}", args);
let query = &args[1];
let filename = &args[2];
println!("Searching for {}", query);
println!("In file {}", filename);
}
现在运行试试效果,如下图示
五、读取文件
1. 新建文本文件
在项目目录新建文本文件,如下图所示,实际情况任意,本次仅作为例子,
文件内容如下:
中山孺子妾,特以色见珍。虽然不如延年妹,亦是当时绝世人。
桃李出深井,花艳惊上春。一贵复一贱,关天岂由身。
芙蓉老秋霜,团扇羞网尘。戚姬髡发入舂市,万古共悲辛。
2. 导入文件操作函数
文件操作是在标准库中的std::fs
下提供的,使用之前我们需要将这些函数导入进来,代码如下:
use std::fs;
3. 读取文件内容
fs::read_to_string
是一个读取文件内容的函数,需要接收 filename
,返回 Result<String>
,其中包含文件内容。
在上一小节的代码基础之上,我们进行修改。上节代码
use std::env;
fn main() {
let args: Vec<String> = env::args().collect();
println!("{:#?}", args);
let query = &args[1];
let filename = &args[2];
println!("搜索 {}", query);
println!("在文件 {}", filename);
}
我们已经从命令行参数中读取到了 filename
,因此我们只需要将这个参数传递给 fs::read_to_string
就得以得到我们要的文件内容,拿到文件内容以后输出文件内容。
现在我们加入以下代码
let contents = fs::read\_to\_string(filename)
.expect("读取文件出错");
println!("读取到的文本为:\n{}", contents);
完整代码:
use std::env;
use std::fs;
![img](https://img-blog.csdnimg.cn/img_convert/79b3684621c6347fb2d0fd94995d3455.png)
![img](https://img-blog.csdnimg.cn/img_convert/8e525ca8c40a206e82f9abf4e115d9c3.png)
![img](https://img-blog.csdnimg.cn/img_convert/e95bb9dbc5fccce171acbd75515a0fac.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**
e-1715358995650)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**