4.7.1 Principes généraux
Une table est un groupe de données composé d’éléments simples ayant tous des attributs identiques. Les tables sont utilisées pour mettre en mémoire un certain nombre d’informations dans le but de pouvoir les retrouver plus facilement.
Par exemple : trouver le prix de vente d’un article connaissant son code, trouver le nom d’un employé en fonction de son matricule.
La taille d’un tableau n’est pas illimitée, les contraintes viennent du type d’ordinateur utilisé sur PC OCCURS 1300 et il faut encore tenir compte des longueurs des variables utilisées.
(PRUDENCE).
La recherche d’un élément en table se fait en affectant un numéro d’ordre à chaque élément de la table. Ce numéro d’ordre est appelé INDICE.
Exemple :
01 TABLE.
02 QUANTITE OCCURS 5 PIC 999
Ce qui représente une table à 1 dimension de 5 éléments de 3 caractères numériques.
Quantité 1 | Quantité 2 | Quantité 3 | Quantité 4 | Quantité 5 |
La quantité 4 de la table sera désignée par l’expression QUANTITE(4), et si nous désirons ajouter un nombre QACHAT à la quantité 2, nous devons écrire : ADD QACHAT TO QUANTITE (2).
01 PAYS.
02 Province OCCURS 10 TIMES.
03 SalesValue PIC 9(8)V99.
03 NumSold PIC 9(7).
4.7.2 Utilisation des indices
L’indice peut être utilisé sous forme d’un nombre ou d’une variable.
Sous forme de nombre : on écrit QUANTITE (3) pour atteindre à chaque fois l’élément 3.
Sous forme de variable : on lira par exemple l’indice N qui peut avoir les valeurs 1 à 5 puis la quantité est atteinte en écrivant QUANTITE (N).
Comme toute variable, l’indice doit être déclaré en DATA-DIVISION.
Il peut être tout simplement une zone de fichier entrée qui sert occasionnellement d’indice.
Remarque : la parenthèse gauche doit toujours être précédée par un espace à gauche, mais pas la parenthèse droite.
4.7.3 Tables à plusieurs indices
Cobol autorise des tables à 3 indices. Dans l’exemple suivant, on recherche les points d’un examen de math en deuxième année d’un étudiant d’info.
01 TABLE-ETUDIANT.
02 LANNEE OCCURS 3.
03 CODE-ETUDIANT OCCURS 55.
04 LABRANCHE OCCURS 15 PIC 99.
L’ensemble des points par étudiant se retrouve dans TABLE-ETUDIANT, il s’agit d’une suite continue de caractères numériques. Il n’autorise pas l’usage d’un indice.
LANNEE, spécifie si les points recherchés sont ceux d’un étudiant de première, seconde ou troisième année. L’utilisation de LANNEE (2) nous donne une longue série de chiffres qui correspond à 55 x 15 càd les 15 résultats des 55 étudiants de seconde.
Cette zone autorise l’usage d’un indice et d’un seul.
CODE-ETUDIANT, donne pour un étudiant d’une année l’ensemble des points obtenus pour cette année la. L’utilisation de CODE-ETUDIANT (2, 17) nous donne une série de 15 chiffres de 2 caractères, cette série représente pour l’étudiant n° 17 de seconde année l’ensemble des points
obtenus. Cette zone autorise l’usage de 2 indices et de toujours 2 indices.
LABRANCHE, donne pour un étudiant d’une année les points obtenus dans une branche.
L’utilisation de LABRANCHE (2, 17, 4) nous donne les points de la quatrième matière de l’étudiant n° 17 de 2ème année , il s’agit d’un nombre de 2 positions en PIC 99. Cette zone autorise l’usage de 3
indices et de toujours 3 indices.
Les points du premier examen du deuxième étudiant de troisième année s’écrira :
LABRANCHE (3, 2, 1)
Pour déplacer l’ensemble des points de l’étudiant 5 de première année on écrira :
CODE-ETUDIANT (1, 5)
Pour déplacer l’ensemble des points des étudiants de première année on écrira :
LANNEE (1)
4.7.4 La clause OCCURS
OCCURS n TIMES, spécifie qu’un groupe ou un élément se reproduit n fois. Dans notre exemple nous avions considéré 3 années de 55 étudiants ayant au maximum 15 banches. Cette clause ne peut pas s’écrire à un niveau 1. Pour définir une table à plusieurs niveaux, chaque OCCURS doit être de niveau inférieur sans quoi on obtient plusieurs tables à 1 niveau.
Le mot TIMES est facultatif.
Une clause VALUE spécifiée pour un OCCURS initialise chaque position à cette valeur.
Pour initialiser une table à des valeurs différentes on doit utiliser la clause REDEFINES sous la forme suivante :
01 ENSEMBLE.
02 FILLER PIC X(9) VALUE "JANVIER".
02 FILLER PIC X(9) VALUE "FEVRIER".
02 FILLER PIC X(9) VALUE "MARS".
02 FILLER PIC X(9) VALUE "AVRIL".
02 FILLER PIC X(9) VALUE "MAI".
02 FILLER PIC X(9) VALUE "JUIN".
02 FILLER PIC X(9) VALUE "JUILLET".
02 FILLER PIC X(9) VALUE "AOUT".
02 FILLER PIC X(9) VALUE "SEPTEMBRE".
02 FILLER PIC X(9) VALUE "OCTOBRE".
02 FILLER PIC X(9) VALUE "NOVEMBRE".
02 FILLER PIC X(9) VALUE "DECEMBRE".
01 TABLE-MOIS REDEFINES ENSEMBLE.
02 MOIS OCCURS 12 PIC X(9).