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 Aussi dans la bibliothèque
mapstructure Go : guide complet avec exemples pratiques
Travailler avec Markdown en C# (.NET) : bibliothèques et exemples
Authentification et autorisation en C++ : bibliothèques et implémentation
Client Elasticsearch pour PHP : elasticsearch-php. Guide complet
Envoi d'email en Java : guide complet sur JavaMail et Jakarta Mail