Leer la entrada estándar en Rust
Un filtro lee líneas de stdin, así que se compone con cualquier otra herramienta.
use std::io::{self, BufRead, Write};
fn main() -> io::Result<()> {
let stdin = io::stdin();
let stdout = io::stdout();
let mut out = stdout.lock();
let mut total = 0usize;
for line in stdin.lock().lines() {
let line = line?;
if line.trim().is_empty() {
continue;
}
total += line.split_whitespace().count();
writeln!(out, "{:>4} | {}", line.len(), line)?;
}
writeln!(out, "{total} words")?;
Ok(())
}
Cómo funciona
stdin().lock().lines()itera sin reasignar memoria.- Cada línea llega como un
Result, porque el IO puede fallar. - Escribir a stdout con un lock evita vaciar el buffer por línea.
Palabras clave y builtins usados aquí
OkResultcontinuefnforifinletmutselfuseusize
El intento, en números
- Líneas
- 20
- Caracteres a escribir
- 401
- Tokens
- 143
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 82 segundos.
Paso 1 de 1 en Entrada y salida; paso 6 de 12 en Herramientas CLI y clientes HTTP.