Section courante

A propos

Section administrative du site

Types de fichier

À bien des égards, la méthode de structuration la plus simple est la séquence. Dans la profession informatique, le terme généralement accepté pour décrire une séquence est un fichier séquentiel. Le Pascal utilise simplement le mot FILE pour spécifier une structure constituée d'une séquence de composantes - ayant tous le même type. Un fichier de type spécial appelé fichier texte est constitué en une séquence de lignes de caractères de longueur variable et constitue la base de communications lisibles entre les personnes et les systèmes informatiques.

La structure des fichiers

Un ordre naturel des composantes est défini par la séquence, et en tout cas, une seule composante est directement accessible. Les autres composantes sont accessibles en progressant séquentiellement dans le fichier. Le nombre de composantes, appelé la longueur du fichier, n'est pas fixé par la définition du type de fichier. C'est une caractéristique distinguant clairement le fichier du tableau. Un fichier sans composantes est dit vide. Un type de fichier, par conséquent, diffère des types tableau, enregistrement et ensemble car il s'agit d'une structure à accès séquentiel dont les composantes ont tous le même type.

file of type
packed file of type

La déclaration de chaque variable de fichier F introduit automatiquement une variable tampon, notée que F↑ est de type composante. Il peut être considéré comme un accès au fichier à travers lequel on peut soit inspecter (lire) la valeur des composantes existantes, soit générer (écrire) de nouveaux composantes, et étant automatiquement avancé par certaines opérations sur les fichiers. L'affectation n'est pas possible à des variables de fichier entières. La variable tampon est plutôt utilisée pour ajouter des composantes un par un, de manière unidirectionnelle (séquentielle). La variable tampon devient indéfinie si le fichier est positionné au-delà de sa dernière composante.

Le traitement séquentiel, la longueur variable et l'existence d'une variable de tampon suggèrent que les fichiers peuvent être associés au entreposage secondaire et aux périphériques. La manière exacte dont les composantes sont alloués dépend de la mise en oeuvre, mais nous pouvons supposer que seuls certains des composantes sont présents dans l'entreposage principal à tout moment et que seul la composante indiqué par F↑ ou F^ est directement accessible. Lorsque la variable tampon F↑ ou F^ est déplacée au-delà de la fin d'un fichier F, la fonction booléenne prédéclarée EOF(F) renvoie la valeur TRUE, sinon FALSE. Les procédures de base de gestion des fichiers sont :

Nom Description
Reset(F) Cette procédure lance l'inspection (lecture) de F en plaçant le fichier à son début. Si F n'est pas vide, la valeur de la première composante de F est affectée à F↑ et EOF(F) devient FALSE.
Rewrite(F) Cette procédure lance la génération (écriture) du fichier F. La valeur actuelle de F est remplacée par le fichier vide. EOF(F) devient TRUE, et un nouveau fichier peut être écrit.
Get(F) Cette procédure permet de faire passer le fichier aux composante suivante et affecte la valeur de cette composante à la variable tampon F↑. Si aucune composante suivante n'existe pas, alors EOF(F) devient TRUE et F↑ devient indéfini. L'effet de GET(F) est une erreur si EOF(F) est TRUE avant ou avant son exécution ou si F est généré.
Put(F) Cette procédure permet d'ajouter la valeur de la variable tampon F↑ au fichier F. L'effet est une erreur sauf si avant l'exécution le prédicat EOF(F) est TRUE. EOF(F) reste TRUE, et F↑ devient indéfini, Put(F) est une erreur si F est inspecté.

En principe, toutes les opérations de génération et d'inspection de fichiers séquentiels peuvent être entièrement exprimées en termes des quatre opérateurs de fichiers primitifs et du prédicat EOF. En pratique, il est souvent naturel de combiner l'opération d'avancement de la position du fichier avec l'accès à la variable tampon. Nous introduisons donc les deux procédures Read et Write comme suit :

Read(F,X)

(pour X, une variable) équivaut à :

Begin
 X:=F↑; Get(F)
End

ou :

Begin
 X:=F^; Get(F)
End

Et la procédure Write :

Write(F,E)

(pour E, une expression) équivaut à :

Begin
 F↑:=E; Put(F)
End

Les procédures Read et Write sont en fait des procédures spéciales étendues pour accepter un nombre variable de paramètres réels (V1...Vn sont des variables et E1...En sont des expressions) :

Read(F,V1,...,Vn)

équivaut à la déclaration :

Begin
 Read(F,V);...;Read(F,Vn);
End;

Et la procédure Write :

Write(F, E1,...,En);

équivaut à la déclaration :

Begin
 Write(F,E1);...;Write(F,En);
End;

L'avantage de l'utilisation de ces procédures réside non seulement dans la brièveté, mais aussi dans la simplicité conceptuelle, car l'existence d'une variable tampon F↑, parfois indéfinie, peut être ignorée. La variable de tampon peut, cependant, être utile en tant que dispositif d'anticipation. Exemple de déclaration :

Var
 Donnees:File of Integer;
 A:Integer;

Var
 FichierTrace:File of Record
  Couleur:Color;
  Longueur:Natural;
 End;

Var
 Club:File of Personne;
 P:Personne;

Exemple d'instructions avec fichiers :

A:=Donnees↑; Get(Donnees);
Read(Donnees,A);
FichierTrace↑.c:=Red;
FichierTrace↑.Len:=17; Put(FichierTrace);
Club↑:=P; Put(C1ub);
Write(Club,P);

Les fichiers peuvent être locaux pour un programme (ou locaux pour une procédure), ou ils peuvent déjà exister en dehors du programme. Ces derniers sont appelés fichiers externes. Les fichiers externes sont passés en tant que paramètres dans l'entête du programme dans le programme.

Fichiers texte

Les fichiers texte sont des fichiers constitués d'une séquence de caractères subdivisée en lignes de longueur variable. Le type prédéfini Text est utilisé pour déclarer des fichiers texte. On peut considérer le type Text comme étant défini sur le type de base Char étendu par un terminateur de ligne (hypothétique) ou un marqueur de fin de ligne. Par conséquent, le type Text est équivalent à (Packed) file of Char. Ce marqueur de fin de ligne peut être à la fois reconnu et généré par les procédures et fonctions spéciales de fichier texte suivantes :

Nom Description
Writeln(F) Cette procédure permet de terminer la ligne courante du fichier texte F.
Readln(F) Cette procédure permet de passer au début de la ligne suivante du fichier texte F (F↑ devient le premier caractère de la ligne suivante).
Eoln(F) Cette fonction booléenne permet d'indiquer si la fin de la ligne courante dans le fichier texte F a été atteinte. (Si elle vrai, alors F↑ correspond à la position d'un séparateur de ligne, mais F↑ est un blanc.)

Si F est un fichier texte et Ch une variable de caractère, alors :

Write(F,Ch);

est une abréviation de :

Begin
 F↑:=Ch; Put(F)
End

Pour la lecture :

Read(F,Ch);

affecte le caractère à la position actuelle du fichier F ou la valeur de F↑ à Ch, suivi d'un Get(F). Le choix dépend de la mise en oeuvre.

Les Input et Output sont les noms de deux variables de fichier texte standard utilisées comme paramètres de programme pour la lecture et l'écriture lisibles de texte. Elles peuvent être utilisés par des procédures Read, Write, Readln et Writeln.

Le schéma de programme suivant utilise les conventions ci-dessus pour illustrer certaines opérations typiques effectuées sur des fichiers texte. Premièrement, l'écriture d'un fichier texte Y. Supposons que P(C) calcule un caractère (suivant) et l'affecte au paramètre C. Si la ligne courante doit se terminer, une variable booléenne B1 est mise à TRUE; et si le texte doit être terminé, B2 est mis à TRUE.

  1. Var
  2.  Y:Text;
  3.  C:Char;
  4.  B1,B2:Boolean;
  5.  
  6. Procedure P(C:Char);Begin
  7.  { ... }
  8. End;
  9.  
  10.  
  11. BEGIN
  12.   { ... }
  13.  Rewrite(Y);
  14.  Repeat
  15.   Repeat
  16.    P(C);
  17.    Write(Y,C)
  18.   Until B1;
  19.   WriteLn(Y)
  20.  Until B2;
  21. END.

Deuxièmement, lire un fichier texte X. Supposons que Q(C) désigne le traitement d'un caractère (suivant) C. Le R désigne une action à exécuter lors de la rencontre de la fin d'une ligne.

  1. Var
  2.  X:Text;
  3.  C:Char;
  4.  
  5. Procedure Q(C:Char);Begin
  6.  { ... }
  7. End;
  8.  
  9. Procedure R;Begin
  10.  { ... }
  11. End;
  12.  
  13. BEGIN
  14.   { ... }
  15.  Reset(X);
  16.  While Not Eof(X) do Begin
  17.   while not Eoln(X) do
  18.   Begin
  19.    Read(X,C); Q(C)
  20.   End;
  21.   R; ReadLn(X)
  22.  End;
  23. END.

Troisièmement, copie d'un fichier texte X dans un fichier texte Y tout en préservant la structure de ligne de X :

  1. Var
  2.  X,Y:Text;
  3.  C:Char;
  4.  
  5. BEGIN
  6.   { ... }
  7.  Reset(X); Rewrite(Y);
  8.  While Not Eof(X) do Begin
  9.   While Not Eoln(X) do Begin
  10.    Read(X,C); Write(Y,C)
  11.   End;
  12.   Readln(X);WriteLn(Y);
  13.  End;
  14. END.

Remarque



Dernière mise à jour : Dimanche, le 11 novembre 2020