Archives de catégorie : COBOL Exemple

Exemple – STRING

Programme utilisant le STRING:

EXEMPLE 1

IDENTIFICATION DIVISION.
PROGRAM-ID.  STRING.
AUTHOR.      LA COMMUNAUTE DU COBOL.

ENVIRONMENT DIVISION.                                            
CONFIGURATION SECTION.                                           
SPECIAL-NAMES.                                                   
    DECIMAL-POINT IS COMMA. 

DATA DIVISION.
WORKING-STORAGE SECTION.

01  WS-AUXILIARES.
    05  WS-DEL           PIC X(001)     VALUE '&'. 
    05  PT1              PIC 9(005)     VALUE 1. 
    05  CHAMP-1          PIC X(006)     VALUE 'AB*CD'. 
    05  CHAMP-2          PIC X(006)     VALUE 'JKL*MN'. 
    05  CHAMP-3          PIC X(006)     VALUE 'S*TUV'. 
    05  CAMPO-123        PIC X(020)     VALUE SPACES.
    05  WS-NOM-01        PIC X(020)     VALUE 'La'.
    05  WS-NOM-02        PIC X(020)     VALUE 'Communaute'.
    05  WS-NOM-03        PIC X(020)     VALUE 'Du'.
    05  WS-NOM-04        PIC X(020)     VALUE 'Cobol'.
    05  WS-NOM-COMPLET   PIC X(080)     VALUE SPACES.

PROCEDURE DIVISION.

001-INIT.

    STRING                                                    
          WS-NOM-01 DELIMITED BY SPACES ' ' DELIMITED BY SIZE 
          WS-NOM-02 DELIMITED BY SPACES ' ' DELIMITED BY SIZE 
          WS-NOM-03 DELIMITED BY SPACES ' ' DELIMITED BY SIZE 
          WS-NOM-04                       
      INTO  
          WS-NOM-COMPLET                                     
    END-STRING
    DISPLAY 'Nom complet: ' WS-NOM-COMPLET

* Resultat du test:

* Nom complet: La Communaute Du Cobol

    STRING CHAMP-1 CHAMP-2 CHAMP-3 
           DELIMITED BY "*" 
      INTO CHAMP-123
    END-STRING
    DISPLAY 'CHAMP-123: ' CHAMP-123

* Resultat du test:

* CHAMP-123: ABJKLS         

    STRING CHAMP-1 CHAMP-2 CHAMP-3 
           DELIMITED BY "*" 
      INTO CHAMP-123 
           POINTER PT1
    END-STRING
    DISPLAY 'CHAMP-123: ' CHAMP-123
    DISPLAY 'PT1      : ' PT1

* Resultat du test:

* CHAMP-123: ABJKLS              
* PT1      : 00007

    STRING CHAMP-1 CHAMP-2 CHAMP-3 
           DELIMITED BY "*" 
      INTO CHAMP-123 
           POINTER PT1
    END-STRING
    DISPLAY 'CHAMP-123: ' CHAMP-123
    DISPLAY 'PT1      : ' PT1

* Resultat du test:

* CHAMP-123: ABJKLSABJKLS                      
* PT1      : 00013

    MOVE SPACES   TO CHAMP-123 
    MOVE 'AB&XYZ' TO CHAMP-1
    MOVE 'LMN&OP' TO CHAMP-2
    MOVE 'ST&V  ' TO CHAMP-3

    STRING CHAMP-1 CHAMP-2 CHAMP-3 
           DELIMITED BY WS-DEL 
      INTO CHAMP-123
    END-STRING
    DISPLAY 'CHAMP-123: ' CHAMP-123

* Resultat du test:
* CHAMP-123: ABLMNST             

    STOP RUN.

EXEMPLE 2

IDENTIFICATION DIVISION.
PROGRAM-ID. STRING.
AUTHOR.     LA COMMUNAUTE DU COBOL.

DATA DIVISION.
FILE SECTION.

WORKING-STORAGE SECTION.

01          WS-DATE-HEURE.
    05      WS-FUNCTION-CURRENT-DATE PIC X(14).

01          WS-DATE-HEURE-FORMAT.
    05      WS-DATE-FORMAT           PIC X(10).
    05      WS-HEURE-FORMAT          PIC X(08).

PROCEDURE DIVISION.

    MOVE FUNCTION CURRENT-DATE TO WS-FUNCTION-CURRENT-DATE
    DISPLAY "WS-DATE-HEURE - " WS-FUNCTION-CURRENT-DATE
	
    STRING
           WS-FUNCTION-CURRENT-DATE (07:2) "/"
           WS-FUNCTION-CURRENT-DATE (05:2) "/"
           WS-FUNCTION-CURRENT-DATE (01:4)
      INTO WS-DATE-FORMAT	
    END-STRING
	     
    STRING
           WS-FUNCTION-CURRENT-DATE (09:2) ":"
           WS-FUNCTION-CURRENT-DATE (11:2) ":"
           WS-FUNCTION-CURRENT-DATE (13:2)
      INTO WS-HORA-FORMATADA
    END-STRING

    DISPLAY "WS-DATE-FORMAT  : " WS-DATE-FORMAT
    DISPLAY "WS-HEURE-FORMAT : " WS-HEURE-FORMAT

    STOP RUN.
Resultat:
WS-DATE-HEURE - 20220302011708
WS-DATE-FORMAT  : 02/03/2022
WS-HEURE-FORMAT : 01:17:08

Exemple – SUBSTRACT

Programme utilisant le SUBSTRACT :

IDENTIFICATION DIVISION.
PROGRAM-ID.  SUBTRACT.
AUTHOR.      LA COMMUNAUTE DU COBOL.

ENVIRONMENT DIVISION.                                            
CONFIGURATION SECTION.                                           
SPECIAL-NAMES.                                                   
    DECIMAL-POINT IS COMMA. 

DATA DIVISION.
WORKING-STORAGE SECTION.

01  WS-AUXILIARES.
    05  VALEUR-1          PIC S9(006)    VALUE ZEROES. 
    05  VALEUR-2          PIC S9(006)    VALUE ZEROES. 
    05  VALEUR-3          PIC S9(006)    VALUE ZEROES. 

PROCEDURE DIVISION.

001-INIT.

    MOVE  8 TO VALEUR-1
    SUBTRACT 3 FROM VALEUR-1	
    DISPLAY 'VALEUR-1: ' VALEUR-1

* Resultat du test:
* VALEUR-1: +000005

    MOVE  3 TO VALEUR-1
    MOVE  8 TO VALEUR-2
    SUBTRACT VALEUR-1 FROM VALEUR-2	
    DISPLAY 'VALEUR-1: ' VALEUR-1
    DISPLAY 'VALEUR-2: ' VALEUR-2

* Resultat du test:
* VALEUR-1: +000003
* VALEUR-2: +000005

    MOVE  6 TO VALEUR-1
    MOVE -7 TO VALEUR-2
    SUBTRACT VALEUR-1 FROM VALEUR-2	
    DISPLAY 'VALEUR-1: ' VALEUR-1
    DISPLAY 'VALEUR-2: ' VALEUR-2

* Resultat du test:
* VALEUR-1: +000006
* VALEUR-2: -000013

    MOVE -6 TO VALEUR-1
    MOVE -7 TO VALEUR-2
    SUBTRACT VALEUR-1 FROM VALEUR-2	
    DISPLAY 'VALEUR-1: ' VALEUR-1
    DISPLAY 'VALEUR-2: ' VALEUR-2

* Resultat du test:
* VALEUR-1: -000006
* VALEUR-2: -000001

    MOVE -6 TO VALEUR-1
    MOVE  7 TO VALEUR-2
    SUBTRACT VALEUR-1 FROM VALEUR-2	
    DISPLAY 'VALEUR-1: ' VALEUR-1
    DISPLAY 'VALEUR-2: ' VALEUR-2

* Resultat du test:
* VALEUR-1: -000006
* VALEUR-2: +000013

    MOVE 30 TO VALEUR-1
    MOVE 20 TO VALEUR-2
    MOVE 40 TO VALEUR-3
    SUBTRACT 60 VALEUR-1 VALEUR-2 FROM VALEUR-3	
    DISPLAY 'VALEUR-1: ' VALEUR-1
    DISPLAY 'VALEUR-2: ' VALEUR-2
    DISPLAY 'VALEUR-3: ' VALEUR-3

* Resultat du test:
* VALEUR-1: +000030
* VALEUR-2: +000020
* VALEUR-3: -000070

    MOVE  2 TO VALEUR-1
    MOVE  6 TO VALEUR-2
    MOVE 39 TO VALEUR-3
    SUBTRACT VALEUR-1 FROM VALEUR-2 GIVING VALEUR-3	
    DISPLAY 'VALEUR-1: ' VALEUR-1
    DISPLAY 'VALEUR-2: ' VALEUR-2
    DISPLAY 'VALEUR-3: ' VALEUR-3

* Resultat du test:
* VALEUR-1: +000002
* VALEUR-2: +000006
* VALEUR-3: +000004

    MOVE 80 TO VALEUR-1
    MOVE 20 TO VALEUR-2
    SUBTRACT 50      FROM VALEUR-1 GIVING VALEUR-2  
    DISPLAY 'VALEUR-1: ' VALEUR-1
    DISPLAY 'VALEUR-2: ' VALEUR-2

* Resultat du test:
* VALEUR-1: +000080
* VALEUR-2: +000030

    STOP RUN.

Exemple – UNSTRING

Programme utilisant le UNSTRING :

IDENTIFICATION DIVISION.
PROGRAM-ID.  UNSTRING.
AUTHOR.      LA COMMUNAUTE DU COBOL.

ENVIRONMENT DIVISION.                                            
CONFIGURATION SECTION.                                           
SPECIAL-NAMES.                                                   
    DECIMAL-POINT IS COMMA. 

DATA DIVISION.
WORKING-STORAGE SECTION.

01  WS-AUXILIARES.
    05  CHAMP-1             PIC X(006)       VALUE SPACES. 
    05  CHAMP-2             PIC X(006)       VALUE SPACES. 
    05  CHAMP-3             PIC X(006)       VALUE SPACES. 
    05  CHAMP-4             PIC X(006)       VALUE SPACES. 
    05  CHAMP-123           PIC X(016)       VALUE SPACES.
    05  CHAMP-ABC           PIC X(011)       VALUE SPACES.
    05  CHAMP-XYZ           PIC X(013)       VALUE SPACES.
    05  COMPTEUR-01         PIC 9(006)       VALUE ZEROES. 
    05  COMPTEUR-1          PIC 9(006)       VALUE ZEROES. 
    05  COMPTEUR-2          PIC 9(006)       VALUE ZEROES. 
    05  COMPTEUR-3          PIC 9(006)       VALUE ZEROES. 
    05  COMPTEUR-4          PIC 9(006)       VALUE ZEROES. 
    05  DELIMITEUR-1        PIC X(001)       VALUE SPACES. 
    05  DELIMITEUR-2        PIC X(001)       VALUE SPACES. 
    05  POINTEUR-1          PIC 9(006)       VALUE 1. 
    05  WS-NOM-01           PIC X(020)       VALUE SPACES.
    05  WS-NOM-02           PIC X(020)       VALUE SPACES.
    05  WS-NOM-03           PIC X(020)       VALUE SPACES.
    05  WS-NOM-04           PIC X(020)       VALUE SPACES.

PROCEDURE DIVISION.

001-INIT.

    MOVE "AB*CDJKL*MNS*TUV" TO CHAMP-123
    UNSTRING CHAMP-123
             DELIMITED BY "*" 
        INTO CHAMP-1 CHAMP-2 CHAMP-3 CHAMP-4
    END-UNSTRING 
    DISPLAY "CHAMP-1: " CHAMP-1 
    DISPLAY "CHAMP-2: " CHAMP-2 
    DISPLAY "CHAMP-3: " CHAMP-3 
    DISPLAY "CHAMP-4: " CHAMP-4 

* Resultado do teste:
* CHAMP-1: AB    
* CHAMP-2: CDJKL 
* CHAMP-3: MNS   
* CHAMP-4: TUV   


    MOVE "AB*CDJKL*MNS*TUV" TO CHAMP-123
    UNSTRING CHAMP-123 
             DELIMITED BY "*" 
        INTO CHAMP-1 COUNT IN COMPTEUR-1 
             CHAMP-2 COUNT IN COMPTEUR-2 
             CHAMP-3 COUNT IN COMPTEUR-3 
             CHAMP-4 COUNT IN COMPTEUR-4
    END-UNSTRING
    DISPLAY "CHAMP-1: " CHAMP-1 "   COMPTEUR-1: " COMPTEUR-1 
    DISPLAY "CHAMP-2: " CHAMP-2 "   COMPTEUR-2: " COMPTEUR-2 
    DISPLAY "CHAMP-3: " CHAMP-3 "   COMPTEUR-3: " COMPTEUR-3 
    DISPLAY "CHAMP-4: " CHAMP-4 "   COMPTEUR-4: " COMPTEUR-4 

* Resultado do teste:
* CHAMP-1: AB       COMPTEUR-1: 000002
* CHAMP-2: CDJKL    COMPTEUR-2: 000005
* CHAMP-3: MNS      COMPTEUR-3: 000003
* CHAMP-4: TUV      COMPTEUR-4: 000003


    MOVE "AB*CDJKL*MNS*TUV" TO CHAMP-123
    UNSTRING CHAMP-123 
             DELIMITED BY "*" 
        INTO CHAMP-1 COUNT IN COMPTEUR-1 
             CHAMP-2 COUNT IN COMPTEUR-2 
             CHAMP-3 COUNT IN COMPTEUR-3 
             CHAMP-4 COUNT IN COMPTEUR-4 
        WITH POINTER POINTEUR-1 
        TALLYING IN COMPTEUR-01
    END-UNSTRING
    DISPLAY "CHAMP-1    : " CHAMP-1 "   COMPTEUR-1: " COMPTEUR-1 
    DISPLAY "CHAMP-2    : " CHAMP-2 "   COMPTEUR-2: " COMPTEUR-2 
    DISPLAY "CHAMP-3    : " CHAMP-3 "   COMPTEUR-3: " COMPTEUR-3 
    DISPLAY "CHAMP-4    : " CHAMP-4 "   COMPTEUR-4: " COMPTEUR-4 
    DISPLAY "POINTEUR-1 : " POINTEUR-1 
    DISPLAY "COMPTEUR-01: " COMPTEUR-01 

* Resultado do teste:
* CHAMP-1    : AB       COMPTEUR-1: 000002
* CHAMP-2    : CDJKL    COMPTEUR-2: 000005
* CHAMP-3    : MNS      COMPTEUR-3: 000003
* CHAMP-4    : TUV      COMPTEUR-4: 000003
* PONTEIRO-1 : 000017
* COMPTEUR-01: 000004

    MOVE "XYZ/ABC*DEF" TO CHAMP-ABC
    UNSTRING CHAMP-ABC
             DELIMITED BY "/" OR "*"
        INTO CHAMP-1 DELIMITER IN DELIMITEUR-1
             CHAMP-2 DELIMITER IN DELIMITEUR-2
    END-UNSTRING
    DISPLAY "CHAMP-1    : " CHAMP-1 "   DELIMITEUR-1: " DELIMITEUR-1 
    DISPLAY "CHAMP-2    : " CHAMP-2 "   DELIMITEUR-2: " DELIMITEUR-2 

* Resultado do teste:
* CHAMP-1    : XYZ      DELIMITEUR-1: /
* CHAMP-2    : ABC      DELIMITEUR-2: *

    UNSTRING CHAMP-ABC 
             DELIMITED BY "/" OR "*" 
        INTO CHAMP-1 
             DELIMITER IN DELIMITEUR-1
    END-UNSTRING
    DISPLAY "CHAMP-1    : " CHAMP-1 "   DELIMITEUR-1: " DELIMITEUR-1 

* Resultado do teste:
* CHAMP-1    : XYZ      DELIMITEUR-1: /

    MOVE "JKLMN****STUV" TO CHAMP-XYZ 
    UNSTRING CHAMP-XYZ
             DELIMITED BY ALL "*" 
        INTO CHAMP-1 CHAMP-2
    END-UNSTRING
    DISPLAY "CHAMP-1: " CHAMP-1 
    DISPLAY "CHAMP-2: " CHAMP-2 

* Resultado do teste:
* CHAMP-1: JKLMN 
* CHAMP-2: STUV  

    STOP RUN.

Exemple – Niveau 49

COBOL utilise les numéros de niveau 01 à 49 pour définir une structure de données dans une hiérarchie de parties constitutives – plus le numéro de niveau est élevé, plus l’élément est bas dans la hiérarchie.

Les numéros eux-mêmes n’ont généralement pas de signification particulière, mais la relation entre les numéros de niveau identifie les niveaux au sein de la hiérarchie.

Cependant, lors du codage des zones de données à utiliser avec SQL, le niveau numéro 49 a une signification particulière.
49 est utilisé pour déclarer des identifiants d’éléments élémentaires de longueur variable – généralement des variables VARCHAR, LONG VARCHAR, VARGRAPHIC et LONG VARGRAPHIC.

Lorsque le niveau 49 est utilisé, le groupe contient un champ Longueur de 2 octets suivi du nom réel du champ (défini comme PIC X(##) avec ## étant la longueur maximale).
Les données du champ varient en longueur et lorsque les données sont placées dans le champ, seul le nombre de caractères défini dans l’élément de longueur est renvoyé, sans caractères de remplissage.

Cela peut causer un problème car les informations précédentes stockées dans ce champ ne sont pas automatiquement effacées et la valeur précédente était plus longue que la valeur actuelle.
Lorsque les données sont récupérées, la longueur et l’élément de données sont renseignés.

Une longueur de 0 indique que la colonne n’est pas remplie.

Voici un exemple d’utilisation du Level 49 :

----+---10----+---20----+---30----+---40----+---50----+ 

       01 NOM-COLONNE. 
           49 COLONNE-NOM-LEN PIC S9(04) USAGE COMP. 
           49 COLONNE-NOM-DONNEES PIC X(273).

Voici une explication de cette disposition :

  • NOM-COLONNE est le nom de la colonne SQL
  • COLONNE-NOM-LEN est un champ entier de 1 à 4 qui contient la longueur des données dans NOM-COLONNE.
  • COLONNE-NOM-DONNEES contient les données réelles et la clause PIC indique la plus grande valeur de variable pouvant être affectée à cette variable.

Exemple DCLGEN avec niveau 49

****************************************************************** 
* DCLGEN TABLE(MYTABLE)                                          * 
*        LIBRARY('prefix.SRCLIB.DATA(MYTABLE))                   * 
*        LANGUAGE(COBOL)                                         * 
*        APOST                                                   * 
*        DCLBIT(YES)                                             * 
* ... IS THE DCLGEN COMMAND THAT MADE THE FOLLOWING STATEMENTS   * 
****************************************************************** 
     EXEC SQL DECLARE MYTABLE TABLE                                
     ( COL1                           CHAR(10) NOT NULL,           
       COL2                           CHAR(10),                    
       COL3                           VARCHAR(12) NOT NULL,        
       COL4                           VARCHAR(12) NOT NULL         
     ) END-EXEC.                                                   
****************************************************************** 
* DECLARED VARIABLES FOR 'FOR BIT DATA' COLUMNS                  * 
****************************************************************** 
     EXEC SQL DECLARE                                              
      :COL3                                                        
     ,:COL4                                                        
     VARIABLE FOR BIT DATA END-EXEC.                               
****************************************************************** 
* COBOL DECLARATION FOR TABLE MYTABLE                            * 
****************************************************************** 
 01  DCLMYTABLE.                                                   
     10 COL1                 PIC X(10).                            
     10 COL2                 PIC X(10).                            
     10 COL3.                                                      
        49 COL3-LEN          PIC S9(4) USAGE COMP.                 
        49 COL3-TEXT         PIC X(12).                            
     10 COL4.                                                      
        49 COL4-LEN          PIC S9(4) USAGE COMP.                 
        49 COL4-TEXT         PIC X(12).                            
****************************************************************** 
* LE NOMBRE DE COLONNES DÉCRIT PAR CETTE DÉCLARATION EST DE 4     * 
******************************************************************

Exemple – Niveau 66

Le niveau 66 est utilisé pour renommer d’autres variables de programme.

IDENTIFICATION DIVISION.
PROGRAM-ID.  NIVEAU66.
AUTHOR.      LA COMMUNAUTE DU COBOL.

* Un exemple de programme qui démontre l'utilisation du niveau 66

DATA DIVISION.
WORKING-STORAGE SECTION.

* Ainsi, en accédant à la variable MOIS-JOUR-SYSTEME,
* nous verrons le contenu des variables MOIS-SYSTEME et JOUR-SYSTEME.

01  DATE-SYSTEME.
    05  ANNEE-SYSTEME       PIC 9(004) VALUE ZEROES.
    05  MOIS-SYSTEME        PIC 9(002) VALUE ZEROES.
    05  JOUR-SYSTEME        PIC 9(002) VALUE ZEROES.
66  MOIS-JOUR-SYSTEME       RENAMES MOIS-SYSTEME THRU JOUR-SYSTEME.


* Niveau 66 - RENAMES (joint des champs contigus)

01  REGISTRE.
    05 RUE                 PIC X(030).
    05 NUM                 PIC 9(005).
    05 APPART              PIC 9(004).
    05 QUARTIER            PIC X(015).
    05 VILLE               PIC X(025).
    05 ETAT                PIC X(002).
    05 CP                  PIC 9(005).
66  ADRESSE                RENAMES RUE      THRU APPART.
66  VILLE-ETAT             RENAMES VILLE    THRU ETAT.
66  QUARTIER-VILLE         RENAMES QUARTIER THRU VILLE.
66  NUMERO                 RENAMES NUM.
66  IND-COMPLET            RENAMES RUE      THRU CP.
66  FIN-PRESQUE            RENAMES ADRESSE THRU VILLE-ETAT.


PROCEDURE DIVISION.

001-INIT.

    MOVE 20201025               TO DATE-SYSTEME  
    DISPLAY "DATE-SYSTEME     : "  DATE-SYSTEME 
    DISPLAY "ANNEE-SYSTEME    : "  ANNEE-SYSTEME 
    DISPLAY "MOIS-SYSTEME     : "  MOIS-SYSTEME 
    DISPLAY "JOUR-SYSTEME     : "  JOUR-SYSTEME 
    DISPLAY "MOIS-JOUR-SYSTEME: "  MOIS-JOUR-SYSTEME 

* Resultat do test :

* DATE-SYSTEME     : 20201025
* ANNEE-SYSTEME    : 2020
* MOIS-SYSTEME     : 10
* JOUR-SYSTEME     : 25
* MOIS-JOUR-SYSTEME: 1025

    MOVE "AVENUE DES CHAMPS-ELYSEES" TO RUE
    MOVE 00037                   TO NUM 
    MOVE 101                     TO APPART
    MOVE "PARIS 8"               TO QUARTIER
    MOVE "PARIS"                 TO VILLE
    MOVE "FR"                    TO ETAT
    MOVE 75008                   TO CP

    DISPLAY "ADRESSE        : "  ADRESSE               
    DISPLAY "VILLE-ETAT     : "  VILLE-ETAT          
    DISPLAY "QUARTIER-VILLE : "  QUARTIER-VILLE          
    DISPLAY "NUMERO         : "  NUMERO                 
    DISPLAY "IND-COMPLET    : "  IND-COMPLET           
    DISPLAY "END-PRESQUE    : "  END-PRESQUE              

* Resultat de test:

* ADRESSE        : AVENUE DES CHAMPS-ELYSEES     000370101
* VILLE-ETAT     : PARIS                    FR
* QUARTIER-VILLE : PARIS 8        PARIS                 
* NUMERO         : 00037
* IND-COMPLET    : AVENUE DES CHAMPS-ELYSEES     000370101PARIS 8        PARIS                 FR75008
* END-PRESQUE    : AVENUE DES CHAMPS-ELYSEES     000370101PARIS                 FR

    STOP RUN.

Exemple – Niveau 77

Le niveau 77 identifie les entrées de description d’éléments de données qui sont des éléments indépendants WORKING-STORAGE, LOCAL-STORAGE ou LINKAGE SECTION.

Ils ne sont pas des subdivisions d’autres éléments et ne sont pas subdivisés.

Les éléments de niveau 77 doivent commencer dans la zone A.

77  PRECEDENT               PIC S9(04) VALUE -1.
77  ACTUELLE                PIC S9(04) VALUE  1.
77  SUIVANTE                PIC S9(04).

Exemple – Niveau 88

Un élément de niveau 88 est utilisé pour nommer une condition.

L’utilisation d’un nom de condition présente deux avantages principaux :

  • Il permet d’attribuer un nom descriptif à ce qui pourrait autrement ne pas être une raison évidente pour un test.
  • Si une condition est sujette à changement en raison d’une condition indépendante de la volonté du développeur et que cette condition est testée à plusieurs endroits dans la PROCEDURE DIVISION, l’utilisation du nom de la condition dans la division au lieu de la condition réelle permet au programmeur qui maintient le programme de modifier les valeurs. ​​qui définissent la condition à un seul endroit dans la DATA DIVISION, plutôt que d’avoir à rechercher toutes les occurrences individuelles dans la PROCEDURE DIVISION.

Exemple

       05  WS-COMPANY         PIC 9(004).
           88  WS-PARIS       VALUES  3
                                     15
                                     39 THRU 42
                                     76.

       Pour tester une entreprise faisant des affaires à 
       Paris, sans les niveaux item 88, 
	   il faudrait coder : 

      * IF condition simple : 

           IF  WS-COMPANY EQUAL  3 OR 15 OR 39 OR
                                40 OR 41 OR 42 OR 76

      * IF avec condition de niveau 88 :

           IF  WS-PARIS 
               description de la condition 
           END-IF

Il ne serait pas évident pour la personne lisant le code quelle condition vous testiez.
Avec le 88 en place, vous pouvez coder le test comme ceci :

Toute personne lisant le code pourrait dire quelle condition vous testiez, et si la vérification a été effectuée plusieurs fois dans la PROCEDURE DIVISION et que la liste des entreprises faisant des affaires en Californie change, il vous suffit de modifier la liste des valeurs associées à 88 – élément de niveau.

Alors que le nom de données associé à un élément de niveau 88 peut avoir n’importe quelle valeur, l’élément de niveau 88 lui-même ne peut avoir qu’une seule des deux valeurs, vrai ou faux.
L’élément est vrai si l’élément de données immédiatement supérieur à 88 a l’une des valeurs associées à l’élément 88, sinon il est faux.

Les objets de niveau 88 peuvent être associés à des objets de groupe ou élémentaires.

IDENTIFICATION DIVISION.
PROGRAM-ID.  NIVEAU88.
AUTHOR.      LA COMMUNAUTE DU COBOL.

* Un exemple de programme qui démontre l'utilisation du niveau 88 
* Le verbe EVALUATE est utilisé. 

DATA DIVISION.
WORKING-STORAGE SECTION.

01  OPTION               PIC X(001).
    88 VOYELLE          VALUE "a", "e", "i", "o", "u"
                              "A", "E", "I", "O", "U".

    88 CONSONNE         VALUE "b", "c", "d", "f", "g", "h"
                              "j" THRU "n", "p" THRU "t", "v" THRU "z"
                              "B", "C", "D", "F", "F", "H"
                              "J" THRU "N", "P" THRU "T", "V" THRU "Z".

    88 NUMERO           VALUE "0" THRU "9".

    88 CARACTERE-VALIDE VALUE "a" THRU "z", "A" THRU "Z"
                              "0" THRU "9".

PROCEDURE DIVISION.

001-INIT.

    DISPLAY "Saisir un caractère ou un chiffre.".

    ACCEPT OPTION.

    EVALUATE TRUE
        WHEN VOYELLE   DISPLAY "OPTION " OPTION " est une VOYELLE."
        WHEN CONSONNE  DISPLAY "OPTION " OPTION " est une CONSONNE."
        WHEN NUMERO    DISPLAY "OPTION " OPTION " est un NUMERO."
        WHEN OTHER     DISPLAY  OPTION " OPTION INVALIDE"
    END-EVALUATE

    STOP RUN.

Exemple – Affichage valeur MIN/MAX

C’est très simple. Voici des exemples utilisant le MIN/MAX :

Exemple 1

IDENTIFICATION DIVISION.
PROGRAM-ID. MAXMIN.

DATA DIVISION. 
WORKING-STORAGE SECTION.
01  WS-AUXILIARES.
    05  WS-MAX      PIC 9(2)  VALUE 0.
    05  WS-MIN      PIC 9(2)  VALUE 99.
    05  WS-I        PIC 9(2)  VALUE 0. 
    05  WS-TAB      VALUE "1915664112".
        10 WS-ELE   PIC 9(2) OCCURS 5 TIMES.

PROCEDURE DIVISION.

PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > 5
     IF WS-ELE (WS-I) > WS-MAX
        MOVE WS-ELE (WS-I) TO WS-MAX
     END-IF
     IF WS-ELE (WS-I) < WS-MIN
        MOVE WS-ELE (WS-I) TO WS-MIN
     END-IF  
END-PERFORM. 

DISPLAY 'Le nombre le plus élevé est : ' WS-MAX.
DISPLAY 'Le plus petit nombre est    : ' WS-MIN.
STOP RUN.

Ci-dessous le résultat :

Le nombre le plus élevé est : 66
Le plus petit nombre est    : 12

Exemple 2

IDENTIFICATION DIVISION.
PROGRAM-ID. MAXMIN.

DATA DIVISION. 
WORKING-STORAGE SECTION.
01  WS-AUXILIARES.
    05  WS-MAX      PIC 9(2)  VALUE 0.
    05  WS-MIN      PIC 9(2)  VALUE 99.
    05  WS-I        PIC 9(2)  VALUE 0. 
    05  WS-TAB      VALUE "19150141121999664112".
        10 WS-ELE   PIC 9(2) OCCURS 10 TIMES.

PROCEDURE DIVISION.

PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > 10
     IF WS-ELE (WS-I) > WS-MAX
        MOVE WS-ELE (WS-I) TO WS-MAX
     END-IF
     IF WS-ELE (WS-I) < WS-MIN
        MOVE WS-ELE (WS-I) TO WS-MIN
     END-IF  
END-PERFORM. 

DISPLAY 'Le nombre le plus élevé est : ' WS-MAX.
DISPLAY 'Le plus petit nombre est    : ' WS-MIN.
STOP RUN.

Ci-dessous le résultat :

Le nombre le plus élevé est : 99
Le plus petit nombre est    : 01

Exemple 3

IDENTIFICATION DIVISION.
PROGRAM-ID. MAXMIN.

DATA DIVISION. 
WORKING-STORAGE SECTION.
01  WS-AUXILIARES.
    05  WS-MAX      PIC 9(3)  VALUE 0.
    05  WS-MIN      PIC 9(3)  VALUE 99.
    05  WS-I        PIC 9(3)  VALUE 0. 
    05  WS-TAB      VALUE "191152013414125196997668419128".
        10 WS-ELE   PIC 9(3) OCCURS 10 TIMES.

PROCEDURE DIVISION.

PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > 10
     IF WS-ELE (WS-I) > WS-MAX
        MOVE WS-ELE (WS-I) TO WS-MAX
     END-IF
     IF WS-ELE (WS-I) < WS-MIN
        MOVE WS-ELE (WS-I) TO WS-MIN
     END-IF  
END-PERFORM. 

DISPLAY 'Le nombre le plus élevé est : ' WS-MAX.
DISPLAY 'Le plus petit nombre est    : ' WS-MIN.
STOP RUN.

Ci-dessous le résultat :

Le nombre le plus élevé est : 997
Le plus petit nombre est    : 013

Exemple – Quantité de Caractères

Exemple 1

IDENTIFICATION DIVISION.
PROGRAM-ID. CARACTERES.
DATA DIVISION. 
WORKING-STORAGE SECTION.
01  WS-AUXILIARES.
    05  WS-FIN       PIC 9(09)  VALUE 0.
    05  WS-IND       PIC 9(09)  VALUE 1.
    05  WS-TAILLE    PIC 9(09)  VALUE 0.
    05  WS-RESULT    PIC 9(09)  VALUE 0.
    05  WS-CHAMP     PIC X(30) VALUE 'LA COM M   DU CO B OL  '.
    
PROCEDURE DIVISION.

COMPUTE WS-RESULT = FUNCTION LENGTH (WS-CHAMP)

MOVE 0 TO WS-FIN WS-TAILLE
PERFORM VARYING WS-IND FROM 1 BY 1 
     UNTIL WS-IND GREATER THAN WS-RESULT
     IF WS-CHAMP(WS-IND:1) NOT EQUAL SPACES
        ADD 1 TO WS-TAILLE
     END-IF
END-PERFORM

DISPLAY 'WS-TAILLE - ' WS-TAILLE.
STOP RUN.

Resultat du test:

WS-TAILLE - 000000013

Exemple 2

IDENTIFICATION DIVISION.
PROGRAM-ID. CARACTERES.
DATA DIVISION. 
WORKING-STORAGE SECTION.
01  WS-AUXILIARES.
    05  WS-FIN       PIC 9(09)  VALUE 0.
    05  WS-IND       PIC 9(09)  VALUE 1.
    05  WS-TAILLE    PIC 9(09)  VALUE 0.
    05  WS-RESULT    PIC 9(09)  VALUE 0.
    05  WS-CHAMP     PIC X(30) VALUE 'LA COM M   DU CO B     '.
    
PROCEDURE DIVISION.

COMPUTE WS-RESULT = FUNCTION LENGTH (WS-CHAMP)

MOVE 0 TO WS-FIN WS-TAILLE
PERFORM VARYING WS-IND FROM 1 BY 1 
     UNTIL WS-IND GREATER THAN WS-RESULT
     IF WS-CHAMP(WS-IND:1) NOT EQUAL SPACES
        ADD 1 TO WS-TAILLE
     END-IF
END-PERFORM

DISPLAY 'WS-TAILLE - ' WS-TAILLE.
STOP RUN.

Resultat du test:

WS-TAILLE - 000000011

Exemple 3

IDENTIFICATION DIVISION.
PROGRAM-ID. CARACTERES.
DATA DIVISION. 
WORKING-STORAGE SECTION.
01  WS-AUXILIARES.
    05  WS-FIN       PIC 9(09)  VALUE 0.
    05  WS-IND       PIC 9(09)  VALUE 1.
    05  WS-TAILLE   PIC 9(09)  VALUE 0.
    05  WS-RESULT    PIC 9(09)  VALUE 0.
    05  WS-CHAMP     PIC X(30) VALUE 'COMMUN AUT E1  1  1  1  11'.
    
PROCEDURE DIVISION.

COMPUTE WS-RESULT = FUNCTION LENGTH (WS-CHAMP)

MOVE 0 TO WS-FIM WS-TAILLE
PERFORM VARYING WS-IND FROM 1 BY 1 
     UNTIL WS-IND GREATER THAN WS-RESULT
     IF WS-CHAMP(WS-IND:1) NOT EQUAL SPACES
        ADD 1 TO WS-TAILLE
     END-IF
END-PERFORM

DISPLAY 'WS-TAILLE - ' WS-TAILLE.
STOP RUN.

Resultat du test:

WS-TAILLE - 000000016

Exemple – Classification d’un tableau

Voici un programme utilisant un tableau :

IDENTIFICATION DIVISION. 
PROGRAM-ID.    SORTTABL.
AUTHOR.        LA COMMUNAUTE DU COBOL.
DATA DIVISION. 
WORKING-STORAGE SECTION. 

01  WS-TABLE                         VALUE ZEROES. 
    05 WS-ELEMENT    PIC 9(002) OCCURS 1 TO 99 
                                          DEPENDING WS-ELEM.
01  WS-AUXILIARES. 
    05  WS-ELEM       PIC 9(002)      VALUE 15. 
    05  I             PIC 9(002)      VALUE 1. 
    05  J             PIC 9(002). 
    05  K             PIC 9(002). 
    05  T             PIC X(002). 

PROCEDURE DIVISION. 

    PERFORM 001-INIT
    PERFORM 002-PROCESS
    PERFORM 003-FINAL
    STOP RUN.

001-INIT. 

    MOVE 102204521253650667569970013345 TO WS-TABLE.

002-PROCESS.

    PERFORM VARYING I FROM 1 BY 1 UNTIL I > WS-ELEM 
            COMPUTE K = I + 1 
            PERFORM VARYING J FROM K BY 1 UNTIL J > WS-ELEM 
                    IF  WS-ELEMENT (I) > WS-ELEMENT (J) 
                        MOVE WS-ELEMENT (I) TO T  
                        MOVE WS-ELEMENT (J) TO WS-ELEMENT (I) 
                        MOVE T TO WS-ELEMENT (J)
                    END-IF 
            END-PERFORM 
    END-PERFORM. 

003-FINAL.

    MOVE 1 TO I. 
    DISPLAY 'La table triée :'. 
    PERFORM WS-ELEM TIMES 
            DISPLAY WS-ELEMENT(I) 
            ADD 1 TO I  
    END-PERFORM.   

    DISPLAY 'La table triée - 1: '. 
    DISPLAY WS-TABELEMT.   
La table triée :

01
04
06
10
12
22
33
45
52
53
56
65
67
70
99

La table triée - 1:

010406101222334552535665677099