précédent suivant haut Contents

LES ENTREES / 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.

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 de textes), des programmes, des valeurs (fichier de données).

Etudions l'exemple suivant :

  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 :

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 écrire ou lire sur le fichier par RESET ou REWRITE. Ceci positionne en début du fichier.

On écrit dans le fichier par 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).

Rq : 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.

LES FICHIERS DE 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 textes ou un programme écrit dans un autre langage. On y remédie par les fichiers texte (aussi appelés fichiers formatés), déclarés par :

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 text 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).

ex : 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

ACCES 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'ACCES DIRECT à un fichier, par opposition à l' ACCES SEQUENTIEL 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 TEXT 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, c'est LST. ex : writeln(lst, 'COUCOU'). LST n'a pas besoin d'être ouvert en TURBO (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 ex) ni sous un autre système d'exploitation (Unix par ex).

EXERCICE (fichier) 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.


précédent suivant haut Contents