Чтение строк из файла в Rust
Строки читают по одной, и у каждой строки свой исход. Файл открывают на чтение, оборачивают в буфер и берут итератор строк. Каждый шаг итератора - отдельный результат: удача несет строку без символа перевода, сбой сообщает о проблеме чтения.
Подготовим файл с двумя строками и пройдем по ним:
use std::fs::File;
use std::io::{self, BufRead, BufReader};
fn print_lines() -> io::Result<()> {
let file = File::open("note.txt")?;
let reader = BufReader::new(file);
for line in reader.lines() {
let text = line?;
println!("{}", text);
}
Ok(())
}
fn main() -> io::Result<()> {
std::fs::write("note.txt", "alpha\nbeta\n")?;
print_lines()?;
Ok(())
}
Разбор одной строки через match
выглядит так:
use std::fs::File;
use std::io::{self, BufRead, BufReader};
fn main() -> io::Result<()> {
let file = File::open("note.txt")?;
let reader = BufReader::new(file);
if let Some(first) = reader.lines().next() {
match first {
Ok(text) => println!("{}", text),
Err(err) => println!("{}", err),
}
}
Ok(())
}
Дан путь:
let path = "data/lines.txt";
Запишите три короткие строки, прочитайте их по одной и выведите каждую.
Дан путь:
let path = "note.txt";
Скажите, какой тип несет каждый элемент итератора строк.
Посчитайте строки в файле в цикле с знаком вопроса и выведите число.