COMPLEMENTS SUR LES TABLES 1) INDEXATION VOUS SAVEZ ACCEDER A UN POSTE D'UNE TABLE grâce A UN INDICE (ZONE NUMERIQUE SANS LIEN PARTICULIER AVEC LA TABLE) NOUS POUVONS AUSSI UTLISER L'INDEXATION POUR ACCEDER AUX ELEMENTS D'UNE TABLE. UN INDEX EST UNE ZONE DE MEMOIRE PERMETTANT D'IDENTIFIER L'ELEMENT D'UNE TABLE. SON CONTENU EST GERÉ PAR L'ORDINATEUR QUI Y RANGE L'ADRESSE REELLE DE L'ELEMENT, CELA PERMET D'ACCELERER LES RECHERCHES EN TABLE. UN INDEX DOIT être DEFINI DANS LA CLAUSE OCCURS PAR LA CLAUSE INDEXED BY. IL NE PEUT être MODIFIE QUE PAR LES INSTRUCTIONS SET, SEARCH, PERFORM. |
2 LA CLAUSE OCCURS TROIS OPTIONS PERMETTENT D'ETENDRE LES FONCTIONS DE CETTE CLAUSE. 2.1 INDEXED BY CETTE OPTION PERMET D'ASSOCIER A UNE TABLE UN INDEX. LE NOM DE L'INDEX NE DOIT PAS être DEFINI A UN AUTRE ENDROIT DE LA DATA DIVISION, IL EST GERE PAR LE COMPILATEUR. Exemple: 01 TB-1. 05 EL-1 PIC X(5) OCCURS 10 INDEXED BY IND-1. MOVE EL-1(IND-1) TO ZONE. |
2.2 L'OPTION KEY CETTE OPTION PERMET D'INDIQUER QUE LES DONNEES RANGEES DANS LA TABLE SONT CLASSEES PAR ORDRE CROISSANT OU DECROISSANT SELON LA VALEUR CONTENUE DANS UNE OU PLUSIEURS ZONES APPARTENANT A LA TABLE. 01 TB-2. 05 EL-2 PIC OCCURS 10 ASCENDING KEY D2 D3 INDEXED BY IND-2. 10 D1 PIC X(10). 10 D2 PIC X(5). 10 D3 PIC X(55). |
2.3 L'OPTION DEPENDING ON CETTE OPTION S'EMPLOIE LORSQUE L'ON NE PEUT DETERMINER DIRECTEMENT LE NOMBRE D'ELEMENTS CONTENUS DANS UNE TABLE. Format OCCURS litteral-1 TO littéral-2 TIMES DEPENDING ON zone-1. CETTE FONCTION INDIQUE QUE LE NOMBRE D'ELEMENTS DÉFINI PAR LA CLAUSE OCCURS EST VARIABLE. 77 NB PIC 9(3). 01 TB3. 05 ELS OCCURS 10 TO 100 DEPENDING ON NB. 10 DON4 PIC X(10). 10 DON5 PIC X(20). MOVE 75 TO NB. |
3 L'INSTRUCTION SET. CETTE INSTRUCTION PERMET DE MANIPULER LES DONNEES INDEX EN LEUR AFFECTANT UNE VALEUR, OU EN INCREMENTANT OU DECREMENTANT LEUR VALEUR. 1er format __ __ ( zone-1 ! zone-2 ------ ! ( zone-3 SET ( ! ! TO ( litteral-1 ( index-1 ! index-2 ------ ! ( index-3 TOUS LES IDENTIFICATEURS DOIVENT être DES NOMS D'INDEX OU DES VALEURS NUMERIQUES ENTIERES SI LA ZONE PRECEDANT LE TO EST UNE ZONE NUMERIQUE ET LA ZONE SUIVANT LE TO EST UNE ZONE INDEX LA ZONE NUMERIQUE RECEVRA LE RANG REFERENCÉ PAR LA ZONE INDEX. |
SET IND-1 TO 1. SET ZONE TO IND-1. ZONE sera égal à 1. 2ème format __ __ ( zone-1 ! zone-2 ------ ! UP BY ( zone-3 SET ( ! ! ( litteral-1 ( index-1 ! index-2 ------ ! DOWN BY ( index-3 !_ _! Le contenu des zones ou index placés avant le TO sont incrémentés (UP BY) ou décrémentés (DOWN BY) de la valeur correspondant au rang indiqué par la valeur des zones constantes ou index placés après le TO |
4 L'INSTRUCTION SEARCH CETTE INSTRUCTION PERMET DE RECHERCHER DANS UNE TABLE INDEXÉE UN ÉLÉMENT SATISFAISANT A UNE CONDITION INDIQUÉE ET D'ASSOCIER A L'INDEX LE RANG DE L'ÉLÉMENT SATISFAISANT CETTE CONDITION. Format 1 __ __ __ __ ! ( zone-2 ! ! ! SEARCH zone-1 ! VARYING ( ! AT END instruction COBOL ! ! !_ (index-1 !_ _! _! ( instruction COBOL WHEN condition-1 ( ( NEXT SENTENCE __ __ ! ( instruction COBOL ! ! WHEN condition-2 ( ! ... ! ( NEXT SENTENCE ! !_ _! |
zone-1 désigne une table avec la clause INDEXED BY zone-2 doit être une zone numérique entière LORSQUE L'ON EXÉCUTE UNE INSTRUCTION SEARCH LA RECHERCHE COMMENCE PAR LE POSTE INDIQUÉ DANS L'INDEX (si l'index indique le rang 2 la recherche commencera au 2ème poste), SI L'INDEX A UNE VALEUR > AU NOMBRE DE POSTES DANS LA TABLE LA RECHERCHE S'ARRETE IMMEDIATEMENT ET SI LA CLAUSE AT END EST SPECIFIEE IL EXÉCUTERA L'INSTRUCTION AUTREMENT, IL SE POSITIONNERA SUR L'ÉLÉMENT INDIQUE PAR L'INDEX (si VARYING non spécifié il utilise l'index associé à la table) ET ÉVALUE LES CONDITIONS SPECIFIÉES DANS L'ORDRE SPECIFIÉ. SI AUCUNE N'EST SATISFAITE, IL CONTINUE LA RECHERCHE EN PRENANT L'ÉLÉMENT SUIVANT ET AINSI DE SUITE JUSQU'A CE QU'UNE CONDITION SOIT SATISFAITE OU QUE LE RANG INDIQUE PAR L'INDEX SOIT > AU NOMBRE D'ÉLÉMENTS DANS LA TABLE. SI LA CONDITION EST SATISFAITE IL ARRETE LA RECHERCHE ET EXÉCUTE L'INSTRUCTION PLACÉE APRES LE WHEN. |
Ex: 01 ENTREE. 05 E-PROD PIC 9(4). 05 E-QTE PIC 9(5). 01 S-PRIX PIC 9(7)V99. 01 TB-PROD. 05 PRODUIT OCCURS 100 INDEXED BY IND-PROD. 10 NUM-PROD PIC 9(4). 10 PRI-PROD PIC 9(3)V99. SET IND-PROD TO 1. SEARCH PRODUIT AT END DISPLAY 'PRODUIT INCONNU' WHEN NUM-PROD(IND-PROD) = E-PROD COMPUTE S-PRIX = E-QTE * PRI-PROD(IND-PROD). |
Format 2 __ __ ! ! SEARCH ALL zone-1 !AT END instruction COBOL ! !_ _! ( instruction COBOL WHEN condition-1 ( ( NEXT SENTENCE SEARCH ALL PERMET UNE RECHERCHE PLUS RAPIDE DES ELEMENTS DANS LA TABLE ELLE NE NECESSITE PAS DE POSITIONNER L'INDEX A UNE VALEUR (généralement la recherche est dichotomique) PAR CONTRE LA TABLE DOIT UTILISE LA CLAUSE ASCENDING KEY OU DECENDING KEY. Une seule condition peut être indiquée ne comportant que l'EGALITE. |