Manipulation de données : STRING, UNSTRING

BoTTom |    Changer de couleur
                       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.
 
 
 
 
 
 


|    Changer de couleur
 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.!
       !_                          _!


|    Changer de couleur
 
   -  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.


|    Changer de couleur
      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:
 
 
 
 
 
 
 
 
 
 


|    Changer de couleur
                 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
 


|    Changer de couleur
        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
 


|    Changer de couleur
 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
 
 
 
 
 
 
 
 
 
 
 


|    Changer de couleur
 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 !
  !_                    _!  !_                    _! !_                   _!
 


|    Changer de couleur
  -  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.


|    Changer de couleur
 
  -  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.
 


|    Changer de couleur
 
 -   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:
 
 
 
 
 
 
 
 
 
 


|    Changer de couleur
                 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
 


|    Changer de couleur
   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





©AF400