13. L’INSTRUCTION SET

Syntaxe de l’instruction SET :

SET

Un nombre entier est un entier numérique > 0 et non signé.
Les index-names sont définis par des clauses INDEXED BY.

Cette instruction signifie :

METTRE nom-index-1 A LA VALEUR CORRESPONDANT A index-name-3 avec le numéro d’occurrence nombre entier

Nombre entier représente un numéro d’occurrence de l’élément qu’on désire repérer.

Exemple : SET INDEX1 TO 5, signifie que nous voulons utiliser le 5ème élément de la table. Ce n’est pas la valeur 5 que nous retrouverons dans INDEX1 mais l’adresse correspondant au déplacement de l’élément par rapport au début de la table.
Lorsque index-name-3 est utilisé, il a ajustement de index-name-1 index-name-2 … sur indexname-3 et COBOL traduit le contenu de index-name-3 en occurrence avant de calculer les valeurs de index-1 index-2.

   01 TABLE.
      02 T1 OCCURS 20 INDEXED BY IND1.
         03 T2 OCCURS 30 INDEXED BY IND2.
            04 T3 OCCURS 40 INDEXED BY IND3 PIC 9.

Pour utiliser T3 (5,6,5),    SET IND3 TO 5
                      SET IND1 TO IND3
                      SET IND2 TO 6

Format 2 :

Cette instruction permet avec UP BY d’augmenter ou de diminuer DOWN BY la valeur de indexname-1 et de index-name-2 d’une valeur de nombre ou de index-3. INDEX-3 ne doit pas appartenir à la table de index-1 ou index-2 car le COBOL traduit sa valeur en nombre d’occurrences.

Il est à prévoir que durant l’exécution du programme nous devions retenir une valeur particulière d’index. Dans ce cas nous serons amenés à déclarer une zone particulière d’usage réservé aux INDEX.

01 INDEX-DE-RESERVE USAGE IS INDEX.

Cette clause est utilisée à n’importe quel niveau en DATA DIVISION. Il ne sera pas fait usage de la clause PICTURE puisque cette donnée contiendra une adresse pour notre index.
Lorsque cette clause est spécifiée pour un groupe, ce sont toutes les zones élémentaires du groupe qui sont considérées comme d’usage index.

Pour sauvegarder la valeur de IND2 :
SET INDEX-DE-RESERVE TO IND2

Pour lui retourner sa valeur plus tard :
SET IND2 TO INDEX-DE-RESERVE