Rust:
Lavorare con i CSV

Come fare:

Rust, con il suo focus sulla sicurezza e le prestazioni, offre eccellenti crate (librerie) per gestire i file CSV, essendo csv il più popolare. Avrai bisogno anche di serde per la serializzazione e deserializzazione dei dati.

Prima, aggiungi le dipendenze al tuo Cargo.toml:

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

Leggere CSV

Per leggere un file CSV, definisci una struct che rappresenti i tuoi dati e deriva Deserialize da serde:

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

#[derive(Debug, Deserialize)]
struct Record {
    città: String,
    stato: String,
    popolazione: u64,
}

fn leggi_da_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) = leggi_da_csv("città.csv") {
        println!("errore nell'esecuzione dell'esempio: {}", err);
        process::exit(1);
    }
}

Un esempio di output per un CSV con informazioni sulle città potrebbe essere:

Record { città: "Seattle", stato: "WA", popolazione: 744955 }
Record { città: "New York", stato: "NY", popolazione: 8336817 }

Scrivere su CSV

Per scrivere su un file CSV, definisci una struct e deriva Serialize:

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

#[derive(Serialize)]
struct Record {
    città: String,
    stato: String,
    popolazione: u64,
}

fn scrivi_su_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 {
            città: "Los Angeles".into(),
            stato: "CA".into(),
            popolazione: 3979563,
        },
        Record {
            città: "Chicago".into(),
            stato: "IL".into(),
            popolazione: 2695598,
        },
    ];

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

    Ok(())
}

Ciò creerà output.csv con i dati:

città,stato,popolazione
Los Angeles,CA,3979563
Chicago,IL,2695598

Sfruttando il potente sistema di tipi di Rust e le robuste crate dell’ecosistema, lavorare con dati CSV diventa sia efficiente che semplice, garantendo sicurezza e prestazioni nelle tue attività di elaborazione dei dati.