Lecture et écriture de fichiers CSV et JSON en C++

Lecture et écriture de fichiers CSV et JSON en C++

Amine Abidi - Lead Software Engineer C++/Qt - Associé PointerLab

Publié par Amine Abidi - Lead Software Engineer C++/Qt - Associé PointerLab

Introduction

Les fichiers CSV et JSON sont largement utilisés pour stocker et échanger des données. En C++, il est possible de manipuler ces formats à l’aide des outils de la STL (fstream) pour les CSV et de bibliothèques externes comme nlohmann/json pour les JSON.

Avant d'aller plus loin, vous pouvez consulter notre article sur la gestion des fichiers en C++ pour comprendre les bases de l’ouverture, de la lecture et de l’écriture de fichiers en C++.

Cet article explique comment lire et écrire des fichiers CSV et JSON en C++, avec des exemples concrets.


1. Lecture et écriture de fichiers CSV en C++

Les fichiers CSV (Comma-Separated Values) stockent des données sous forme de tableaux, où chaque ligne représente une entrée et chaque colonne est séparée par une virgule (,) ou un point-virgule (;).

1.1. Écriture dans un fichier CSV

#include <iostream>
#include <fstream>
using namespace std;

int main() {
    ofstream fichier("donnees.csv"); // Ouvre un fichier en écriture

    if (fichier.is_open()) {
        fichier << "Nom,Âge,Score\n";
        fichier << "Alice,25,90\n";
        fichier << "Bob,30,85\n";
        fichier.close();
        cout << "Données écrites dans donnees.csv" << endl;
    } else {
        cout << "Erreur : Impossible d'ouvrir le fichier." << endl;
    }

    return 0;
}

Résultat dans donnees.csv :

Nom,Âge,Score
Alice,25,90
Bob,30,85

1.2. Lecture d’un fichier CSV

#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
using namespace std;

int main() {
    ifstream fichier("donnees.csv");
    string ligne;

    if (fichier.is_open()) {
        while (getline(fichier, ligne)) {
            stringstream ss(ligne);
            string champ;
            vector<string> colonnes;

            while (getline(ss, champ, ',')) {
                colonnes.push_back(champ);
            }

            for (const auto &val : colonnes) {
                cout << val << " ";
            }
            cout << endl;
        }

        fichier.close();
    } else {
        cout << "Erreur : Impossible de lire le fichier." << endl;
    }

    return 0;
}

Sortie console :

Nom Âge Score
Alice 25 90
Bob 30 85

2. Lecture et écriture de fichiers JSON en C++

Les fichiers JSON (JavaScript Object Notation) sont un format structuré en paires clé-valeur, souvent utilisé pour échanger des données entre applications.

C++ ne prend pas en charge JSON nativement, mais des bibliothèques comme nlohmann/json permettent de le manipuler facilement.

Installation de nlohmann/json (via vcpkg) :

  1. Assurez-vous que vcpkg est installé sur votre système.
  2. Ouvrez un terminal et exécutez la commande suivante :
   vcpkg install nlohmann-json

2.1. Écriture dans un fichier JSON

#include <iostream>
#include <fstream>
#include <nlohmann/json.hpp>
using namespace std;
using json = nlohmann::json;

int main() {
    json data = {
        {"nom", "Alice"},
        {"âge", 25},
        {"scores", {90, 85, 88}}
    };

    ofstream fichier("donnees.json");
    if (fichier.is_open()) {
        fichier << data.dump(4); // `dump(4)` pour un format lisible
        fichier.close();
        cout << "Données écrites dans donnees.json" << endl;
    } else {
        cout << "Erreur : Impossible d'ouvrir le fichier." << endl;
    }

    return 0;
}

Résultat dans donnees.json :

{
    "nom": "Alice",
    "âge": 25,
    "scores": [90, 85, 88]
}

2.2. Lecture d’un fichier JSON

#include <iostream>
#include <fstream>
#include <nlohmann/json.hpp>
using namespace std;
using json = nlohmann::json;

int main() {
    ifstream fichier("donnees.json");
    if (fichier.is_open()) {
        json data;
        fichier >> data;
        fichier.close();

        cout << "Nom : " << data["nom"] << endl;
        cout << "Âge : " << data["âge"] << endl;
        cout << "Scores : ";
        for (const auto &score : data["scores"]) {
            cout << score << " ";
        }
        cout << endl;
    } else {
        cout << "Erreur : Impossible de lire le fichier." << endl;
    }

    return 0;
}

3. Entraine toi !

Écrire un programme en C++ qui effectue les opérations suivantes :

  1. Lire un fichier CSV (data.csv) contenant une liste de produits avec les colonnes suivantes :

    • Nom (Nom du produit)
    • Prix (Prix du produit)
    • Stock (Quantité en stock)
  2. Convertir ces données en JSON.

  3. Enregistrer les données JSON dans un fichier data.json.

  4. Lire les données depuis data.json et les afficher.

Exigences

  • Utiliser la bibliothèque nlohmann/json pour la gestion des fichiers JSON.
  • Utiliser les flux de fichiers en C++ (ifstream, ofstream).
  • Respecter une bonne structure de code avec une gestion correcte des erreurs.

Conclusion

Les fichiers CSV et JSON sont des formats courants pour stocker et échanger des données.

  • En C++, les fichiers CSV sont facilement manipulables avec fstream.
  • Les fichiers JSON, en revanche, nécessitent l'utilisation d'une bibliothèque externe comme nlohmann/json.

Grâce à ces outils, la manipulation et la conversion des données deviennent plus simples et efficaces.

Dans le prochain article, nous explorerons les expressions régulières (std::regex) en C++, un outil puissant pour manipuler et extraire des données textuelles.

Rejoignez la communauté C++ France sur Discord !

Développez votre réseau et boostez votre carrière avec la communauté C++ France