Aller au contenu principal

Module 08 · Leçon 3

Fichiers typés

180 minanalyse · pascal
Affichage du code

Ce que vous saurez faire

  • Associer un fichier logique à un chemin physique
  • Créer, lire, écrire et fermer un fichier typé
  • Détecter la fin de fichier (EOF)

Avant de commencer

Un tableau a une taille fixée à la compilation. Pour stocker un nombre inconnu d'éléments (ex. la base de données des notes), il faut un fichier. Comment lire et écrire un fichier en Pascal ?


1. Qu'est-ce qu'un fichier typé ?

Chaque fichier a deux noms :

  • Logique : la variable Pascal (ex. F).
  • Physique : le chemin sur le disque (ex. "C:\notes.dat").

2. Déclaration

T.D.N.T
─────────────────────────────────
Type
  FICH_NOTES = Fichier de réel
─────────────────────────────────

T.D.O
─────────────────────────────────
F : variable FICH_NOTES
x : variable réel
─────────────────────────────────

3. Opérations de base

AlgorithmePascalRôle
Associer(F, chemin)Assign(F, chemin)Lie la var logique au chemin physique
Recréer(F)Rewrite(F)Crée vide (ou écrase) et ouvre en écriture
Ouvrir(F)Reset(F)Ouvre en lecture, pointeur au début
Ecrire(F, x)Write(F, x)Écrit x, avance pointeur
Lire(F, x)Read(F, x)Lit dans x, avance pointeur
Fin_fichier(F)Eof(F)Vrai si pointeur en fin
Fermer(F)Close(F)Libère le fichier

États possibles

ÉtatRecréerOuvrir
Le fichier existeLe remplace par un videPositionne au début
Le fichier n'existe pasCrée un vide et l'ouvreErreur

4. Exemple : créer un fichier de notes

PROGRAM EcrireNotes;
TYPE
  Fich_Notes = FILE OF real;
VAR
  F : Fich_Notes;
  x : real;
  rep : char;
BEGIN
  Assign(F, 'C:\notes.dat');
  Rewrite(F);            { crée ou écrase }
  REPEAT
    Write('Note : ');
    Readln(x);
    Write(F, x);
    Write('Continuer (O/N) ? ');
    Readln(rep);
  UNTIL UpCase(rep) = 'N';
  Close(F);              { TOUJOURS fermer }
END.

5. Exemple : lire toutes les notes

PROGRAM LireNotes;
TYPE
  Fich_Notes = FILE OF real;
VAR
  F : Fich_Notes;
  x : real;
BEGIN
  Assign(F, 'C:\notes.dat');
  Reset(F);              { ouvre en lecture }
  WHILE NOT Eof(F) DO
  BEGIN
    Read(F, x);
    Writeln(x:5:2);
  END;
  Close(F);
END.

6. Fonctions/procédures avancées

AlgorithmePascalRôle
Position_fichier(F)FilePos(F)Position courante (0 = début)
Pointer(F, n)Seek(F, n)Aller au bloc n
Taille_fichier(F)FileSize(F)Nombre d'éléments
Effacer(F)Erase(F)Supprime le fichier physique
Renommer(F, nv)Rename(F, nv)Renomme (fichier doit être fermé)
Tronquer(F)Truncate(F)Coupe à la position courante

7. Exercices

Exercice 1facile
Compter les éléments

Écrire un programme qui ouvre un fichier notes.dat et compte combien de notes il contient (sans utiliser FileSize).

Voir le corrigé
Reset(F);
n := 0;
WHILE NOT Eof(F) DO
BEGIN
  Read(F, x);
  n := n + 1;
END;
Close(F);
Writeln('Nombre : ', n);

Alternative avec FileSize(F) : 1 ligne, plus rapide.

Exercice 2moyen
Filtrer les bonnes notes (type bac courant)

Soit F1 un fichier de réels. Créer un fichier F2 qui ne contient que les notes >= 12.

Voir le corrigé
PROGRAM Filtrer;
TYPE Fich = FILE OF real;
VAR
  F1, F2 : Fich;
  x : real;
BEGIN
  Assign(F1, 'notes.dat');  Reset(F1);
  Assign(F2, 'bonnes.dat'); Rewrite(F2);
  WHILE NOT Eof(F1) DO
  BEGIN
    Read(F1, x);
    IF x >= 12 THEN
      Write(F2, x);
  END;
  Close(F1); Close(F2);
END.
Exercice 3difficile
Mise à jour en place (hors bac, bonus)

Augmenter chaque note de 1 point dans notes.dat, directement dans le fichier (sans utiliser de second fichier). Utiliser Seek et FilePos.

Voir le corrigé
Reset(F);
WHILE NOT Eof(F) DO
BEGIN
  pos := FilePos(F);
  Read(F, x);           { Read avance le pointeur }
  Seek(F, pos);         { Revenir à la position }
  x := x + 1;
  Write(F, x);          { Écrase l'ancienne valeur }
END;
Close(F);

C'est typiquement le genre d'opération qui exige les fonctions de positionnement.


8. Erreurs fréquentes au bac

  • Oublier Assign avant Rewrite/Reset → erreur d'exécution.
  • Faire Reset sur un fichier inexistant → erreur (Rewrite aurait marché).
  • Oublier Close à la fin (peut laisser le fichier corrompu).
  • Lire après Eof → erreur.

9. Quiz

Quiz (5 questions)

1

Pour CRÉER un nouveau fichier (ou en remplacer un), on utilise :

2

Pour OUVRIR un fichier existant en lecture, on utilise :

3

Eof(F) retourne :

4

Si on oublie Close à la fin :

5

Pour aller au bloc d'indice 4 (5ème élément, numérotation à partir de 0) :

Bravo d'être arrivé jusqu'ici. Marquez la leçon terminée pour ancrer le progrès.