lsname: inverse layout: true class: center, middle, inverse --- # Inès de Courchelle ## Les Fichiers  --- layout: false # Aujourd'hui ## 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, ...)
--- # Entrées et sorties (ES) ## Définition Programme communiquant avec un Utilisateur (ou autre programme) par entrées-sorties. ## Exemples - Une action de l’utilisateur (clavier, souris, gyroscope, ...) - Un périphérique (́ecran, imprimante, voix) - Un fichier, une base de données ... --- # Un fichier ## Définition - C'est enregistrement de données informatiques stockées dans votre ordinateur. - Il peut représenter une musique, un film, un document texte, un tableau... - Format : mp3, docx, pdf, odt, csv, json ... ## Objectifs - Sauvegarder des données - Lecture de paramètres et de configuration - Logs, données en entrée, ... --- # Un fichier ## En informatique - On lit dedans - On écrit dedans ## Des types de fichiers - csv - json - txt - ... --- # CSV ## Définition - Extension de fichier permettant de représenter des tableurs au format texte - Une colonne est séparé par une , ou un ; - Une ligne est un retour à la ligne dans le fichier ## Parallèle .pull-left[ .under[Mon Tableau] | id | appelation | prix | quantité | | -- | -- | -- | -- | | 0 | Switch | 300 | 5 | | 1 | PS5 | 500 | 2 | | 2 | XBox | 400 | 3 | | 3 | PS4 | 300 | 5 | | 4 | Wii | 50 | 10 | | 5 | GameBoy | 10 | 1 | ] .pull-right[ .under[Mon Fichier] ```bash id;appelation;prix;quantité 0;Switch;300;5 1;PS5;500;2 2;XBox;400;3 3;PS4;300;5 4;Wii;50;10 5;GameBoy;10;1 ``` ] --- # CSV ## VAR
--- # Manipulation d'un fichiers ## Algo Génerique ```c PROGRAMME manipulation DEBUT ouvrir(mode) traitement() fermeture(mode) FIN ``` --- # La lecture - PIOUPIOU ## Le code ```c #include
#include
#define N 1000 int main(){ FILE* mesJeux = NULL; char ligne[N]; int nbLignesLues = 0; mesJeux = fopen("jeux.csv", "r"); if (mesJeux == NULL) { printf("Erreur ouverture fichier \n"); } else{ while(fgets(ligne,N,mesJeux) !=NULL){ printf("ligne %d => %s \n",nbLignesLues,ligne); nbLignesLues++; } fclose(mesJeux); } return 0; } ``` --- # La lecture - PIOUPIOU ## Squelette du code
--- # La lecture - PIOUPIOU ## Step by Step ```c #include
#include
#define N 1000 ``` ## Explications - Les bibliothèques - Variable gloval N pour la taille max d'une ligne --- # La lecture - PIOUPIOU ## Step by Step ```c int main(){ ``` ## Explications Le début du programme principal --- # La lecture - PIOUPIOU ## Step by Step ```c FILE* mesJeux = NULL; char ligne[N]; int nbLignesLues = 0; ``` ## Explications - Déclaration d'une variable de type FILE* pour notre fichier - Déclaration d'un tableau de caractères N pour stocker une ligne - Déclaration d'une variable entière pour stocker le nombre de ligne lues --- # La lecture - PIOUPIOU ## Step by Step ```c mesJeux = fopen("jeux.csv", "r"); if (mesJeux == NULL) { printf("Erreur ouverture fichier \n"); } ``` ## Explications - Ouverture de notre fichier csv en mode lecture (r => read) - Si l'ouverture a échoué, alors on affiche un msg d'erreur --- # La lecture - PIOUPIOU ## Step by Step ```c else{ while(fgets(ligne,N,mesJeux) !=NULL){ printf("ligne %d => %s \n",nbLignesLues,ligne); nbLignesLues++; } } ``` ## Explications - Si l'ouverture s'est bien passée, alors on va lire notre fichier ligne par ligne : - fgets .arrow[] tant que la ligne de taille N de mon fichier mesJeux n'est pas vide - fgets .arrow[] tant que j'arrive à lire une ligne - fgets .arrow[] tant que je n'arrive pas à la fin du fichier - fgets .arrow[] tant que ... - affichage du numéro de la ligne (%d) - affichage du contenu de la ligne (%s) - on incrémente le compteur de ligne (nbLignesLues++) --- # La lecture - PIOUPIOU ## Step by Step ```c fclose(mesJeux); } return 0; } ``` ## Explications THE END of the programme
--- # La lecture - PIOUPIOU ## VAR
--- # La lecture - AVANCÉE ## Le code ```c #include
#include
#include
#define N 1000 int main() { FILE* mesJeux = NULL; char ligne[N]; int nbLignesLues = 0; int nbColonnesLues = 0; char* laLigne; laLigne=malloc(sizeof(char)*N); mesJeux = fopen("jeux.csv", "r"); if (mesJeux == NULL) { printf("Erreur ouverture fichier \n"); }else{ while(fgets(ligne,N,mesJeux) !=NULL){ laLigne= strtok(ligne,";"); while (laLigne != NULL){ printf("colonne N°%d => %s \n", nbColonnesLues,laLigne); laLigne = strtok(NULL, ";"); nbColonnesLues++; } printf("\n"); nbColonnesLues=0; nbLignesLues++; } fclose(mesJeux); } return 0; } ``` --- # La lecture - AVANCÉE ## PANIC
## On va y aller STEP BY STEP --- # La lecture - AVANCÉE ## Objectif Isoler les colonnes de notre fichier ligne par ligne ## VAR
--- # La lecture - AVANCÉE ## Step by step ```c #include
#include
#include
#define N 1000 ``` ## Explications - Les bibliothèques - Utilisation de la bibliothèque string.h - Variable gloval N pour la taille max d'une ligne --- # La lecture - AVANCÉE ## Step by step ```c int main() { ``` ## Explications Le début du programme principal --- # La lecture - AVANCÉE ## Step by step ```c FILE* mesJeux = NULL; char ligne[N]; int nbLignesLues = 0; int nbColonnesLues = 0; char* laLigne; laLigne=malloc(sizeof(char)*N); ``` ## Explications - Déclaration d'une variable de type FILE* pour notre fichier - Déclaration d'un tableau de caractères N pour stocker une ligne - Déclaration d'une variable entière pour stocker le nombre de lignes lues - Déclaration d'une variable entière pour stocker le nombre de colonnes lues - Déclaration d'un tableau dynamique de chaine de caractères pour traiter la ligne - Allocation de la chaine de caratères dynamiques (pour la taille tjs N) --- # La lecture - AVANCÉE ## Step by step ```c mesJeux = fopen("jeux.csv", "r"); if (mesJeux == NULL) { printf("Erreur ouverture fichier \n"); } ``` ## Explications - Ouverture de notre fichier csv en mode lecture (r => read) - Si l'ouverture a échoué, alors on affiche un msg d'erreur --- # La lecture - AVANCÉE ## Step by step ```c else{ while(fgets(ligne,N,mesJeux) !=NULL){ laLigne= strtok(ligne,";"); ... } ``` ## Explications - Si l'ouverture s'est bien passée, alors on va lire notre fichier ligne par ligne : - fgets .arrow[] tant que la ligne de taille N de mon fichier mesJeux n'est pas vide - fgets .arrow[] tant que j'arrive à lire une ligne - fgets .arrow[] tant que je n'arrive pas à la fin du fichier - fgets .arrow[] tant que ... - Récupére le contenu de la première colonne --- # La lecture - AVANCÉE ## Step by step ```c while (laLigne != NULL){ printf("colonne N°%d => %s \n", nbColonnesLues,laLigne); laLigne = strtok(NULL, ";"); nbColonnesLues++; } ``` ## Explications - Tant que la variable laLigne n'est pas vide je continue - J'affiche le contenu de la colonne - Je passe à la colonne suivante - J'incrémente le nombre de colonne --- # La lecture - AVANCÉE ## Step by Step ```c fclose(mesJeux); } return 0; } ``` ## Explications THE END of the programme
--- # La lecture - AVANCÉE ## Step 1
--- # La lecture - AVANCÉE ## Step 2
--- # La lecture - AVANCÉE ## Step 3
--- # La lecture - AVANCÉE ## Step 4
--- # La lecture - AVANCÉE ## Step 5
--- # La lecture - AVANCÉE ## Step 6
--- # La lecture - AVANCÉE ## Step 7
--- # La lecture - AVANCÉE ## Step 8
--- # La lecture - AVANCÉE ## Step 9
--- # La lecture - AVANCÉE ## Step 10
--- # La lecture - AVANCÉE ## Step 11
--- # La lecture - AVANCÉE ## VAR
--- # L'écriture - PIOUPIOU ## Le code ```c #include
#include
int main() { FILE* fichier = NULL; fichier = fopen("mesFilms.csv", "w") ; if (fichier != NULL) { fputs("Interstellar;Christopher Nolan;2014\n", fichier); fputs("Hobbit;Peter Jackson;2012\n", fichier); fputs("Inception;Christopher Nolan;2010\n", fichier); fputs("Shutter island;Martin Scorsese;2014\n", fichier); fputs("Little Miss Sunshine;Valerie Faris;2006\n", fichier); fclose(fichier); } return 0; } ``` --- # L'écriture ## Step by Step ```c #include
#include
``` ## Explications Les bibliothèques --- # L'écriture ## Step by Step ```c int main() { ``` ## Explications Le début du programme principal --- # L'écriture ## Step by Step ```c FILE* fichier = NULL; fichier = fopen("mesFilms.csv", "w") ; ``` ## Explications - Déclaration d'une variable de type FILE* pour notre fichier - Ouverture du fichier en mode écriture --- # L'écriture ## Step by Step ```c if (fichier != NULL) { ``` ## Explications Si on arrive à ouvrir le fichier en mode écriture, alors on continue --- # L'écriture ## Step by Step ```c fputs("Interstellar;Christopher Nolan;2014\n", fichier); ``` ## Explications - Ecriture de la chaîne de caractères suivante : "Interstellar;Christopher Nolan;2014" - Elle se termine par un saut de ligne "\n" - Le fichier qu'on a ouvert en mode écriture --- # L'écriture ## Step by Step ```c fputs("Hobbit;Peter Jackson;2012\n", fichier); ``` ## Explications - Ecriture de la chaîne de caractères suivante : "Hobbit;Peter Jackson;2012" - Elle se termine par un saut de ligne "\n" - Le fichier qu'on a ouvert en mode écriture --- # L'écriture ## Step by Step ```c fputs("Inception;Christopher Nolan;2010\n", fichier); ``` ## Explications - Ecriture de la chaîne de caractères suivante : "Inception;Christopher Nolan;2010" - Elle se termine par un saut de ligne "\n" - Le fichier qu'on a ouvert en mode écriture --- # L'écriture ## Step by Step ```c fputs("Shutter island;Martin Scorsese;2014\n", fichier); ``` ## Explications - Ecriture de la chaîne de caractères suivante : "Shutter island;Martin Scorsese;2014" - Elle se termine par un saut de ligne "\n" - Le fichier qu'on a ouvert en mode écriture --- # L'écriture ## Step by Step ```c fputs("Little Miss Sunshine;Valerie Faris;2006\n", fichier); ``` ## Explications - Ecriture de la chaîne de caractères suivante : "Little Miss Sunshine;Valerie Faris;2006" - Elle se termine par un saut de ligne "\n" - Le fichier qu'on a ouvert en mode écriture --- # L'écriture ## Step by Step ```c fclose(fichier); ``` ## Explications La fermeture du fichier --- # L'écriture ## Step by Step ```c } return 0; } ``` ## Explications La fin du programme --- # L'écriture ## Step 1
--- # L'écriture ## Step 2
--- # L'écriture ## Step 3
--- # L'écriture ## Step 4
--- # L'écriture ## Step 5
--- # L'écriture ## Step 6
--- # L'écriture ## VAR
--- # L'écriture - Personnalisée ## Objectif Écrire le contenu d'une variable dans un fichier ## VAR
--- # L'écriture - Personnalisée ## Le code ```c #include
#include
#define MAX 100 int main(){ FILE* fichier = NULL; char* nom; char* prenom; int niveau; int nbBadges; nom = malloc(sizeof(char)*MAX); prenom = malloc(sizeof(char)*MAX); fichier = fopen("mesPersonnages.csv", "w"); if (fichier != NULL) { for (int i=0;i<3;i++){ printf("Personnage N°%d \n",i); printf("Nom : \n "); scanf("%s", nom); printf("Prenom : \n "); scanf("%s", prenom); printf("Niveau : \n "); scanf("%d", &niveau); printf("NbBadges: \n "); scanf("%d", &nbBadges); fprintf(fichier, "%d;%s;%s;%d;%d",i,nom,prenom,niveau,nbBadges); fprintf(fichier, "\n"); } fclose(fichier); } return 0; } ``` --- # L'écriture - Personnalisée ## Step by step ```c #include
#include
#define MAX 100 ``` ## Explications - Les bibliothèques - Variable gloval N pour la taille max d'une chaîne de caractères --- # L'écriture - Personnalisée ## Step by step ```c int main(){ ``` ## Explications Le début du programme principal --- # L'écriture - Personnalisée ## Step by step ```c FILE* fichier = NULL; char* nom; char* prenom; int niveau; int nbBadges; ``` ## Explications - Déclaration d'une variable de type FILE* pour notre fichier - Déclaration d'un type char* pour stocker un nom - Déclaration d'un type char* pour stocker un prénom - Déclaration d'un type entier pour stocker un niveau - Déclaration d'un type entier pour stocker un nombre de badges --- # L'écriture - Personnalisée ## Step by step ```c nom = malloc(sizeof(char)*MAX); prenom = malloc(sizeof(char)*MAX); ``` ## Explications .underR[NE PAS OUBLIER] .arrow[] Ce sont des char* - Allocation pour la chaîne de caractères nom - Allocation pour la chaîne de caractères prénom --- # L'écriture - Personnalisée ## Step by step ```c fichier = fopen("mesPersonnages.csv", "w"); ``` ## Explications Ouverture du fichier en mode écriture --- # L'écriture - Personnalisée ## Step by step ```c if (fichier != NULL) { ``` ## Explications Si l'ouverture a échoué, alors on ne rentre pas dans le si --- # L'écriture - Personnalisée ## Step by step ```c for (int i=0;i<3;i++){ ``` ## Explications Boucle for pour insérer 3 personnages (i<3) --- # L'écriture - Personnalisée ## Step by step ```c printf("Personnage N°%d \n",i); printf("Nom : \n "); scanf("%s", nom); printf("Prenom : \n "); scanf("%s", prenom); printf("Niveau : \n "); scanf("%d", &niveau); printf("NbBadge: \n "); scanf("%d", &nbBadges); ``` ## Explications - Interaction avec l'utilisateur pour insérer une ligne dans notre fichier - On lui demande : - un nom - un prénom - un niveau - un nombre de badges --- # L'écriture - Personnalisée ## Step by step ```c fprintf(fichier, "%d;%s;%s;%d;%d",i,nom,prenom,niveau,nbBadges); fprintf(fichier, "\n"); ``` ## Explications - Ecriture des informations demander à l'utilisateur dans le fichier - Séparation des différentes informations par un ; - Réalisation d'un saut de ligne dans le fichier --- # L'écriture - Personnalisée ## Step by step ```c } fclose(fichier); } return 0; } ``` ## Explications - Fin de la boucle des 3 personnages - Fermeture du fichier - Fin du si - Fin du programme --- # L'écriture - Personnalisée ## Step 1
--- # L'écriture - Personnalisée ## Step 2
--- # L'écriture - Personnalisée ## Step 3
--- # L'écriture - Personnalisée ## Step 4
--- # L'écriture - Personnalisée ## Step 5
--- # L'écriture - Personnalisée ## Step 6
--- # L'écriture - Personnalisée ## Step 7
--- # L'écriture - Personnalisée ## VAR
--- # E/S ## Les principaux modes | le mode | Explications | | -------- | -------- | | "r" | lecture seule | | "w" | écriture seule | | "a" | ajout de texte | | "a+" | ajout et écriture | | "r+" | lecture et écriture | | "w+" | lecture, ré-écriture | --- # Conclusion ## Lire - fgets - fgets + strtok ## Ecrire - fputs - fprintf ## CSV Fichier de type tableur dont les colonnes sont séparées par des , ou ; et dont les lignes sont séparées par des retours à la lignes --- # Un peu d'aide ## Openclassroom
Manipulez des fichiers