第一次实现 _grrs_
在上一章命令行参数之后,我们有了输入数据,可以编写实际的工具了。我们的 "main" 函数现在只包括一下这行:
let args = Cli::from_args();
先从打开我们拿到的文件开始。
let content = std::fs::read_to_string(&args.path)
.expect("could not read file");
补充:
看到这个 expect 方法了么?这是个快捷的退出函数,当无法读取值(该情况下为输入文件)时,使得程序立即退出。它并非完美,在下一章 更好的错误报告 中,我们将探讨如何改善。
现在,让我们遍历行并打印包含模式的每一行:
for line in content.lines() {
if line.contains(&args.pattern) {
println!("{}", line);
}
}
尝试一下: cargo run -- main src/main.rs
现在应该能正常工作了。
读者练习:
这并非最佳实现:它会将整个文件读入内存——无论文件多大。试找到一种方法优化它!(一种思路是使用 BufReader
而非 read_to_string()
。)
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。