Подсчет символов, слов и строк в файлах (wc в ржавчине)

Я написал баребонную версию wc в мире. wc это программа, которая подсчитывает количество символов, слов и строк в файле и выводит эти значения в командную строку. Вот пример вывода:

   9   25  246 Cargo.toml
  52  163 1284 src/main.rs
  61  188 1530 total

В моей версии в настоящее время отсутствует правильное выравнивание вывода, и она не выводит итоговые данные (в ней также отсутствуют параметры командной строки, и она запускается при загрузке каталога). Но я хотел бы получить обратную связь, прежде чем идти дальше.

use std::env;
use std::fs::read_to_string;

struct InputFile {
    words: u32,
    lines: u32,
    characters: u32,
    name: String,
}

impl InputFile {
    fn new(name: &String) -> Self {
        let content = read_to_string(name).unwrap();
        let (mut characters, mut words, mut lines) = (0, 0, 0);
        let mut spaced: bool = false;
        for c in content.chars() {
            if c as u8 != 0 {
                characters += 1;
            }
            if c != ' ' && c != 'n' {
                spaced = false
            }
            if c == 'n' {
                lines += 1;
                if !spaced {
                    words += 1;
                    spaced = true;
                }
            }
            if c == ' ' && !spaced {
                words += 1;
                spaced = true;
            }
        }
        Self { lines, words, characters, name: name.to_string() }
    }
}

impl std::fmt::Display for InputFile {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        write!(f, "{} {} {} {}",
            self.lines, self.words, self.characters, self.name
        )
    }
}

fn main() {
    let files: Vec<String> = env::args().collect();
    for f in &files[1..] {
        println!("{}", InputFile::new(f));
    }
}

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *