Rust:
Travailler avec CSV

Comment faire :

Rust, avec son accent sur la sécurité et la performance, offre d’excellentes crates (bibliothèques) pour manipuler des fichiers CSV, csv étant la plus populaire. Vous aurez également besoin de serde pour la sérialisation et la désérialisation des données.

D’abord, ajoutez les dépendances à votre Cargo.toml :

[dependencies]
csv = "1.1"
serde = { version = "1.0", features = ["derive"] }

Lire un CSV

Pour lire un fichier CSV, définissez une struct qui représente vos données et dérivez Deserialize de serde :

use serde::Deserialize;
use std::error::Error;
use std::fs::File;
use std::io;
use std::process;

#[derive(Debug, Deserialize)]
struct Record {
    city: String,
    state: String,
    population: u64,
}

fn read_from_csv(file_path: &str) -> Result<(), Box<dyn Error>> {
    let file = File::open(file_path)?;
    let mut rdr = csv::Reader::from_reader(file);

    for result in rdr.deserialize() {
        let record: Record = result?;
        println!("{:?}", record);
    }
    Ok(())
}

fn main() {
    if let Err(err) = read_from_csv("cities.csv") {
        println!("erreur lors de l'exécution de l'exemple : {}", err);
        process::exit(1);
    }
}

Un exemple de sortie pour un CSV avec des informations sur les villes pourrait ressembler à :

Record { city: "Seattle", state: "WA", population: 744955 }
Record { city: "New York", state: "NY", population: 8336817 }

Écrire dans un CSV

Pour écrire dans un fichier CSV, définissez une struct et dérivez Serialize :

use serde::Serialize;
use std::error::Error;
use std::fs::File;

#[derive(Serialize)]
struct Record {
    city: String,
    state: String,
    population: u64,
}

fn write_to_csv(file_path: &str, records: Vec<Record>) -> Result<(), Box<dyn Error>> {
    let file = File::create(file_path)?;
    let mut wtr = csv::Writer::from_writer(file);

    for record in records {
        wtr.serialize(&record)?;
    }
    wtr.flush()?;
    Ok(())
}

fn main() -> Result<(), Box<dyn Error>> {
    let records = vec![
        Record {
            city: "Los Angeles".into(),
            state: "CA".into(),
            population: 3979563,
        },
        Record {
            city: "Chicago".into(),
            state: "IL".into(),
            population: 2695598,
        },
    ];

    write_to_csv("output.csv", records)?;

    Ok(())
}

Cela créera output.csv avec les données :

city,state,population
Los Angeles,CA,3979563
Chicago,IL,2695598

En exploitant le système de types puissant de Rust et les crates robustes de l’écosystème, travailler avec des données CSV devient à la fois efficace et simple, garantissant sécurité et performance dans vos tâches de traitement de données.