谁能给我看一个解决方案来迭代在文件中找到的所有IPv4地址?



当我尝试一种我不熟悉的新语言时,我的问候世界是列出在混合文件(例如日志文件(中找到的所有IPv4。我认为这是一个很好的练习,因为它让我练习使用 IO、包、函数、正则表达式和迭代器。

我尝试了 2-3 个小时在 Rust 中完成此操作,但我仍然没有找到任何优雅的方法。我显然做错了。

任何人都可以向我展示他们实现这一目标的解决方案吗?它将通过看到最有效/优雅的方式来帮助我的大脑解锁。还是你建议我继续在堆上抨击,直到我做对为止?

将文件名传递给函数,该函数返回该文件中所有 IPv4 的迭代器。

我看到 Rust 支持迭代器以及生成器/收益。如果可能的话,我希望看到两者的解决方案。

为了简单起见,我避免了错误处理(使用unwrapexpect(,因为它可能会损害可读性。对于此类任务,您不需要外部 crate(例如正则表达式(,因为一些解析已经在标准库中实现了FromStr.对于每行读取,带有BufReader包装器的BufRead特征可能会做这件事。并组成它成为(游乐场(:

fn iterate_over_ips(filename: impl AsRef<Path>) -> impl Iterator<Item = Ipv4Addr> {
let file = File::open(filename).unwrap();
io::BufReader::new(file)
.lines()
.map(|line| line.expect("line read").parse().expect("ip invalid format"))
}

生成器是一个不稳定的功能(因此它的API可能随时更改(,目前主要由编译器内部用于异步代码。迭代器更适合此特定任务。

相关内容

  • 没有找到相关文章

最新更新