Tous les articles par Mr COBOL

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 – 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 – 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 – 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

Exemple – UNSTRING UPPER-CASE/LOWER-CASE

Voici un programme avec UNSTRING UPPER-CASE/LOWER-CASE :

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

01 WS-AUXILIARES.
05 WS-NOM-COMPLET PIC X(30) VALUE "LA COMMUNAUTE DU COBOL".
05 WS-PREMIER PIC X(02).
05 WS-DEUXIEME PIC X(10).
05 WS-TROISIEME PIC X(02).

PROCEDURE DIVISION.
************************************
******** UNSTRING Normal *********
************************************
UNSTRING
WS-NOM-COMPLET DELIMITED BY SPACE
INTO WS-PREMIER WS-DEUXIEME WS-TROISIEME
END-UNSTRING

DISPLAY "UNSTRING Normal"
DISPLAY " "
DISPLAY "Premier = " WS-PREMIER.
DISPLAY "Deuxième = " WS-DEUXIEME.
DISPLAY "Troisième = " WS-TROISIEME.
DISPLAY " "

***********************************************
* UNSTRING combinant avec FUNCTION UPPER-CASE *
***********************************************
UNSTRING
FUNCTION UPPER-CASE (WS-NOM-COMPLET) DELIMITED BY SPACE
INTO WS-PREMIER WS-DEUXIEME WS-TROISIEME
END-UNSTRING

DISPLAY "UNSTRING combinant avec FUNCTION UPPER-CASE"
DISPLAY " "
DISPLAY "Premier = " WS-PREMIER.
DISPLAY "Deuxième = " WS-DEUXIEME.
DISPLAY "Troisième = " WS-TROISIEME.
DISPLAY " "

***********************************************
* UNSTRING combinant avec FUNCTION LOWER-CASE *
***********************************************
UNSTRING
FUNCTION LOWER-CASE (WS-NOM-COMPLET) DELIMITED BY SPACE
INTO WS-PREMIER WS-DEUXIEME WS-TROISIEME
END-UNSTRING

DISPLAY "UNSTRING combinant avec FUNCTION LOWER-CASE"
DISPLAY " "
DISPLAY "Premier = " WS-PREMIER.
DISPLAY "Deuxième = " WS-DEUXIEME.
DISPLAY "Troisième = " WS-TROISIEME.
DISPLAY " "

STOP RUN.

RESULTAT

UNSTRING Normal

Premier   = La
Deuxième  = Communaute
Troisième = Du

UNSTRING combinant la FUNCTION UPPER-CASE

Premier   = LA
Deuxième  = COMMUNAUTE
Troisième = DU

UNSTRING combinant la FUNCTION LOWER-CASE

Premier   = la
Deuxième  = communaute
Troisième = du

Création de Table SPITAB

La création d’une table SPITAB est une étape importante pour assurer la gestion efficace des données sur un système mainframe. Cette page vous expliquera les éléments clés à spécifier pour créer une table SPITAB, ainsi que les contrôles que SPITAB peut effectuer sur les données et les différentes options d’exploitation de la table.

Les éléments clés de la table

Pour créer une table SPITAB, il est essentiel de spécifier les éléments clés de la table. Ces éléments doivent être descriptifs et ne pas excéder 50 caractères.

Par exemple, pour une table de gestion des clients, les éléments clés pourraient être le nom, le prénom, l’adresse et le numéro de téléphone. Il est également possible d’ajouter des contrôles sur les éléments, tels que des bornes de valeurs ou des formats de date.

Les éléments à ne pas reconduire en production

Si certains éléments de la table ne doivent pas être reconduits en production, il est important de les placer en fin de table et de les signaler clairement. Cela permettra d’éviter des erreurs lors de l’exploitation de la table.

Le titre de la table

Donner un titre cohérent et descriptif à la table est également essentiel. Le titre doit être court, avec une limite de 27 caractères, mais suffisamment descriptif pour permettre aux utilisateurs de comprendre le contenu de la table.

L’exploitation de la table

Il est important de spécifier si la table doit être exploitée en Batch, en Batch BMP ou en TP. Ces options correspondent à différentes manières d’exploiter la table selon les besoins du système. Par exemple, l’exploitation en Batch peut être utilisée pour des traitements périodiques ou en masse, tandis que l’exploitation en TP peut être utilisée pour des traitements en temps réel.

Conclusion

La création d’une table SPITAB nécessite de prendre en compte différents éléments clés pour garantir l’efficacité et la fiabilité de la gestion des données. En suivant ces recommandations, vous serez en mesure de créer des tables SPITAB de qualité pour votre système mainframe.

Exemple – INSPECT TALLYING REPLANCING

Voici un programme utilisant le INSPECT TALLYING REPLANCING :

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

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

DATA DIVISION.
WORKING-STORAGE SECTION.

01  WS-AUXILIARES.
    05  ITEM-1        PIC X(014)  VALUE 'EFABDBCGABEFGG'.
    05  ITEM-2        PIC X(006)  VALUE 'BABABC'.
    05  ITEM-3        PIC X(004)  VALUE 'BBBC'.
    05  COMPTEUR-0    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.

PROCEDURE DIVISION.

001-INIT.

Exemple 1

    INSPECT ITEM-1 TALLYING
            COMPTEUR-0 FOR ALL "AB", ALL "D"
            COMPTEUR-1 FOR ALL "BC"
            COMPTEUR-2 FOR LEADING "EF" 
            COMPTEUR-3 FOR LEADING "B" 
            COMPTEUR-4 FOR CHARACTERS

    INSPECT ITEM-1 REPLACING
            ALL "AB" BY "XY", "D" BY "X"
            ALL "BC" BY "VW"
            LEADING "EF" BY "TU" 
            LEADING "B" BY "S" 
            FIRST   "G" BY "R" 
            FIRST   "G" BY "P" 
            CHARACTERS BY "Z"

    DISPLAY 'ITEM-1     : ' ITEM-1
    DISPLAY 'COMPTEUR-0 : ' COMPTEUR-0  
    DISPLAY 'COMPTEUR-1 : ' COMPTEUR-1  
    DISPLAY 'COMPTEUR-2 : ' COMPTEUR-2  
    DISPLAY 'COMPTEUR-3 : ' COMPTEUR-3  
    DISPLAY 'COMPTEUR-4 : ' COMPTEUR-4  

* Resultat de test:

* ITEM-1     : TUXYXVWRXYZZPZ
* COMPTEUR-0 : 000003
* COMPTEUR-1 : 000001
* COMPTEUR-2 : 000001
* COMPTEUR-3 : 000000
* COMPTEUR-4 : 000005

Exemple 2

    MOVE ZEROES TO COMPTEUR-0 COMPTEUR-1 COMPTEUR-2 
                   COMPTEUR-3 COMPTEUR-4        
  
    INSPECT ITEM-2 TALLYING
            COMPTEUR-0 FOR ALL "AB", ALL "D"
            COMPTEUR-1 FOR ALL "BC"
            COMPTEUR-2 FOR LEADING "EF" 
            COMPTEUR-3 FOR LEADING "B" 
            COMPTEUR-4 FOR CHARACTERS

    INSPECT ITEM-2 REPLACING
            ALL "AB" BY "XY", "D" BY "X"
            ALL "BC" BY "VW"
            LEADING "EF" BY "TU" 
            LEADING "B" BY "S" 
            FIRST   "G" BY "R" 
            FIRST   "G" BY "P" 
            CHARACTERS BY "Z"

    DISPLAY 'ITEM-2     : ' ITEM-2
    DISPLAY 'COMPTEUR-0 : ' COMPTEUR-0  
    DISPLAY 'COMPTEUR-1 : ' COMPTEUR-1  
    DISPLAY 'COMPTEUR-2 : ' COMPTEUR-2  
    DISPLAY 'COMPTEUR-3 : ' COMPTEUR-3  
    DISPLAY 'COMPTEUR-4 : ' COMPTEUR-4  

* Resultat de test:

* ITEM-2     : SXYXYZ
* COMPTEUR-0 : 000002
* COMPTEUR-1 : 000000
* COMPTEUR-2 : 000000
* COMPTEUR-3 : 000001
* COMPTEUR-4 : 000001

Exemple 3

    MOVE ZEROES TO COMPTEUR-0 COMPTEUR-1 COMPTEUR-2 
                   COMPTEUR-3 COMPTEUR-4        
  
    INSPECT ITEM-3 TALLYING
            COMPTEUR-0 FOR ALL "AB", ALL "D"
            COMPTEUR-1 FOR ALL "BC"
            COMPTEUR-2 FOR LEADING "EF" 
            COMPTEUR-3 FOR LEADING "B" 
            COMPTEUR-4 FOR CHARACTERS

    INSPECT ITEM-3 REPLACING
            ALL "AB" BY "XY", "D" BY "X"
            ALL "BC" BY "VW"
            LEADING "EF" BY "TU" 
            LEADING "B" BY "S" 
            FIRST   "G" BY "R" 
            FIRST   "G" BY "P" 
            CHARACTERS BY "Z"

    DISPLAY 'ITEM-3     : ' ITEM-3
    DISPLAY 'COMPTEUR-0 : ' COMPTEUR-0  
    DISPLAY 'COMPTEUR-1 : ' COMPTEUR-1  
    DISPLAY 'COMPTEUR-2 : ' COMPTEUR-2  
    DISPLAY 'COMPTEUR-3 : ' COMPTEUR-3  
    DISPLAY 'COMPTEUR-4 : ' COMPTEUR-4  

* Resultat de test:

* ITEM-3     : SSVW
* COMPTEUR-0 : 000000
* COMPTEUR-1 : 000001
* COMPTEUR-2 : 000000
* COMPTEUR-3 : 000002
* COMPTEUR-4 : 000000

Exemple – INSPECT TALLYING

Voici un programme utilisant le INSPECT TALLYING :

IDENTIFICATION DIVISION.
PROGRAM-ID.  INSPECT.
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 '000670'.
    05  CHAMP-2         PIC X(006)   VALUE '123450'.
    05  CHAMP-3         PIC X(006)   VALUE '007800'.
    05  COMPTEUR-1      PIC 9(006)   VALUE ZEROES.
    05  COMPTEUR-2      PIC 9(006)   VALUE ZEROES.
    05  COMPTEUR-3      PIC 9(006)   VALUE ZEROES.

PROCEDURE DIVISION.

001-INICIO.

    INSPECT CHAMP-1 TALLYING COMPTEUR-1 FOR ALL ZEROES

    INSPECT CHAMP-2 TALLYING COMPTEUR-2 FOR CHARACTERS
            BEFORE INITIAL ZEROES 

    INSPECT CHAMP-3 TALLYING COMPTEUR-3 FOR LEADING ZEROES

    DISPLAY 'COMPTEUR-1 : ' COMPTEUR-1  
    DISPLAY 'COMPTEUR-2 : ' COMPTEUR-2  
    DISPLAY 'COMPTEUR-3 : ' COMPTEUR-3  

    STOP RUN.

* Resultat de test:

* COMPTEUR-1 : 000004
* COMPTEUR-2 : 000005
* COMPTEUR-3 : 000002

Exemple – INSPECT FUNCTION REVERSE

Voici plusieurs exemples de programme utilisant le INSPECT FUNCTION REVERSE :

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-TAILLE-1  PIC 9(09)  VALUE 0.
    05  WS-RESULTAT  PIC 9(09)  VALUE 0.
    05  WS-CHAMP     PIC X(30)  VALUE 'LA COMMUNAUTE'.

PROCEDURE DIVISION.

INSPECT FUNCTION REVERSE (WS-CHAMP) 
        TALLYING WS-TAILLE-1 FOR LEADING SPACES

DISPLAY 'Nombre de blancs après le dernier caractère significatif '
DISPLAY 'WS-TAILLE-1 - ' WS-TAILLE-1.

COMPUTE WS-RESULTAT = 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-RESULTAT
     IF WS-CHAMP(WS-IND:1) NOT EQUAL SPACES
        ADD 1 TO WS-TAILLE
     END-IF
END-PERFORM

DISPLAY 'Nombre de caractères dans le champ'
DISPLAY 'WS-TAILLE   - ' WS-TAILLE.
STOP RUN.

Resultat de test:

Nombre de blancs après le dernier caractère significatif 
WS-TAILLE-1 - 000000017

Nombre de caractères dans le champ
WS-TAILLE   - 000000012

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-TAILLE-1  PIC 9(09)  VALUE 0.
    05  WS-RESULTAT  PIC 9(09)  VALUE 0.
    05  WS-CHAMP     PIC X(50)  VALUE 'LA COMMUNAUTE DU COBOL'.

PROCEDURE DIVISION.

INSPECT FUNCTION REVERSE (WS-CHAMP) 
        TALLYING WS-TAILLE-1 FOR LEADING SPACES

DISPLAY 'Nombre de blancs après le dernier caractère significatif  '
DISPLAY 'WS-TAILLE-1 - ' WS-TAILLE-1.

COMPUTE WS-RESULTAT = 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-RESULTAT
     IF WS-CHAMP(WS-IND:1) NOT EQUAL SPACES
        ADD 1 TO WS-TAILLE
     END-IF
END-PERFORM

DISPLAY 'Nombre de caractères dans le champ'
DISPLAY 'WS-TAILLE   - ' WS-TAILLE.
STOP RUN.

Resultat de test:

Nombre de blancs après le dernier caractère significatif  
WS-TAILLE-1 - 000000028

Nombre de caractères dans le champ
WS-TAILLE   - 000000020

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-TAILLE-1  PIC 9(09)  VALUE 0.
    05  WS-RESULTAT  PIC 9(09)  VALUE 0.
    05  WS-CHAMP     PIC X(50)  VALUE 'LA C O M M U N A U T E DU COBOL'.

PROCEDURE DIVISION.

INSPECT FUNCTION REVERSE (WS-CHAMP) 
        TALLYING WS-TAILLE-1 FOR LEADING SPACES

DISPLAY 'Nombre de blancs après le dernier caractère significatif  '
DISPLAY 'WS-TAILLE-1 - ' WS-TAILLE-1.

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 'Nombre de caractères dans le champ'
DISPLAY 'WS-TAILLE   - ' WS-TAILLE.
STOP RUN.

Resultat de test:

Nombre de blancs après le dernier caractère significatif 
WS-TAILLE-1 - 000000019

Nombre de caractères dans le champ
WS-TAILLE   - 000000020

Exemple 4

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-TAILLE-1  PIC 9(09)  VALUE 0.
    05  WS-RESULTAT  PIC 9(09)  VALUE 0.
    05  WS-CHAMP     PIC X(50)  VALUE 'LA COMM DU COBOL'.

PROCEDURE DIVISION.

INSPECT FUNCTION REVERSE (WS-CHAMP) 
        TALLYING WS-TAILLE-1 FOR LEADING SPACES

DISPLAY 'Nombre de blancs après le dernier caractère significatif  '
DISPLAY 'WS-TAILLE-1 - ' WS-TAILLE-1.

COMPUTE WS-RESULTAT = 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-RESULTAT
     IF WS-CHAMP(WS-IND:1) NOT EQUAL SPACES
        ADD 1 TO WS-TAILLE
     END-IF
END-PERFORM

DISPLAY 'Nombre de caractères dans le champ'
DISPLAY 'WS-TAILLE   - ' WS-TAILLE.
STOP RUN.

Resultat de test:

Nombre de blancs après le dernier caractère significatif 
WS-TAILLE-1 - 000000034

Nombre de caractères dans le champ
WS-TAILLE   - 000000013

Exemple 5

IDENTIFICATION DIVISION.
PROGRAM-ID. CARACTERES.
DATA DIVISION. 
WORKING-STORAGE SECTION.
01  WS-AUXILIARES.
    05  WS-TAILLE    PIC 9(09)  VALUE 0.
    05  WS-TAILLE-1  PIC 9(09)  VALUE 0.
    05  WS-RESULTAT  PIC 9(09)  VALUE 0.
    05  WS-CHAMP     PIC X(30)  VALUE 'LA COMMUNAUTE        '.

PROCEDURE DIVISION.

INSPECT FUNCTION REVERSE (WS-CHAMP) 
        TALLYING WS-TAILLE-1 FOR LEADING SPACES

DISPLAY 'Nombre de blancs après le dernier caractère significatif  '
DISPLAY 'WS-TAILLE-1 - ' WS-TAILLE-1.
COMPUTE WS-RESULTAT = FUNCTION LENGTH (WS-CHAMP)
COMPUTE WS-RESULTAT = WS-RESULTAT - WS-TAILLE-1
DISPLAY 'Quantité de données jusqu'au dernier caractère significatif' 
DISPLAY 'WS-RESULTAT  - ' WS-RESULTAT
DISPLAY 'WS-CHAMP     - ' WS-CAMPO  (1:WS-RESULT)

STOP RUN.

Resultat de test:

Nombre de blancs après le dernier caractère significatif  
WS-TAILLE-1 - 000000017

Quantité de données jusqu'au dernier caractère significatif 
WS-RESULTAT  - 000000013
WS-CHAMP     - LA COMMUNAUTE

Exemple – INSPECT REPLACING

Voici un programme utilisant le INSPECT REPLACING :

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

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

DATA DIVISION.
WORKING-STORAGE SECTION.

01  WS-AUXILIARES.
    05  DATE-JOUR        PIC X(010)   VALUE '06-03-1951'.
    05  NUMERO-1         PIC X(008)   VALUE '44 21 11'.
    05  NUMERO-2         PIC X(006)   VALUE '442111'.
    05  NUMERO-3         PIC X(006)   VALUE '112111'.
    05  NUMERO-4         PIC X(006)   VALUE 'ABCXYZ'.

PROCEDURE DIVISION.

001-INIT.

    INSPECT DATE-JOUR REPLACING ALL '-' BY '/'                
    DISPLAY 'DATE-JOUR ' DATE-JOUR 
	 
    INSPECT NUMERO-1 REPLACING ALL SPACES BY '-'
    DISPLAY 'NUMERO-1  ' NUMERO-1 

    INSPECT NUMERO-2 REPLACING LEADING '4' BY '5'
    DISPLAY 'NUMERO-2  ' NUMERO-2 

    INSPECT NUMERO-3 REPLACING CHARACTERS BY '3'
            BEFORE INITIAL '2'
    DISPLAY 'NUMERO-3  ' NUMERO-3 

    INSPECT NUMERO-4 REPLACING FIRST 'X' BY 'Y'
    DISPLAY 'NUMERO-4  ' NUMERO-4 

    STOP RUN.

* Resultat de test:

* DATE-JOUR 06/03/1951
* NUMERO-1  44-21-11
* NUMERO-2  552111
* NUMERO-3  332111
* NUMERO-4  ABCYYZ