Tous les articles par Mr COBOL

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