Next Previous Contents

6. Annexe : entrées-Sorties directes formattées

Un fichier en accès direct peut être assimilé (approximativement) à un tableau d'enregistrements. L'accès (lecture ou écriture) se fait donc toujours en précisant le numéro d'enregistrement (un entier positif).

Exemple :

            PROGRAM  DEMOAD
 C
 C Demonstration de l'acces direct.
 C
 C le fichier AD.DAT contient des enregistrement de 20 caractères
 C l'utilisateur peut Voir ou Modifier chaque enregistrement.
 C 
            CHARACTER*1  COMMANDE
            CHARACTER*20 ENREG

            INTEGER  NUMERO
 C
 C
 C Ouverture du fichier AD.DAT en accès direct.
 C
            OPEN  ( 1 , FILE = 'AD.DAT',
      S               ACCESS = 'DIRECT',
      S                 FORM = 'FORMATTED'
      S                 RECL = 20          )
 C
 C On demande la commande ...   
 C
 1000       WRITE  (*,*) 'V(oir), M(odifier), S(top)'
            READ (*,1010) COMMANDE
 C
 C On regarde la commande ...
 C
            IF  (COMMANDE.EQ.'V')  THEN
 C
 C .... Voir ...
 C
                  WRITE  (*,*) 'Voir quel numéro ?'
                  READ  (*,*) NUMERO
                  READ (1,100,REC=NUMERO,ERR=1100) ENREG
 100              FORMAT  (A20)                 
                  WRITE  (*,*) 'Enreg',NUMERO,'=',ENREG
                  GOTO  1000
 C
 1100             WRITE  (*,*) 'Il n''y a pas d''enregistrement',
      S                              'numero',NUMERO                 
                  GOTO 1000
 C
             ELSE IF (COMMANDE.EQ.'M')  THEN
 C
 C .... Modifier ...
 C
                  WRITE  (*,*) 'Modifier quel numéro ?'
                  READ  (*,*) NUMERO
                  WRITE  (*,*) 'Mettre quoi à la place ?'
                  READ  (*,100) ENREG
                  WRITE (1,100,REC=NUMERO,ERR=1200) ENREG
                  GOTO  1000
 C
 1200             WRITE  (*,*) 'On ne peut pas modifer',
      S                   'l''enregistrement numero',NUMERO
                  GOTO  1000
 C
 C           ELSE IF  (COMMANDE.EQ.'S')  THEN
 C
 C .... stop ...
 C
 C                CLOSE  (1)
 C                STOP  'Ok.'
 C
             ELSE
 C
 C .... autre commande ...
 C
                  WRITE  (*,*) 'Je ne comprends que V,C ou S.'
                  GOTO  1000
 C
 C           ENDIF
 C
             END

Pour l'ouverture d'un fichier en accès direct, il faut obligatoirement donner les clauses « ACCESS='DIRECT',FORM='FORMATTED' » et indiquer la longueur de l'enregistrement (en octets) par « RECL=...» qui doit correspondre à la longueur des formats utilisés avec ce fichier.

Dans les ordres READ et WRITE, la clause «REC=...» permet de préciser le numéro de l'enregistrement que l'on veutlire ou écrire. Attention, toute tentative de lecture d'unenregistrement absent se solde par une erreur, que l'on peut (heureusement) récupérer par l'option «ERR=...» .


Next Previous Contents