IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Le langage Pascal


précédentsommairesuivant

Les entrées / sorties

Sur la console

La procédure WRITELN permet d'afficher des résultats sur l'écran. Les différents arguments sont affichés les uns après les autres sur la même ligne. Le curseur est ensuite automatiquement mis en début de ligne suivante. Pour éviter ceci, on peut utiliser WRITE, qui s'utilise comme WRITELN mais le curseur est laissé derrière le dernier caractère. De même, READ fonctionne comme READLN, excepté le curseur qui reste sur la ligne. (7)

WRITE et WRITELN acceptent le "formatage" : on peut imposer le nombre de caractères utilisés pour chaque variable. Soit I entier, R réel : WRITE(I:5,' ',R:7:2) écrira I sur 5 caractères, et R sur 7 caractères dont 2 après la virgule. Si les valeurs sont trop petites pour entrer dans le format, des blancs sont mis devant. Si elles sont trop grandes, le format est ignoré.

Sur fichier

Un fichier est un ensemble de données, écrites sur un "support" lisible par l'ordinateur (disquette, cartes perforées,...), et regroupées sous un nom. Un fichier peut contenir des caractères (fichier texte), des programmes, des valeurs (fichier de données).

Etudions l'exemple suivant :

 
Sélectionnez
PROGRAM recopier (input,output); 
VAR
  fic_ent, fic_sor : file of real; 
  x : real; 
BEGIN
  assign(fic_ent,'fichier1'); { non standard }
  reset(fic_ent); 
  assign(fic_sor,'fichier2'); { non standard }
  rewrite(fic_sor); 
  while not eof(fic_ent) do 
    begin 
      read(fic_ent,x); 
      write(fic_sor,x) 
    end; 
  close(fic_ent); 
  close(fic_sor) 
END.

On déclare les fichiers par :

 
Sélectionnez
VAR nomfic : FILE OF type_du_contenu

Un fichier peut contenir des éléments de n'importe quel type (aussi compliqué soit-il, même tableaux), mais tous les enregistrements du fichier doivent être du même type.

Avant d'utiliser le fichier, il faut relier son identificateur au nom effectif du fichier par ASSIGN. Ici, fic_ent correspondra à un fichier qui aura pour nom FICHIER1 sur la disquette. ASSIGN n'est pas une fonction standard, d'autres compilateurs utilisent OPEN.

Puis il faut préciser si l'on va lire ou écrire sur le fichier, par RESET ou REWRITE. Ceci positionne en début du fichier.

On écrit dans le fichier par

 
Sélectionnez
WRITE(nomfic,liste_des_variables);

Idem pour READ.

Il ne faut pas oublier de fermer le fichier (CLOSE) quand on n'en a plus besoin. CLOSE est nécessaire également si l'on veut refaire un nouvel ASSIGN sur le même fichier.

La fonction standard EOF(nomfic) est true quand on arrive en fin de fichier (End Of File).

Remarque : Lors de la définition initiale du Pascal, on devait ouvrir les fichiers avant d'appeler le programme. Les fichiers étaient des variables globales déclarées en arguments du programme (et donc passés du système d'exploitation au programme). Nous les déclarons maintenant dans le programme, les deux seuls fichiers donnés en paramètres du programme restant input et output. (8)

Les fichiers texte

Le principal problème des fichiers précédents est que tous les enregistrements sont du même type. De plus, ils ne sont pas directement imprimables ni visibles par un traitement de texte. On y remédie par les fichiers texte (aussi appelés fichiers formatés), déclarés par :

 
Sélectionnez
VAR nomfic : TEXT;

Ce sont des fichiers de caractères, et se comportent comme l'écran ou le clavier - qui sont d'ailleurs les fichiers texte input et output utilisés automatiquement si on ne précise pas de nomfic dans les READ(ln) et WRITE(ln). On a aussi les mêmes limitations (écriture d'entiers, réels et chaînes de caractères seulement).

 
Sélectionnez
PROGRAM lire (input,output,fic); 
TYPE
  chaine = array [1..80] of char; 
VAR
  fic : text; 
  ligne : chaine; 
BEGIN
  assign(fic,'texte'); 
  rewrite(fic); 
  writeln('Tapez votre texte, il sera enregistré dans le fichier TEXTE '); 
  writeln('Tapez FIN pour arrêter'); 
  repeat 
    readln(ligne); 
 writeln(fic,ligne) 
  until ligne = 'FIN'; 
  close(fic) 
END.

Extensions non standard

Accès direct

La plupart des compilateurs acceptent la procédure SEEK(nomfic,position), qui permet de se positionner n'importe où dans le fichier (sans être obligé de lire dans l'ordre tous les éléments). Ceci n'est évidement possible que si la taille des éléments est constante, donc pour tous les fichiers exceptés ceux du type TEXT, puisque les lignes n'y sont pas de longueur constante. L'accès à une information est donc beaucoup plus rapide (à condition de connaître sa position). On appelle ceci l'accès direct à un fichier, par opposition à l'accès séquentiel prévu en standard.

SEEK est d'autant plus utile que RESET autorise la lecture et l'écriture des fichiers à accès direct (REWRITE, par contre, efface tout le contenu du fichier, on ne peut donc plus qu'écrire).

Imprimante

Pour accéder à l'imprimante, deux solutions :

  • Ouvrir un fichier texte sur disque, le remplir, et lorsque le programme est terminé le copier (par le DOS) sur imprimante;
  • Utiliser un nom de fichier prédéfini correspondant à l'imprimante. En Turbo Pascal, c'est LST. Par exemple : writeln(lst,'COUCOU'). LST n'a pas besoin d'être ouvert en Turbo Pascal (tout comme output).

Autres

Turbo Pascal permet beaucoup d'autres opérations sur les fichiers (Delete, Rename, Path...) qui ne sont pas standard. Si vous les utilisez, rappelez-vous qu'elles ne fonctionneront pas avec un autre compilateur (Microsoft par exemple) ni sous un autre système d'exploitation (Unix par exemple).

Exercicefichier :
Ecrire la procédure qui lit le fichier "annuaire" afin de rendre opérationnel l'exercice tel. Modifier ce programme pour permettre l'entrée et la modification du fichier annuaire.
Voir la correction


précédentsommairesuivant
Note de la rédaction : READ peut poser des problèmes lors de lectures successives au clavier car elle n'interprète pas le "Enter".
Note de la rédaction : Cette obligation a maintenant disparu.

Utilisation de ce document libre pour tout usage personnel. Utilisation autorisée pour tout usage public non commercial, à condition de citer son auteur (Patrick Trau, IPST, Université Louis Pasteur Strasbourg) et de me signaler tout usage intensif. Utilisation commerciale interdite sans accord écrit de ma part.