gpt4 book ai didi

rust - 如何结合逐行读取文件和遍历每一行中的每个字符?

转载 作者:行者123 更新时间:2023-11-29 07:47:25 24 4
gpt4 key购买 nike

我从这段代码开始,它只读取文件中的每一行,并且运行良好:

use std::io::{BufRead, BufReader};
use std::fs::File;

fn main() {
let file = File::open("chry.fa").expect("cannot open file");
let file = BufReader::new(file);
for line in file.lines() {
print!("{}", line.unwrap());
}
}

...但后来我也尝试遍历每一行中的每个字符,如下所示:

use std::io::{BufRead, BufReader};
use std::fs::File;

fn main() {
let file = File::open("chry.fa").expect("cannot open file");
let file = BufReader::new(file);
for line in file.lines() {
for c in line.chars() {
print!("{}", c.unwrap());
}
}
}

... 但事实证明,这个最内层的 for 循环是不正确的。我收到以下错误消息:

error[E0599]: no method named `chars` found for type `std::result::Result<std::string::String, std::io::Error>` in the current scope
--> src/main.rs:8:23
|
8 | for c in line.chars() {
| ^^^^^

最佳答案

您需要处理每个 IO 操作可能产生的潜在错误,由 io::Result 表示,它可以包含请求的数据或错误。有不同的方法来处理错误。

一种方法是忽略它们并读取我们可以获得的任何数据。

代码显示了如何做到这一点:

use std::io::{BufRead, BufReader};
use std::fs::File;

fn main() {
let file = File::open("chry.fa").expect("cannot open file");
let file = BufReader::new(file);
for line in file.lines().filter_map(|result| result.ok()) {
for c in line.chars() {
print!("{}", c);
}
}
}

关键点:file.lines() 是一个产生io::Result 的迭代器。在 filter_map 中,我们将 io::Result 转换为 Option 并过滤任何出现的 None。然后我们只剩下普通的线条(即字符串)。

关于rust - 如何结合逐行读取文件和遍历每一行中的每个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25167615/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com