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=...» .