C++:
Lavorare con i CSV

Come fare:

Leggere un file CSV utilizzando la Standard Library di C++:

#include <fstream>
#include <iostream>
#include <sstream>
#include <vector>

int main() {
    std::ifstream file("data.csv");
    std::string line;
    
    while (std::getline(file, line)) {
        std::stringstream lineStream(line);
        std::string cell;
        std::vector<std::string> parsedRow;
        
        while (std::getline(lineStream, cell, ',')) {
            parsedRow.push_back(cell);
        }
        
        // Elabora parsedRow qui
        for (const auto& val : parsedRow) {
            std::cout << val << "\t";
        }
        std::cout << std::endl;
    }
    
    return 0;
}

Scrivere in un file CSV:

#include <fstream>
#include <vector>

int main() {
    std::ofstream file("output.csv");
    std::vector<std::vector<std::string>> dati = {
        {"Nome", "Età", "Città"},
        {"John Doe", "29", "New York"},
        {"Jane Smith", "34", "Los Angeles"}
    };
    
    for (const auto& riga : dati) {
        for (size_t i = 0; i < riga.size(); i++) {
            file << riga[i];
            if (i < riga.size() - 1) file << ",";
        }
        file << "\n";
    }
    
    return 0;
}

Utilizzare una libreria di terze parti: csv2:

Sebbene la Standard Library di C++ fornisca gli strumenti di base per lavorare con file e stringhe, sfruttare le librerie di terze parti può semplificare l’elaborazione dei CSV. Una di queste librerie è csv2, conosciuta per la sua facilità d’uso e efficienza.

  • Installazione: Tipicamente installata tramite gestori di pacchetti come Conan o direttamente dal suo repository GitHub.

Esempio di utilizzo di csv2 per leggere un file CSV:

#include <csv2/reader.hpp>
#include <iostream>

int main() {
    csv2::Reader<csv2::delimiter<','>, csv2::quote_character<'"'>, csv2::first_row_is_header<true>> csv;
    if (csv.mmap("data.csv")) {
        const auto intestazione = csv.header();
        for (const auto riga : csv) {
            for (const auto cella : riga) {
                std::cout << cella.second << "\t"; // Stampa il valore di ogni cella
            }
            std::cout << std::endl;
        }
    }
    return 0;
}

L’output di esempio per le operazioni di lettura potrebbe apparire così (assumendo un semplice file CSV a tre colonne):

John    29    New York    
Jane    34    Los Angeles

Questi esempi mirano a coprire le operazioni fondamentali sui CSV in C++. Per scenari più complessi, come il trattamento di file di grandi dimensioni o trasformazioni complesse dei dati, potrebbe essere opportuna un’ulteriore esplorazione di librerie specializzate o strumenti.