TP9 - Les fichiers

Inès de Courchelle

Durée : 3h

Objectifs :

  • Écrire dans un fichier
  • Lire dans un fichier
  • Modifier une information dans un fichier
  • Connaître les formats de fichiers manipulés en informatique(CSV,JSON, …)

Exercice 1 : un peu de recherche personnelle

  1. Qu’est ce qu’un fichier JSON ? À quoi ça ressemble ?
  2. Nous considérons les données suivantes, contenues dans le fichier mesFringues.csv
01;chemise;40;10€;
02;pantalon;42;20€;
03;chaussettes;39;5€;
04;chapeau;M;8€;
05;pull;38;10€;

À quoi ressemblerais se fichier au format json ?

  1. Écrire un programme exo1.c permettant de tranformer le fichier mesFringues.csv en mesFringues.json. Attention Il n’y a pas besoin de faire de la compilation séparée. Un seul fichier avec le programme principal est suffisant.
TIPS
  • Un seul fichier est nécessaire (inutile de faire de la compilation séparée)
  • Vous n’êtes pas obligé de créer une fonction, vous pouvez réaliser directement le traitement dans le programme principal
  • En paralléle, il faut ouvrir le fichier mesFringues.csv en mode lecture et il faut ouvrir le fichier mesFringues.json en mode écriture
  • Il faut privilégier l’écriture personalisée en utilisant l’instruction fprintf

Votre fichier devra ressembler comme ci-dessous. EN utilisant fprintf, vous pouvez très bien écrire des ’ au lieu des guillemets.

[
   {
   "id": "01",
   "appelation": "chemise",
   "taille": "40",
   "prix": "10€"
   },
   {
   "id": "02",
   "appelation": "pantalon",
   "taille": "40",
   "prix": "20€"
   },
   {
   "id": "03",
   "appelation": "chaussettes",
   "taille": "39",
   "prix": "5€"
   },
   {
   "id": "04",
   "appelation": "chapeau",
   "taille": "M",
   "prix": "8€"
   },
   {
   "id": "05",
   "appelation": "pull",
   "taille": "38",
   "prix": "10€"
   }
   ]


Exercice 2 : Calcul des Notes

Nous considérons le fichier notes.csv suivant :

22077;Archie;Andrews;8;10;2;4;12;
22078;Betty;Cooper;18;17;15;12;14;
22045;Veronica;Lodge;14;15;15;14;12;
22048;Jughead;Jones;14;19;19;10;12;
22042;Cheryl;Blossom;19;19;19;19;19;
  1. Créer l’architecture de fichier suivantes :

  1. Créer le makefile correspondant
  2. Créer la structure étudiant :
  • N° Etudiant : entier
  • nom : pointeur de chaine de caractères
  • prenom : pointeur de chaine de caractères
  • mesNotes : tableau statique de 5 entiers


  1. Créer la structure tabEtudiants :
  • tabEtudiants : pointeur d’étudiants
  • taille : entier


  1. Créer la fonction lireCSV permettant de lire le contenu d’un fichier CSV et d’enregistrer chaque ligne dans un tableau d’étudiants
/* Auteur : ... */
/* Date :   ... */
/* Résumé : ... */
/* Entrée(s) : ... */
/* Sortie(s) :  ...  */

tabEtudiants* lireCSV(char* fichierNotes);


  1. Créer la procédure afficherEtudiant permettant d’afficher un étudiant
/* Auteur : ... */
/* Date :   ... */
/* Résumé : ... */
/* Entrée(s) : ... */
/* Sortie(s) :  ...  */

void afficherEtudiant(etudiant e);
  1. Créer la procédure afficherTableauEtudiant permettant d’afficher le tableau d’étudiants
/* Auteur : ... */
/* Date :   ... */
/* Résumé : ... */
/* Entrée(s) : ... */
/* Sortie(s) :  ...  */

void afficherTableauEtudiant(tabEtudiants tabEtudiants);
  1. Créer la fonction calculerMoyenneParEtudiant
/* Auteur : ... */
/* Date :   ... */
/* Résumé : ... */
/* Entrée(s) : ... */
/* Sortie(s) :  ...  */

double calculerMoyenneParEtudiant(etudiant e);
  1. Créer la fonction meilleurEtudiant qui permet de chercher l’étudiant qui a la meilleure moyenne.
/* Auteur : ... */
/* Date :   ... */
/* Résumé : ... */
/* Entrée(s) : ... */
/* Sortie(s) :  ...  */

etudiant meilleurEtudiant(tabEtudiants tabEtudiants);
  1. Créer la fonction saisirEtudiant
/* Auteur : ... */
/* Date :   ... */
/* Résumé : ... */
/* Entrée(s) : ... */
/* Sortie(s) :  ...  */

void saisirEtudiant(etudiant* a);
  1. Créer la procédure ajouterEtudiant qui permet d’ajouter un étudiant au tableau d’étudiants
/* Auteur : ... */
/* Date :   ... */
/* Résumé : ... */
/* Entrée(s) : ... */
/* Sortie(s) :  ...  */

void ajouterEtudiant(tabEtudiants* tabEtudiants,etudiant* a);
  1. Créer la procédure ecrireCSV
/* Auteur : ... */
/* Date :   ... */
/* Résumé : ... */
/* Entrée(s) : ... */
/* Sortie(s) :  ...  */

void ecrireCSV(tabEtudiants* tabEtudiants,char* fichierNotes);
  1. Créer la procédure supprimerEtudiant
/* Auteur : ... */
/* Date :   ... */
/* Résumé : ... */
/* Entrée(s) : ... */
/* Sortie(s) :  ...  */

void supprimerEtudiant(tabEtudiants* tabEtudiants, int num);

L’objectif de cet algo est de trouver l’index de l’étudiant que l’on souhaite supprimer

  • SI on le trouve ALORS on va décaler le tableau initial d’une case
  • SInon on affiche un msg d’erreur


  1. Créer la procédure modifierEtudiant
/* Auteur : ... */
/* Date :   ... */
/* Résumé : ... */
/* Entrée(s) : ... */
/* Sortie(s) :  ...  */

void modifierEtudiant(tabEtudiants* tabEtudiants, int num);
  1. Créer la procédure transformerJson
/* Auteur : ... */
/* Date :   ... */
/* Résumé : ... */
/* Entrée(s) : ... */
/* Sortie(s) :  ...  */

void transformerJson(char* fichierCSV, char* fichierJSON);