Travailler avec CSV en C++ : bibliothèques et exemples de code

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Travailler avec CSV en C++ : aperçu des bibliothèques et exemples pratiques



CSV (Comma-Separated Values) est l'un des formats les plus populaires pour stocker des données tabulaires. En C++, il n'y a pas de support intégré pour CSV, mais il existe de nombreuses bibliothèques et approches pour lire, écrire et traiter ces fichiers. Dans cet article, nous examinerons les principales méthodes pour travailler avec CSV en C++, y compris les bibliothèques populaires libcsv et rapidcsv, ainsi que l'implémentation d'un analyseur à l'aide d'outils standard.



Pourquoi CSV est-il important pour C++ ?

CSV est utilisé pour l'échange de données entre systèmes, l'exportation depuis des bases de données, l'apprentissage automatique et les calculs scientifiques. En C++, le travail avec CSV est souvent nécessaire dans les applications de traitement de logs, de configurations ou d'importation de données depuis Excel. Le choix de la bonne bibliothèque accélère le développement et améliore la fiabilité du code.



Bibliothèque libcsv

libcsv est une bibliothèque légère en C qui convient parfaitement aux projets C++. Elle prend en charge l'analyse de CSV avec des séparateurs personnalisables, l'échappement de caractères et la gestion des erreurs.

  • Prise en charge de différents séparateurs (virgule, point-virgule, tabulation).
  • Gestion des chaînes échappées et des guillemets.
  • Consommation mémoire minimale.

Exemple de lecture de CSV avec libcsv :

#include <csv.h>#include <iostream>#include <vector>#include <string>

struct csv_state { std::vector<std::vector<std::string>> rows;};

void cb1(void *s, size_t len, void *data) { auto *state = static_cast<csv_state*>(data); state->rows.back().push_back(std::string(static_cast<char*>(s), len));}

void cb2(int c, void *data) { auto *state = static_cast<csv_state*>(data); state->rows.emplace_back();}

int main() { struct csv_parser p; csv_init(&p, CSV_STRICT); csv_set_delim(&p, ',');

csv_state state; state.rows.emplace_back();

const char *input = "Name,Age,CityAlice,30,New YorkBob,25,London"; csv_parse(&p, input, strlen(input), cb1, cb2, &state); csv_fini(&p, cb1, cb2, &state);

for (auto &row : state.rows) { for (auto &col : row) { std::cout << col << " "; } std::cout << std::endl; }

csv_free(&p); return 0;}


Bibliothèque rapidcsv

rapidcsv est une bibliothèque C++ moderne avec une interface pratique. Elle prend en charge la lecture et l'écriture de CSV, la détection automatique des types de données et le travail avec les en-têtes.

  • API simple basée sur les conteneurs STL.
  • Conversion automatique des chaînes en nombres.
  • Prise en charge des séparateurs et encodages personnalisés.

Exemple d'écriture et de lecture de CSV avec rapidcsv :

#include <rapidcsv.h>#include <iostream>

int main() { // Écriture CSV rapidcsv::Document doc("", rapidcsv::LabelParams(0, 0)); doc.SetCell<std::string>(0, 0, "Product"); doc.SetCell<int>(1, 0, 2023); doc.SetCell<double>(2, 0, 99.99); doc.Save("data.csv");

// Lecture CSV rapidcsv::Document docRead("data.csv"); std::string product = docRead.GetCell<std::string>(0, 0); int year = docRead.GetCell<int>(1, 0); double price = docRead.GetCell<double>(2, 0);

std::cout << "Product: " << product << ", Year: " << year << ", Price: " << price << std::endl; return 0;}


Travailler avec CSV via les outils standard de C++

Si vous ne souhaitez pas utiliser de bibliothèques externes, vous pouvez implémenter un analyseur avec std::stringstream et std::getline. Cela convient pour les CSV simples sans échappement.

#include <iostream>#include <fstream>#include <sstrea                    

Recommendations