CHAPITRE 4 : Les fichiers de type texte CHAPITRE 4 : Les fichiers de type texte
CHAPITRE 4 : Les fichiers de type texte CHAPITRE 4 : Les fichiers de type texte A) Notions de fichier C'est un document qui se trouve sur un support magnétique (disquette, disque dur, ruban magnétique, ...). Chaque fichier dispose d'un nom "physique" : "employes.dta" : données (dta : data (données)) concernant les employés "taille.imp" : les tailles en système impérial "tp1.c" : programme en langage C pour le tp 1. etc .... Le suffixe dta est l'abrégé du mot "data" (données) qui est souvent utilisé pour désigner un fichier qui contient des données. Le suffixe "c" désigne un fichier qui contient un programme écrit en langage C. Un fichier de type texte est une suite de lignes de texte. Dépendant du type de la variable, le compilateur lit une suite de caractères et convertit selon le type déclaré. Exemples du contenu d'un fichier texte Soit le fichier "imperial.dta" : F 5 6 120 M 5 4 145 etc . Chaque ligne de ce fichier contient les informations relatives à une personne : 1 caractère pour le sexe; 2 entiers pour la taille en nombre de pieds et de pouces; 1 entier pour le poids en nombre de livres. Soit le fichier : "employes.dta" : 1345 40.0 18.00 3212 36.0 12.50 5432 42.5 14.75 etc . Chaque ligne de ce fichier contient les informations relatives à un employé : 1 entier pour le numéro d'employé; 1 réel pour le nombre d'heures de travail par semaine; 1 réel pour le taux horaire. Chapitre 4 : Les fichiers de type texte IFT 1969 / A07 Page 1 Les autres types de fichiers (fichiers binaires, fichiers à accès direct, fichiers indexés, etc.) ne seront pas présentés dans ce cours. B) Déclaration et traitement de fichiers 1) Déclarer FILE *aLire, *aCreer; aLire et aCreer sont des identificateurs inventés par l'usager pour désigner les noms "logiques" (noms internes) d'un fichier à lire et d'un fichier à créer. On utilise aussi assez souvent : FILE *donnees, *resultats; FILE est un mot anglais pour désigner un fichier. 2) Préparation d'un fichier a) pour la lecture Ouvrir un fichier en mode lecture, par exemple : aLire = fopen("metrique.dta", "r"); fopen (file open) : ouvrir un fichier "r" : pour lire ("reading") b) pour l'écriture Ouvrir un fichier en mode écriture, par exemple : aCreer = fopen("tailles.fem", "w"); fopen (file open) : ouvrir un fichier "w" : pour écrire ("writing") Chapitre 4 : Les fichiers de type texte IFT 1969 / A07 Page 2 3) Tests sur un fichier en lecture feof(aLire) : End Of File (fin du fichier) Est-ce la fin du fichier à lire (aLire)? Le test !feof(aLire) (pas fin du fichier à lire) est utilisé presque toujours avec la boucle Tant que (while) : while (!feof(aLire)){ .... .... lecture .... .... } L'interprétation "théorique" de cette boucle est : TANT QUE Pas Fin du Fichier à lire FAIRE ..... L'interprétation "pratique" de cette boucle est : TANT QUE "On a une ligne à lire devant nous" FAIRE ..... ou encore : Pour chacune des lignes à lire, FAIRE .... 4) Lecture dans un fichier Notez qu'on lit un fichier texte de haut en bas, de gauche à droite (chacune des lignes lues). . fscanf (aLire, "codes de format", liste des adresses); 5) Écriture d'un fichier (création) fprintf(aCreer,"messages + codes de format", liste des informations); Chapitre 4 : Les fichiers de type texte IFT 1969 / A07 Page 3 6) Fermeture d'un fichier fclose(aLire); /* fortement recommandé */ fclose(aCreer); /* OBLIGATOIRE */ Cette fermeture est obligatoire pour les fichiers à créer. Elle est facultative pour les fichiers à lire. Cependant, un oubli de fermer plusieurs fichiers en lecture peut provoquer des problèmes avec le système d'exploitation. C) Exemples de création de fichier Méthode 1 : création d'un fichier par l'édition On utilise un éditeur de texte pour taper les données, corriger les erreurs de frappe et sauvegarder le fichier. (Au lieu d'éditer un programme en langage C par exemple, on édite les données.) Ne pas utiliser un logiciel de traitement de texte (comme Word) pour éditer les données. Dans le fichier, il y aura des caractères spéciaux qui ne correspondent pas aux vraies données. Exercice Éditer un fichier du nom "notes.g01" qui contient les 5 lignes suivantes : 3425 87.5 5412 72.6 6123 59.5 3126 87.3 2345 74.9 Chapitre 4 : Les fichiers de type texte IFT 1969 / A07 Page 4 Méthode 2 : création d'un fichier par programmation en mode interactif Écrire un programme qui permet de saisir un caractère représentant le sexe (f ou m) et la taille d'une personne en nombre de pied et de pouce. On écrit ces informations saisies ainsi que la taille en mètre dans un fichier du nom "personne.dta". #include <stdio.h> #include <ctype.h> int main() { /* déclarer le fichier à créer */ FILE *aCreer; const float FACTEUR = 0.3048; /*1 pied vaut 0.3048 mètre */ char sexe, reponse; int nbPieds, nbPouces; float taille; /* préparer le fichier à créer */ aCreer = fopen("personne.dta", "w"); do{ /* saisie de données */ printf("\n\nEntrez f ou m pour le sexe : "); fflush(stdin); sexe = toupper(getchar()); printf("\n\nEntrez le nombre de pieds et de pouces : "); scanf("%d%d", &nbPieds, &nbPouces); /* convertir en mètre : */ taille = (nbPieds + nbPouces / 12.0) * FACTEUR; /* écriture dans le fichier : */ fprintf(aCreer,"%c%5d%3d%7.2f\n", sexe, nbPieds, nbPouces, taille); printf("\n\nVoulez-vous continuer ? (O/N) >> "); fflush(stdin); reponse = toupper(getchar()); } while (reponse == 'O'); /* fermeture du fichier à créer : */ fclose(aCreer); return 0; } Dans l'industrie informatique, la création de données peut se faire par les opérateurs qui tapent très vite les données. Chapitre 4 : Les fichiers de type texte IFT 1969 / A07 Page 5 Méthode 3 : création d'un fichier à partir d'un fichier existant Supposons qu'on dispose maintenant du fichier "personne.dta" créé par l'exécution du programme de la méthode 2. Écrire un programme permettant de lire le fichier "personne.dta" et de créer un nouveau fichier qui ne contient que la taille de chacune des femmes. Le nom du nouveau fichier est "taille.fem". #include <stdio.h> int main() { /* déclarer le fichier à lire et le fichier à créer */ FILE *aLire, *aCreer; char sexe; int nbPieds, nbPouces; float taille; /* préparer les fichiers à lire et à créer */ aLire = fopen("personne.dta", "r"); aCreer = fopen("taille.fem", "w"); /* création du nouveau fichier : */ while (!feof(aLire)){ fscanf(aLire,"%c%d%d%f\n", &sexe, &nbPieds, &nbPouces, &taille); if (sexe == 'F') fprintf(aCreer, "%7.2f\n", taille); } /* fermeture des fichiers : */ fclose(aCreer); fclose(aLire); return 0; } En pratique, il est possible d'obtenir des fichiers fournis par les organismes (Environnement, bureaux de sondage, ...). Dans un tel cas, on reçoit souvent une description des données (une donnée est de tel type, elle se trouve entre telle et telle colonne, elle représente telle information, etc.). On peut ainsi écrire des programmes pour lire le fichier des données, traiter des informations voulues et créer de nouveaux fichiers selon nos besoins. Chapitre 4 : Les fichiers de type texte IFT 1969 / A07 Page 6 Autres exemples Exemple 1 /* Fichier : file1.c : premier exemple de création de fichiers par pogrammation. Ce programme permet de créer : 1. le fichier nommé "divise6.txt" qui contient les diviseurs de 6 avec leurs rangs : 1) 1 2) 2 3) 3 4) 6 2. le fichier nommé "divise720.txt" qui contient les diviseurs de 720 avec leurs rangs. 3. le fichier du nom "for.res" sur le disque réseau (R:) qui contient 3 lignes : 50 55 60 ... 100 70 60 50 40 ... 0 ABCDEF...XYZ Comment faire pour obtenir et afficher les diviseurs de 6? - on examine tous les candidats de 1 à 6 (1, 2, 3, 4, 5 et 6) - si le candidat est un diviseur de 6 (6 % candidat vaut 0) et dans ce cas, on l'écrit dans le fichier Comment créer un fichier ? 1. déclarer le nom "logique" (inventé par le programmeur) FILE *aCreer; (ou FILE *resultats; ou . . . ) 2. ouvrir le fichier en mode écriture (for writing) pour y écrire son contenu aCreer = fopen(nom externe, "w"); où nom externe est le nom du fichier sur le support magnétique exemple : aCreer = fopen("divise6.txt", "w"); Les deux étapes ci-dessus peuvent aussi être intégrées en une seule: FILE *aCreer = fopen(nom externe, "w"); 3. Très souvent, dans une boucle, au bon endroit, on écrit des informations voulues dans le fichier : fprintf(nom interne, "codes de format", liste d'informations); la première lettre f vient du mot (file) fichier fprintf : écrire dans un fichier Chapitre 4 : Les fichiers de type texte IFT 1969 / A07 Page 7 Ce programme sera amélioré plus tard quand on apprend la notion de sous-programmes (les fonctions en langage C). */ #include <stdio.h> int main() { #define NOMBRE1 6 /* pour les diviseurs de 6 */ #define NOMFILE1 "divise6.txt" /* fichier avec les diviseurs de 6 */ #define uploads/Litterature/ chapitre-4 5 .pdf
Documents similaires










-
28
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Fev 18, 2022
- Catégorie Literature / Litté...
- Langue French
- Taille du fichier 0.1401MB