我正在尝试学习 NOM,但我也是 Rust 的新手。
我有一个文本文件,每行都有单词。我想将其拆分为 2 个文件:有效的 ASCII(没有控制代码)和其他所有文件。
extern crate nom;
use std::fs::File;
use std::io::{prelude::*, BufReader};
fn main() -> std::io::Result<()> {
let file = File::open("/words.txt")?;
let reader = BufReader::new(file);
for line in reader.lines().filter_map(|result| result.ok()) {
parse(line);
}
Ok(())
}
fn parse(line: String) {
for c in line.chars() {
if c.is_ascii_control() | !c.is_ascii() {
println!("C> {}", line);
return;
}
}
if line.len() > 0 {
println!("A{}> {}", line.len(), line);
}
}
但是输入文件对于内存处理来说太大了,我应该使用 Streaming 功能,就像这样。
如何修改此代码以将流缓冲区与有限容量(1000 个字符)和line_ending检查结合起来?