Dans un fichier d'organisation indexée, les enregistrements sont identifiés par la valeur de leur clé. La clé est un champ de l'enregistrement.
Trois modes d'accès sont possibles avec les fichiers indexés
random
) : l'accès
(read, write, rewrite, delete
) se fait en
précisant la clé de l'enregistrement.séquential
) l'accès se fait dans l'ordre des
enregistrements. L'instruction start
permet de se repositionner sur un
enregistrement dont on connait la clé.dynamic
) combinaison des deux modes ci-dessus.
environment division.
input-output-section.
file-control.
select F-VOITURES
assign to "/donnees/voitures"
organization indexed
access random
record key PLAQUE.
...
data division.
file section.
fd F-VOITURES.
01 ENR-VOITURE.
02 PLAQUE pic X(10).
02 MARQUE pic X(10).
02 MODELE pic X(10).
02 COULEUR pic X(10).
random
)
Un fichier indexé peut être ouvert dans un des modes suivants :
input
, output
, ou i-o
(abréviation de input-output).
Exemple:
open i-o F-VOITURES.
move "123 ABC 45" to PLAQUE.
read F-VOITURES
invalid key
display "pas de voiture dans le fichier"
not invalid key
display "modele = " MODELE
end-read
move "123 ABC 45" to PLAQUE.
move "SIMCA" to MARQUE.
move "1000" to MODELE.
...
write ENR-VOITURE
invalid key
display "voiture deja enregistree."
not invalid key
display "ok."
end-write.
move "123 ABC 45" to PLAQUE.
read F-VOITURES
invalid key
display "voiture absente"
not invalid key
move "BLEU" to COULEUR
rewrite ENR-VOITURE
invalid key
display "*** ERREUR INTERNE (rewrite)"
not invalid-key
display "ok."
end-rewrite
end-read.
move "123 ABC 45" to PLAQUE.
delete F-VOITURES
invalid key
display "voiture absente"
not invalid key
display "ok"
end-delete.
close F-VOITURES.
séquential
)
En accès séquentiel, l'ouverture peut se faire dans l'un des 4 modes :
input, output, i-o, extend
. Start
permet de se positionner
sur un enregistrement. L'instruction delete
n'est pas
autorisée.
read F-VOITURES next
at end
....
not at end
....
end-read.
Les enregistrements sont lus dans l'ordre dans lequel ils sont stockés dans le fichier. Cet ordre dépend de l'implémentation, ce n'est pas forcément l'ordre des clés.
write ENR-VOITURE.
Le rewrite
ne peut se faire que si on a lu préalablement un
enregistrement.
move "123 XY 89" to PLAQUE.
start F-VOITURES, key = PLAQUE
invalid key
move FAUX to TROUVE
not invalid key
read F-VOITURES next
at end
move FAUX to TROUVE
not at end
move VRAI to TROUVE
end-read
end-start.
Le critère de comparaison peut être =
, >
ou >=
.
dynamic
)
Un fichier dynamic
ne peut pas être ouvert en mode extend
.
Instructions disponibles
open fichier mode
start fichier key .... invalid key ...
read fichier next at end ...
read fichier invalid key ...
write enregistrement invalid key ...
rewrite enregistrement invalid key ...
delete fichier invalid key ...
close fichier
Exemple:
environment division.
input-output-section.
file-control.
select F-VOITURES
assign to "/donnees/voitures"
organization indexed
access random
record key PLAQUE
alternate record key MARQUE with duplicates.
...
procedure division.
...
move "PEUGEOT" to MARQUE.
start F-VOITURES key = MARQUE
invalid key
display "Pas de Peugeot"
not invalid key
move FAUX to FIN-FICHIER
perform until FIN-FICHIER = VRAI
read F-VOITURES next
at end
move VRAI to FIN-FICHIER
not at end
if MODELE = "403" then
display PLAQUE, MODELE
end-if
end-read
end-perform
end-start.