Ce face str::lines
lines() returnează un iterator cu fiecare linie a textului, ca &str. Liniile se separă la \n; un \r aflat chiar înainte (stilul Windows \r\n) este scos și el. Un \n la finalul textului nu produce o linie goală în plus.
Este modul obișnuit de a prelucra conținutul unui fișier citit cu fs::read_to_string. Liniile goale din mijlocul textului apar ca ""; dacă vrei să le sari, adaugă .filter(|l| !l.trim().is_empty()).
Ce returnează
Un iterator de &str, câte unul pentru fiecare linie.
Exemple
Exemplul 1: Linii Unix și Windows
fn main() {
let text = "Ana\nRadu\r\nIoana\n";
for (i, linie) in text.lines().enumerate() {
println!("{}: {:?}", i + 1, linie);
}
println!("total: {}", text.lines().count());
}
Rezultat
1: "Ana"
2: "Radu"
3: "Ioana"
total: 3
Exemplul 2: Prelucrarea unui fișier CSV simplu
fn main() {
let csv = "nume,oras,nota
Ana,Iași,10
Mihai,Cluj,8
Elena,Brașov,9
";
let mut suma = 0;
let mut elevi = 0;
for linie in csv.lines().skip(1).filter(|l| !l.is_empty()) {
let campuri: Vec<&str> = linie.split(',').collect();
let nota: u32 = campuri[2].parse().unwrap();
println!("{} din {}: {}", campuri[0], campuri[1], nota);
suma += nota;
elevi += 1;
}
println!("media: {:.2}", suma as f64 / elevi as f64);
}
Rezultat
Ana din Iași: 10
Mihai din Cluj: 8
Elena din Brașov: 9
media: 9.00
Greșeli frecvente
- Folosești
split('\n')pe un fișier din Windows: fiecare linie se termină cu\r.lines()îl scoate automat. - Te aștepți ca
lines()să scoată și spațiile de la capete. Nu le scoate; adaugătrim().
Comenzi înrudite
str::split: Împarte textul în bucăți la fiecare apariție a unui separator; rsplit dă bucățile de la coadă spre început.str::trim: Elimină spațiile albe de la ambele capete (trim), doar de la început (trim_start) sau doar de la final (trim_end).str::split_whitespace: Împarte textul în cuvinte, la orice spațiu alb (spații, tab, linie nouă), fără bucăți goale.str::parse: Transformă textul într-o altă valoare (număr, bool, char, IP, tip propriu) și returnează Result.