Manipulation de fichiers texte en Pascal



Déclaration

Un fichier texte est représenté en Pascal par le type TextFile. Pour pouvoir manipuler un fichier texte, il faut d'abord déclarer une variable de ce type. Par exemple:

   var f: TextFile ;

Dans toutes les explications qui suivent, f désignera le fichier déclaré de cette manière.

Assignation

Avant de pouvoir ouvrir un nouveau fichier texte, il faut d'abord associer la variable fichier au nom du fichier sur le disque. Cela se fait par la procédure AssignFile. Voici, par exemple comment associer f à un fichier nommé exemple.txt :

   AssignFile(f,'exemple.txt');

Création d'un fichier texte

Ouverture en écriture

Après avoir déclaré une variable de type fichier et assigné cette variable à un nom de fichier, on peut l'ouvrir en écriture. Cela a pour effet de créer un nouveau fichier vide. Attention : s'il existe déjà un fichier de même nom sur le disque le contenu de ce dernier sera perdu !

L'ouverture en écriture, se fait par la procédure rewrite, comme suit:

   rewrite (f);
Ecriture d'une ligne

Dès que le fichier est ouvert en écriture, on peut y écrire du texte en utilisant la procédure writeln. Voici par exemple, comment créer un fichier texte 'exemple.txt' d'une ligne:

 var f: TextFile;
 begin
  AssignFile (f,'exemple.txt');
  rewrite(f);
  writeln (f,' Ceci est un fichier d'une ligne.');
  CloseFile (f); 
 end;

La procédure CloseFile appelée à la fin sert à fermer le fichier.

Comme on fait de l'accès séquentiel, une écriture se fait forcément après la ligne écrite juste avant. Donc après l'exécution du code suivant:

 var f: TextFile;
 begin
  AssignFile (f,'exemple.txt');
  rewrite(f);
  writeln (f,'Première ligne du fichier exemple.txt');
  writeln (f,'Deuxième ligne du fichier exemple.txt');
  CloseFile (f); 
 end;

le fichier exemple.txt contiendra les deux lignes:

Première ligne du fichier exemple.txt
Deuxième ligne du fichier exemple.txt

Lecture d'un fichier texte

Ouverture d'un fichier texte en lecture

Pour ouvrir un fichier en lecture, on utilise la procédure reset de la manière suivante:

   reset (f);

Comme pour l'ouverture en écriture, il faut que le fichier ait auparavant été assigné à un nom de fichier. Par contre, si ce fichier n'existe pas, cela provoquera une erreur.

Lecture d'une ligne et test de fin de fichier

Pour lire une ligne dans le fichier, on utilise la procédure readln, qui affecte la ligne courante à une variable L de type chaine de caractères:

   readln (f, L);

Il s'agit ici d'un accès séquentiel, donc une lecture de ligne se fait nécessairement juste après la ligne lue précédemment.

Juste après l'ouverture du fichier, readln transfère la première ligne du fichier dans variable L.

A la deuxième exécution de cette procédure, L contiendra la 2ème ligne du fichier et de manière générale, après la nième exécution , L contiendra la nième ligne du fichier.

Bien entendu, on provoquera une erreur d'exécution si l'on essaie de lire au delà de la fin de fichier. Par exemple, si le fichier exemple.txt ne contient que 10 lignes, la 11ème exécution de readln (f, L); provoquera une erreur d'exécution.

Pour éviter cette erreur, il faut utiliser la fonction eof qui permet de tester si l'on se trouve en fin de fichier. Par exemple, le code suivant permet de lire toutes les lignes du fichier exemple.txt afin d'effectuer un certain traitement sur chaque ligne:

   Var f : TextFile; L : String;
   begin
   AssignFile (f,'exemple.txt');
   reset (f);

   while not eof (f) do
   begin
      readln (f,L);
      // Traitement de la ligne L
   end;
   CloseFile (f);
   
   end;