首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有人能告诉我一个迭代文件中所有IPv4地址的解决方案吗?

有人能告诉我一个迭代文件中所有IPv4地址的解决方案吗?
EN

Stack Overflow用户
提问于 2020-07-06 01:24:57
回答 1查看 170关注 0票数 0

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

我试了2-3个小时来实现这一点,但我仍然没有找到任何优雅的方法来做到这一点。显然我做错了。

有人能告诉我他们的解决方案吗?它将帮助我的大脑解锁,看到最有效/最优雅的方式。还是你建议我继续对这堆东西大打出手,直到我得到正确的答案?

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

我看到了Rust支持迭代器以及生成器/产量。如果可能的话,我希望找到解决办法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-06 07:27:27

为了简单起见,我避免了错误处理(使用unwrapexpect),因为它可能会损害可读性。对于这种任务,您不需要外部crates (例如regexes),因为一些解析已经在标准库中用FromStr实现了。对于按行读取BufRead特征的BufReader包装器,可能会做到这一点。并组成它成为(游乐场):

代码语言:javascript
复制
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随时可能改变),目前主要是由编译器在内部使用异步代码。迭代器可以更好地完成这一特定任务。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62748026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档