Partie 3 : fichiers CSV

Partie 3 : fichiers CSV#

Dans cette partie, on va traiter les fichiers tels qu’ils sont réellement distribués, en utilisant le format CSV (Comma Separated Values). C’est un format texte répandu pour représenter des données tabulaires. D’ailleurs, vous pouvez charger ce type de fichier directement dans un tableur, par exemple pour vérifier à la main que vos résultats sont corrects.

Ouvrez le fichier donnees/donnees-test.csv sur le serveur Jupyter (ici) et sélectionnez en haut le point virgule « ; » comme Délimiteur pour voir apparaitre les données sous forme d’un tableur.

Fermez le fichier, puis ouvrez le en ouvrant le dossier donnees puis clique droit sur le fichier et Òuvrir avec : Editeur. Vous voyez maintenant le même fichier directement tel qu’il est sauvegardé au format texte (et tel que vous allez le lire avec C++)

Exercice 7 : un premier fichier CSV

L’objectif est de reprendre l’exercice 2, mais en partant du fichier de données tel qu’il est fourni par opendata.paris.fr: donnees/liste_des_prenoms.csv

Chaque ligne de texte représente une ligne du tableau, et les cellules sont séparées par des point-virgules. La première ligne d’un fichier CSV est une ligne d’entête qui correspond au nom des colonnes du tableau.

  1. Consulter et essayer le programme getline-exemple dans getline-exemple.cpp. Il utilise la fonction getline, dont la documentation est donnée dans getline.hpp

    Vous constaterez que cette fonction modifie la chaîne de caractère “resultat” passée en argument ! De fait, le symbole “&” indique que “resultat” est passé par référence. Vous verrez les détails au second semestre.

    Attention ! Vous remarquez que le fichier csv contient deux colonnes avec des nombres « Nombre prénoms déclarés » et « Nombre total cumule par annee ». Ces nombres sont les mêmes presque tout le temps (mais pas tout le temps !) et surtout on comprend mal à quoi correspond la différence. On se basera sur le nombre en dernière colonne pour nos calculs. Vous voyez ainsi que les données réelles sont rarement parfaites et parfaitement formatées !

  2. À l’aide de la fonction getline, implanter le programme prenoms-csv.cpp et qui fait le même calcul que prenoms.cpp mais à partir du fichier CSV.

    Remarque : pour vos tests et le debuggage, vous pouvez utiliser le fichier donnees/donnees-test.csv qui utilise le même format mais avec moins de données.

Exercice 8 : généralisation

L’objectif de cet exercice est d’ajouter à notre bibliothèque des fonctionnalités génériques pour les fichiers CSV. On implantera les fonctions dans tableau-lecture-csv.cpp . Des tests sont fournis dans tableau-lecture-csv-test.cpp

  1. Complétez la fonction litTableauCSV(string nom_fichier, int nb_colonnes) du fichier tableau-lecture-csv.cpp dont la documentation est donnée dans tableau-lecture-csv.hpp et lancez les tests correspondant dans tableau-lecture-csv-test.cpp

    Si vous êtes vraiment bloqués, vous pouvez copier-coller l’implantation fournie dans le fichier en_cas_d_urgence_briser_la_glace.cpp. On vous demandera tout de même de savoir expliquer comment elle marche!

  2. \(\clubsuit\) Même chose, mais sans avoir besoin de spécifier le nombre de colonnes