Teil 21: Dateien und CSV
Lernziel: Messwerte dauerhaft speichern.
Voraussetzungen: Die vorherigen Lektionen, insbesondere Teil 20.
Worum geht es?
Über std::fs und std::io lassen sich einfache Textdateien lesen und schreiben. Für den Einstieg genügt ein CSV-Format mit festen Spalten.
Schritt für Schritt
use std::fs;
use std::io;
fn main() -> io::Result<()> {
let daten = "nummer;temperatur
1;205.0
2;210.5
3;208.0
";
fs::write("messwerte.csv", daten)?;
let inhalt = fs::read_to_string("messwerte.csv")?;
println!("{inhalt}");
Ok(())
}
Die Datei entsteht im aktuellen Arbeitsverzeichnis, beim üblichen cargo run also im Projektordner.
Einfaches Einlesen
let inhalt = std::fs::read_to_string("messwerte.csv")?;
for zeile in inhalt.lines().skip(1) {
let spalten: Vec<&str> = zeile.split(';').collect();
if spalten.len() == 2 {
println!("Messung {}: {} °C", spalten[0], spalten[1]);
}
}
Dies ist ein didaktisch einfacher Parser. Er behandelt keine Anführungszeichen, Trennzeichen innerhalb von Feldern oder komplexe CSV-Sonderfälle. Für reale CSV-Dateien verwende später die csv-Crate.
Selbst ausprobieren
Speichere fünf Messwerte im Format nummer;temperatur und lies die Datei anschließend wieder ein.
Musterlösung anzeigen
use std::{fs, io};
fn main() -> io::Result<()> {
let werte = [200.0, 202.5, 205.0, 207.0, 210.0];
let mut csv = String::from("nummer;temperatur
");
for (i, t) in werte.iter().enumerate() {
csv.push_str(&format!("{};{t}
", i + 1));
}
fs::write("messwerte.csv", csv)?;
println!("{}", fs::read_to_string("messwerte.csv")?);
Ok(())
}
Das solltest du mitnehmen
- Messwerte dauerhaft speichern.
- Nutze
cargo runfür das Ausführen undcargo checkfür eine schnelle Fehlerprüfung (ab Teil 4). - Experimentiere mit veränderten Werten und beobachte die Compilermeldungen.
