Next Previous Contents

3. Fichiers indexés

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

3.1 Déclaration d'un fichier

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

3.2 Accès aléatoire (random)

open

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.

read

        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

write

        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.

rewrite

        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.

delete

        move "123 ABC 45" to PLAQUE.
        delete F-VOITURES
        invalid key
          display "voiture absente"
        not invalid key
          display "ok"
        end-delete.

close

        close F-VOITURES.

3.3 Accès séquentiel (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

        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, rewrite

       write ENR-VOITURE.

Le rewrite ne peut se faire que si on a lu préalablement un enregistrement.

start

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

3.4 Accès dynamique (dynamic)

Un fichier dynamic ne peut pas être ouvert en mode extend.

Instructions disponibles

3.5 Clés multiples

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.


Next Previous Contents