use std::env; use std::fs::File; use std::io; use std::io::BufRead; mod counts; use counts::*; fn main() -> io::Result<()> { for filename in env::args().skip(1) { let mut f = File::open(&filename)?; let mut reader = io::BufReader::new(f); let counts = count_words(&mut reader)?; print(&counts, 10) } Ok(()) } fn count_words(reader: &mut io::BufReader) -> io::Result { let mut counts = WordCounts::new(); for line in reader.lines() { let line = line?; add_counts(&mut counts, &count_words_in_line(&line)); } Ok(counts) } fn count_words_in_line(line: &str) -> WordCounts { let mut counts = WordCounts::new(); let mut word = String::new(); for c in line.chars() { if c.is_alphabetic() { word.push(c); } else { if !word.is_empty() { count(&mut counts, word.clone()); word.clear(); } } } if !word.is_empty() { count(&mut counts, word.clone()); } counts }