MANIPULATION DES DONNEES ------------------------ LES OPERATIONS DE MANIPULATION DE DONNEES. CES INSTRUCTIONS VONT NOUS PERMETTRE DE REGROUPER PLUSIEURS ZONES EN UNE, D'ECLATER UNE ZONE EN PLUSIEURS, DE RECHERCHER DES CARACTERES DANS UNE ZONE, DE RECHERCHER ET REMPLACER DES CARACTERES DANS UNE ZONE (Voir INSPECT) 1 L'ORDRE STRING L'ORDRE STRING PERMET DE CONCATENER LE CONTENU PARTIEL OU TOTAL DE PLUSIEURS ZONES ET DE PLACER LE RESULTAT DANS UNE SEULE ZONE. |
FORMAT DE L'ORDRE STRING __ __ ( zone-1 I ,zone-2 ! ( zone-3 STRING ( I ! ... DELIMITED BY ( litteral-3 ( littéral-1 I_ ,littéral-2 _! ( SIZE __ __ ! __ __ ! ! ( zone-4 I ,zone-5 ! ( zone-6 ! ! ( I ! ... DELIMITED BY ( litteral-6 ! ! ( littéral-4 I_ ,littéral-5 _! ( SIZE ! !_ _! __ __ ! ! INTO zone-7 ! WITH POINTER zone-8 ! !_ _! __ __ ! ! ! ON OVERFLOW instruction.! !_ _! |
- Chaque littéral doit être un littéral alphanumérique. - Chaque zone doit avoir USAGE DISPLAY sauf zone-8 (POINTER) - Les zones à concaténer sont zone-1, zone-2, zone-4, zone-5 ou les littéraux correspondants - La zone réceptrice est zone-7 qui doit être une zone alphanumérique. élémentaire sans code d'édition spécifié - Les délimiteurs sont zone-3, zone-6 ou les littéraux correspondants ou le mot-clé SIZE. Les délimiteurs spécifient le ou les caractères délimitant la chaine de caractères transférée (les délimiteurs ne sont pas transférés); quand SIZE est spécifié la zone entière est transférée. . - La zone pointeur est zone-8 elle doit être une zone numérique entière assez grande pour contenir une valeur égale à la longueur de la zone réceptrice + 1. |
Le pointeur indiquera la position de début de la chaine de caractères concaténée dans la zone réceptrice. De plus à la fin de l'instruction STRING elle recevra la position du dernier caractère transféré + 1. REGARDONS UN EXEMPLE D'UTILISATION DE CETTE COMMANDE SUPPOSONS LES DONNEES SUIVANTES CODIFIÉES DANS LA DATA DIVISION D'UN PROGRAMME COBOL: |
DEFINITION ! CONTENU DES ZONES ! 01 RCD-01. ! 05 CUST-INFO. ! 10 CUST-NAME PIC X(15). !J.B. SMITH 10 CUST-ADDR PIC X(34). !444 SPRING ST.,bCHICAGO, ILL. 05 BILL-INFO. ! 10 INV-NO PIC X(6). !A14275 10 INV-AMT PIC $$.$$$,99.!$4.736,85 10 AMT-PAID PIC $$.$$$,99.!$2.400,00 10 DATE-PAID PIC X(8). !09/22/76 10 BAL-DUE PIC $$.$$$,99.!$2.336,85 10 DATE-DUE PIC X(8). !10/22/76 ! ! 01 RPT-LINE PIC X(120). ! 01 LINE-POS PIC 999. ! 01 LINE-NO PIC 9(5) VALUE 1. !00001 01 DEC-POINT PIC X VALUE ",". !, APRES L'exécution DES ORDRES CI-DESSOUS |
MOVE 4 TO LINE-POS. STRING LINE-NO SPACE CUST-INFO SPACE INV-NO SPACE DATE-DUE SPACE DELIMITED BY SIZE BAL-DUE DELEMITED BY DEC-POINT INTO RPT-LINE WITH POINTER LINE-POS. Le contenu des zones sera : RPT-LINE : !___00001_!J.B. SMITH!_____444_S!PRING_ST.,!_CHICAGO,_! 123456789 0123456789 0123456789 0123456789 0123456789 !ILL.______!A14725_10/!22/76_$2.3!36________!__________! 0123456789 0123456789 0123456789 0123456789 0123456789 !__________!__________!_! 0123456789 0123456789 0 LINE-POS : 82 |
2 L'ORDRE UNSTRING L'ORDRE UNSTRING PERMET DE DECOUPER LE CONTENU D'UNE ZONE ET DE PLACER CHAQUE PARTIE DE CETTE ZONES DANS PLUSIEURS ZONES. FORMAT DE L'ORDRE UNSTRING |
UNSTRING zone-1 __ __ ! ! ! (zone-2 ! ! ! ! (zone-3 ! ! ! DELIMITED BY ! ALL ! ( ! OR ! ALL ! ! (littéra-2 ! ... ! !_ !_ _! ( littéral-1 !_ !_ _! !__ _! _! __ __ __ __ ! ! ! ! INTO zone-4 ! DELIMITER IN zone-5 ! ! COUNT IN zone-6 ! !_ _! !_ _! __ __ __ __ __ __ ! ! ! ! ! ! ! zone-7 ! DELIMITER IN zone-8 ! ! COUNT IN zone-9 ! ! ... ! !_ _! !_ _! ! -- -- __ __ __ __ __ __ ! ! ! ! ! ! ! WITH POINTER zone-10 ! ! TALLYING IN zone-11 ! ! ON OVERFLOW instruc ! !_ _! !_ _! !_ _! |
- Chaque littéral doit être un littéral non numérique - La zone émettrice est zone-1. Elle doit être une zone alphanumérique. Les données sont transmises de cette zone vers les zones réceptrices. - DELIMITED BY phrase COBOL. Cette phrase spécifie les délimiteurs dans zone-1 qui contrôlent les données transférées. - Les délimiteurs sont zone-2 zone-3 ou leurs littéraux correspondants Chaque zone ou littéral spécifié représente un délimiteur. Pas plus de 30 délimiteurs peuvent être spécifiés. Ils doivent être alphanumériques. - Si un délimiteur contient 2 ou plus caractères, il sera identifié dans la zone émettrice, si les caractères sont contigus et dans la même séquence. - Quand la phrase DELIMITED BY ALL n'est pas spécifiée si plusieurs occurrences contiguës d'un délimiteur sont rencontrées la ou les zones réceptrices correspondantes seront remplies de blanc ou zéro suivant leur définition. |
- Quand la phrase DELIMITED BY ALL est spécifiée, si plusieurs occurrences contiguës d'un délimiteur sont rencontrées les occurrences seront considérées comme un seul délimiteur. - Zones réceptrices sont zone-4 zone-7 ... elles doivent avoir USAGE DISPLAY - DELIMITER IN phrase. Les zones recevant le délimiteur sont zone-7 zone-8. Ces zones recevront le ou les caractères délimiteurs ayant entraine l'envoi de caractères dans une zone réceptrice. Si la condition est la fin de la zone émettrice ces zones seront remplies de blancs. - COUNT IN une valeur égale au nombre de caractères examinés (à l'exclusion des délimiteurs) est déplacée dans la zone. - POINTER la zone sera examinée à partir de la position indiquée par la zone associée. A la fin de l'instruction UNSTRING cette zone contiendra la valeur initiale + le nombre de caractères examinés. |
- TALLYING A la fin de l'instruction UNSTRING la zone associée à TALLYING contiendra sa valeur initiale + le nombre de zones ayant reçues des données. REGARDONS UN EXEMPLE D'UTILISATION DE CETTE COMMANDE SUPPOSONS LES DONNEES SUIVANTES CODIFIEES DANS LA DATA DIVISION D'UN PROGRAMME COBOL: |
DEFINITION ! CONTENU DES ZONES ! 01 ID-SEND PIC X(20) !"123**45678??90ABCDEF" 01 DEL-ID PIC X !"?" 01 ID-R1 PIC X(6) ! 01 ID-R2 PIC X(6) ! 01 ID-R3 PIC X(3) ! 01 ID-R4 PIC X(5) ! 01 ID-D1 PIC X(2) ! 01 ID-D2 PIC X(2) ! 01 ID-D3 PIC X(2) ! 01 ID-C1 PIC 9 !0 01 ID-C3 PIC 9 !0 01 ID-C4 PIC 9 !0 01 ID-P PIC 99 !01 01 ID-T PIC 99 !00 |
Après l'exécution des instructions suivantes: UNSTRING ID-SEND DELIMITED BY DEL-ID OR ALL "*" INTO ID-R1 DELIMITER IN ID-D1 COUNT IN ID-C1 ID-R2 DELIMITER IN ID-D2 COUNT IN ID-C2 ID-R3 DELIMITER IN ID-D3 COUNT IN ID-C3 WITH POINTER ID-P TALLYING IN ID-T . 01 ID-R1 PIC X(6) !"123 " 01 ID-R2 PIC X(6) !"45678 " 01 ID-R3 PIC X(3) !" " 01 ID-D1 PIC X(2) !"*" ALL n'étant pas demandé 01 ID-D2 PIC X(2) !"?" pour ? sa présence est 01 ID-D3 PIC X(2) !"?" notée 2 fois 01 ID-C1 PIC 9 !3 Mais la 2eme fois il 01 ID-C2 PIC 9 !5 n'y a aucun caractère 01 ID-C3 PIC 9 !0 <- à gauche 01 ID-P PIC 99 !16 lg de ID-SEND + 1 01 ID-T PIC 99 !03 Nb de variables |