Tous les articles par Mr COBOL

4.4 PICTURE D’ÉDITION

Lorsque l’information est entreposée sur un support magnétique les caractères d’édition ne sont pas inclus.
Certaines fonctions d’édition doivent donc être accomplies quand ces données sont imprimées.
Ceci est accompli en utilisant des caractères d’édition dans la PICTURE des items qui doivent être imprimés.

Les fonctions d’édition les plus courantes sont :

  • Suppression des zéros non-significatifs
  • Impression du point décimal
  • Impression des virgules
  • Impression du signe de dollar
  • Impression d’astérisques en guise de protection
  • Impression d’un signe (+ ou -)

Le symbole Z est utilisé pour supprimer l’impression des zéros non-significatifs. Ce symbole peut apparaître plus d’une fois dans un PICTURE.
Le Z a le même effet que le 9, sauf qu’une valeur de 0 qui n’est pas significative est remplacée par un espace.

   01 E-ITEM PIC 9999.
   01 S-ITEM PIC ZZZ9.
   MOVE E-ITEM TO S-ITEM
             E-ITEM    S-ITEM
             0014      • • 14
             0564      • 564
             0000      • • • 0

Le symbole • est utilisé pour indiquer un point décimal. Un seul point peut apparaître dans un nombre.

01 E-ITEM PIC 999V99.
01 S-ITEM PIC 999.99.
MOVE E-ITEM TO S-ITEM
          E-ITEM     S-ITEM
          12345      123.45
          00825      008.25
          00005      000.05

01 E-ITEM PIC 999V99.
01 S-ITEM PIC ZZZ.99.
MOVE E-ITEM TO S-ITEM
          E-ITEM     S-ITEM
          12345      123.45
          00825      • • 8.25
          00005      • • • .05

L’impression d’une virgule est réalisée en plaçant le symbole , à l’endroit désiré dans le PICTURE. Il peut y avoir plus d’une virgule.

01 E-ITEM PIC 9(8)V99.
01 S-ITEM PIC 99,999,999.99.
MOVE E-ITEM TO S-ITEM
          E-ITEM       S-ITEM
          1289344506   12,893,445.06
          0000000835   00,000,008.35

Si le caractère d’édition Z est utilisé avec la virgule, il supprime l’impression des virgules qui sont suivies d’un zéro non-significatif.

01 E-ITEM PIC 9(8)V99.
01 S-ITEM PIC ZZ,ZZZ,ZZ9.99.
MOVE E-ITEM TO S-ITEM
          E-ITEM       S-ITEM
          1289344506   12,893,445.06
          0000000835   • • • • •8.35

Le symbole * est utilisé de la même façon que le Z, sauf que les zéros non-significatifs sont remplacés par des astérisques.

Pour que COBOL distingue entre un nombre positif et un nombre négatif, le programmeur doit indiquer la présence d’un signe en utilisant le symbole S.

01 E-ITEM PIC 9999.
01 S-ITEM PIC S999.

MOVE -37 TO ITEM1, ITEM2.
      ITEM1        ITEM2
      0037         -037

L’utilisation du S indique la présence d’un signe mais celui-ci ne sera pas automatiquement imprimé. Il faut pour cela utiliser le symbole +.

01 E-ITEM PIC S999.
01 S-ITEM PIC +999.
MOVE E-ITEM TO S-ITEM.
      E-ITEM        S-ITEM
      +123          +123
      -014          -014

Le symbole + peut être utilisé au début ou à la fin du PICTURE. Il peut être employé avec les autres caractères d’édition.

01 E-ITEM PIC S9(5)V99.
01 S-ITEM PIC ZZ,ZZZ.99+.
MOVE E-ITEM TO S-ITEM.
     E-ITEM        S-ITEM
     +3490500      34,905.00+
     -0150000      1,500.00 –

Si on désire que le signe ne soit imprimé que si le nombre est négatif, on peut utiliser le symbole – .

01 E-ITEM PIC S9(5)V99.
01 S-ITEM PIC -ZZ,ZZZ.99.
MOVE E-ITEM TO S-ITEM.
     E-ITEM        S-ITEM
     +3490500      34,905.00
     -0150000      - 1,500.00

4.6 LES STRUCTURES

Pour les travaux de gestion, il est nécessaire d’attribuer un nom collectif à tout ensemble de données puis des noms collectifs à des sous-ensembles,….
En COBOL nous disposons de 2 sortes d’ensembles de données, les structures et les tables.

Une structure est un système hiérarchique de noms qui renvoie à une zone de mémoire centrale regroupant un ensemble de données.

Au premier niveau 01, se trouve le nom de la structure principale qui désigne l’ensemble des éléments de données mémorisées dans la totalité de la zone attribuée à cette structure. Ce nom ne pourra plus être utilisé pour définir une variable simple ou une autre structure ou un quelconque autre nom dans ce programme.

Au niveau 02, il est attribué de nouveaux noms à certaines portions de la zone. Ce processus se poursuit jusqu’à ce qu’au dernier niveau un seul nom désigne un seul et même élément de données appelé élément simple.

Un élément collectif de structure est appelé un groupe et est toujours de type alphanumérique.

Remarque :

Toute ligne de description d’un niveau se termine par un point, un niveau par ligne.

Le niveau 01 doit être en marge A.

Les niveau suivant de 02 à 49 sont écrits à partir de la marge B, avec indentation.

Les éléments simples sont les seuls à disposer d’une PICTURE, le mode DISPLAY étant l’option par défaut.

Si pour certaines raisons, le programme dispose de zones décrites dans une ou plusieurs structures et qui ne doivent pas être utilisées, nous pouvons utiliser l’option FILLER.

01 MADATE.
   02 ANNEE       PIC 9999.
   02 MOIS        PIC 99.
   02 JOUR        PIC 99.
01 EECOls.
   02 ARTECOls    PIC X(38).
   02 TOTECOls    PIC S9(7)V9(4).
   02 TOTDEPECOls PIC S9(7)V99.
   02 FOURNECOls  PIC X(20).
   02 NOFACECOls  PIC X(20).
   02 IMPRECOls   PIC 9 VALUE 0.
   02 MSECOls     PIC 999v99.

4.7 LES TABLES

4.7.1 Principes généraux

Une table est un groupe de données composé d’éléments simples ayant tous des attributs identiques. Les tables sont utilisées pour mettre en mémoire un certain nombre d’informations dans le but de pouvoir les retrouver plus facilement.
Par exemple : trouver le prix de vente d’un article connaissant son code, trouver le nom d’un employé en fonction de son matricule.
La taille d’un tableau n’est pas illimitée, les contraintes viennent du type d’ordinateur utilisé sur PC OCCURS 1300 et il faut encore tenir compte des longueurs des variables utilisées.
(PRUDENCE).
La recherche d’un élément en table se fait en affectant un numéro d’ordre à chaque élément de la table. Ce numéro d’ordre est appelé INDICE.

Exemple :

01 TABLE.
   02 QUANTITE OCCURS 5 PIC 999

Ce qui représente une table à 1 dimension de 5 éléments de 3 caractères numériques.

Quantité 1Quantité 2Quantité 3Quantité 4Quantité 5

La quantité 4 de la table sera désignée par l’expression QUANTITE(4), et si nous désirons ajouter un nombre QACHAT à la quantité 2, nous devons écrire : ADD QACHAT TO QUANTITE (2).

01 PAYS.
   02 Province OCCURS 10 TIMES.
      03 SalesValue PIC 9(8)V99.
      03 NumSold    PIC 9(7).

4.7.2 Utilisation des indices

L’indice peut être utilisé sous forme d’un nombre ou d’une variable.

Sous forme de nombre : on écrit QUANTITE (3) pour atteindre à chaque fois l’élément 3.

Sous forme de variable : on lira par exemple l’indice N qui peut avoir les valeurs 1 à 5 puis la quantité est atteinte en écrivant QUANTITE (N).

Comme toute variable, l’indice doit être déclaré en DATA-DIVISION.
Il peut être tout simplement une zone de fichier entrée qui sert occasionnellement d’indice.

Remarque : la parenthèse gauche doit toujours être précédée par un espace à gauche, mais pas la parenthèse droite.

4.7.3 Tables à plusieurs indices

Cobol autorise des tables à 3 indices. Dans l’exemple suivant, on recherche les points d’un examen de math en deuxième année d’un étudiant d’info.

01 TABLE-ETUDIANT.
   02 LANNEE OCCURS 3.
      03 CODE-ETUDIANT OCCURS 55.
         04 LABRANCHE OCCURS 15 PIC 99.

L’ensemble des points par étudiant se retrouve dans TABLE-ETUDIANT, il s’agit d’une suite continue de caractères numériques. Il n’autorise pas l’usage d’un indice.

LANNEE, spécifie si les points recherchés sont ceux d’un étudiant de première, seconde ou troisième année. L’utilisation de LANNEE (2) nous donne une longue série de chiffres qui correspond à 55 x 15 càd les 15 résultats des 55 étudiants de seconde.
Cette zone autorise l’usage d’un indice et d’un seul.

CODE-ETUDIANT, donne pour un étudiant d’une année l’ensemble des points obtenus pour cette année la. L’utilisation de CODE-ETUDIANT (2, 17) nous donne une série de 15 chiffres de 2 caractères, cette série représente pour l’étudiant n° 17 de seconde année l’ensemble des points
obtenus. Cette zone autorise l’usage de 2 indices et de toujours 2 indices.

LABRANCHE, donne pour un étudiant d’une année les points obtenus dans une branche.
L’utilisation de LABRANCHE (2, 17, 4) nous donne les points de la quatrième matière de l’étudiant n° 17 de 2ème année , il s’agit d’un nombre de 2 positions en PIC 99. Cette zone autorise l’usage de 3
indices et de toujours 3 indices.

Les points du premier examen du deuxième étudiant de troisième année s’écrira :
         LABRANCHE (3, 2, 1)

Pour déplacer l’ensemble des points de l’étudiant 5 de première année on écrira :
         CODE-ETUDIANT (1, 5)

Pour déplacer l’ensemble des points des étudiants de première année on écrira :
         LANNEE (1)

4.7.4 La clause OCCURS

OCCURS n TIMES, spécifie qu’un groupe ou un élément se reproduit n fois. Dans notre exemple nous avions considéré 3 années de 55 étudiants ayant au maximum 15 banches. Cette clause ne peut pas s’écrire à un niveau 1. Pour définir une table à plusieurs niveaux, chaque OCCURS doit être de niveau inférieur sans quoi on obtient plusieurs tables à 1 niveau.
Le mot TIMES est facultatif.

Une clause VALUE spécifiée pour un OCCURS initialise chaque position à cette valeur.

Pour initialiser une table à des valeurs différentes on doit utiliser la clause REDEFINES sous la forme suivante :

01 ENSEMBLE.
   02 FILLER PIC X(9) VALUE "JANVIER".
   02 FILLER PIC X(9) VALUE "FEVRIER".
   02 FILLER PIC X(9) VALUE "MARS".
   02 FILLER PIC X(9) VALUE "AVRIL".
   02 FILLER PIC X(9) VALUE "MAI".
   02 FILLER PIC X(9) VALUE "JUIN".
   02 FILLER PIC X(9) VALUE "JUILLET".
   02 FILLER PIC X(9) VALUE "AOUT".
   02 FILLER PIC X(9) VALUE "SEPTEMBRE".
   02 FILLER PIC X(9) VALUE "OCTOBRE".
   02 FILLER PIC X(9) VALUE "NOVEMBRE".
   02 FILLER PIC X(9) VALUE "DECEMBRE".

01 TABLE-MOIS REDEFINES ENSEMBLE.
   02 MOIS OCCURS 12 PIC X(
9).

4.5 SYMBOLES FLOTTANTS

Pour créer un PICTURE qui contient un symbole flottant, on remplace chaque Z par le symbole qui doit précéder le nombre ( ceux-ci peuvent être * + – Z)

01 E-ITEM PIC 9(8)V99.
01 S-ITEM PIC +++,+++,++9.99.
MOVE E-ITEM TO S-ITEM.
     E-ITEM        S-ITEM
     1289344506    +12,893,445.06
     0000000835    +8.35
     0002565700    +25,657.00

Il est à noter que le premier + – ne prend pas la place d’un caractère numérique. Donc il faut compter une position de plus afin de garder l’intégrité de la donnée.
Pour éviter qu’un signe soit imprimé sans chiffre, la clause BLANK WHEN ZERO est utilisée.

01 E-ITEM PIC S999.
01 S-ITEM PIC ++++ BLANK WHEN ZERO.
MOVE E-ITEM TO S-ITEM.
     E-ITEM      S-ITEM
     -023        • -23
     +131        +131
     000        • • • •

La clause BLANK WHEN ZERO est utilisée avec les items numériques. Si la valeur de l’item est nulle, l’item ne contient que des espaces.
La clause REDEFINES permet de définir des structures de données différentes pour une même zone de mémoire.
La clause JUSTIFIED est utilisée pour modifier la justification (cadrage) des items alphanumériques ou alphabétiques.
La clause SIGN, utilisée pour les items numériques de types DISPLAY contenant un PICTURE S, indique le mode de représentation du signe.
La clause OCCURS sert à définir un tableau.

Le mot réservé FILLER est utilisé :

  • Pour indiquer la présence dans un fichier d’entrée d’un ou plusieurs champs auxquels on ne fera pas référence.
  • Le mot FILLER peut apparaître plus d’une fois dans un programme.
  • Le mot FILLER est optionnel.

4.8 INDEXATION

L’utilisation des tables est inchangée, mais l’accès mémoire est plus rapide, certaines instructions de recherche peuvent être utilisées ce qui facilite la programmation.
Dans ce cas les indices utilisés sont des données spéciales appelées INDEX (représentation de l’indexation). Ceux-ci doivent être définis par la clause INDEXED BY des clauses OCCURS.

Description d’une table :

01 TABLE.
   02 INFO OCCURS 10 INDEXED BY J PIC X(33).

Utilisation :

MOVE "Ceci est un test " TO INFO (J).
MOVE "Ceci est un test " TO INFO (J + 3).

Remarque :

Les INDEX ne peuvent être modifiés ou initialisés que par PERFORM ou par l’instruction SET.
L’index qui définit un OCCURS doit toujours être utilisé avec le nom de son OCCURS dans notre cas J et INFO.
Une opération + ou – dans la parenthèse peut être réalisée, ce qui donne une indexation relative.
L’entier utilisé doit être > 0 et non signé, le signe doit être précédé et suivi d’un blanc.
On ne peut pas mélanger les INDICES et les INDEX.

Exemple :

01 TABLE.
   02 PCODE OCCURS 3 TIMES INDEXED BY PAR.
   03 ACODE OCCURS 3 TIMES INDEXED BY AGE.
   04 MF OCCURS 2 TIMES INDEXED BY F PIC 9999 USAGE DISPLAY.

La table est de dimension (3, 3, 2) et référencée par MF (PAR, AGE + 2, F – 1)

La clause OCCURS dans le cas des INDEX

Format 1 :

               | ASCENDING  |
OCCURS n TIMES |            |KEY is nom-de-donnée-a, …
               | DESCENDING |
         INDEXED BY nom-index.

Format 2 :

OCCURS n TO m TIMES [DEPENDING ON nom-de-donnée1]
    | ASCENDING  |KEY is nom-de-donnée2, nom-de-donnée3,…
    | DESCENDING |
         INDEXED BY nom-index.

La clause ASCENDING ou DESCENDING spécifie l’argument de classement de la table de manière à préparer les recherches futures par l’instruction SEARCH.

01 TABLE.
   02 ELEMENT OCCURS 100 ASCENDING KEY COD.
      04 COD    PIC XX.
      04 VALEUR PIC S9999 BINARY

Ce qui signifie que le programmeur rangera les différentes informations de la table dans l’ordre croissant du COD. Il peut y avoir un maximum de 12 arguments de classement. Il est bien entendu que la valeur du classement ne peut dépendre que d’une variable incluse au tableau.

Exemples

Mise à zéro d’une table à 2 dimensions.

Soit une table de 30 lignes et 30 colonnes. Chaque élément est numérique entier de 4 de long en display. On demande d’initialiser le tableau à 1.

WORKING-STORAGE SECTION.
01 TABLE.
   02 LIGNES OCCURS 30.
      05 COLON OCCURS 30.
         10 ELEMENT PIC 9999.
01 I    PIC 99 VALUE 0.
01 J    PIC 99 VALUE 0.

PROCEDURE DIVISION.
DEB.
     PERFORM VARYING I FROM 1 BY 1 UNTIL I > 30
               AFTER J FROM 1 BY 1 UNTIL J > 30
               MOVE 1 TO ELEMENT (I, J)
     END-PERFORM.

Soit une table de 30 lignes et 30 colonnes.
Chaque élément du tableau est formé d’une zone numérique entière de 4 de long en display et d’une zone alphanumérique de 20 caractères.
On demande d’initialiser les numériques à 5 et les alphanumériques à blancs.

WORKING-STORAGE SECTION.
01 TABLE.
   02 LIGNES OCCURS 30.
      05 COLON OCCURS 30.
         10 ELEMENT PIC 9999.

         10 CARACTER PIC X(20).

01 I    PIC 99 VALUE 0.
01 J    PIC 99 VALUE 0.

PROCEDURE DIVISION.
DEB.
     PERFORM VARYING I FROM 1 BY 1 UNTIL I > 30
               AFTER J FROM 1 BY 1 UNTIL J > 30
               MOVE SPACE TO CARACTER(I, J)

               MOVE 5 TO ELEMENT (I, J)

     END-PERFORM.

Soit le vecteur

01 VECT.
   03 A PIC XXX OCCURS 4.
   03 B PIC XXX OCCURS 4.

Et le vecteur

01 VECT2.
   03 A OCCURS 4.
      05 B OCCURS 4 PIC XXX.

Le premier vecteur représente 2 petits tableaux séparés à 1 dimension de 4 éléments chacun.
Le second correspond à 1 tableau à 2 dimensions de 4 lignes de 4 colonnes chacune.

Exemple – MERGE

Classification interne

Instruction MERGE dans un programme COBOL.
Nous avons vu dans d’autres articles comment faire un MERGE dans un JCL.
Dans cet article, nous verrons comment faire cela dans un programme cobol.
Utilité? Ça dépend.
La vérité est qu’étant capable de faire cela par JCL, je ne vois aucune raison de le faire dans un programme.
Mais qui sait!
Certains lecteurs pourront peut-être nous donner une idée de son utilisation pratique.

MERGE:

L’instruction MERGE en cobol sert à joindre deux fichiers en tenant compte de la clé par laquelle ils sont triés.
C’est-à-dire que nous ne pouvons pas MERGE des fichiers désordonnés.
Ce qu’il fera, c’est “mettre” les clés correspondantes ensemble dans le fichier de sortie.

Pour l’exemple, nous utiliserons :
– 2 fichiers d’entrée avec les données à joindre.
– 1 fichier temporaire où se produira la MERGE.

Les données des fichiers d’entrée pour notre exemple seront :

Fichier 1Fichier 2
A
B
C
B
C
E

 IDENTIFICATION DIVISION.
 PROGRAM-ID.PRGMERGE.

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

 INPUT-OUTPUT SECTION. 
 FILE-CONTROL.

* Définition des fichiers

 SELECT TABLE-MERGE    ASSIGN TO DISK 'SORTWORK'.
 SELECT TABLE-FICHIER1 ASSIGN TO FICHIER1.
 SELECT TABLE-FICHIER2 ASSIGN TO FICHIER2.

 DATA DIVISION.
 FILE SECTION.

* Fichiers physiques 

 FD  TABLE-FICHIER1 
     DATA RECORD IS FICHIER1.

 01  FICHIER1.
     05 FILLER                 PIC X(001).

 FD  TABLE-FICHIER2
     DATA RECORD IS FICHIER2.

 01  FICHIER2.
     05 FILLER                 PIC X(001).

* Fichier temporaire 

 SD  TABLE-MERGE
     DATA RECORD IS ELEMENTO-MERGE.

 01  ELEMENT-MERGE.
     05 MERGE-CLE1           PIC X(001).

 WORKING-STORAGE SECTION.

* Variable où nous enregistrerons le résultat de MERGE

 01  VARIABLES.
     05 WA-REGISTRE.
        10 WA-AUX-CLE1       PIC X(001).

* Switch pour la boucle

 01  SWITCH.
     05 SW-FIN-TABLE-MERGE    PIC X(001).
        88 SI-FIN-TABLE-MERGE VALUE 'O'.
        88 NO-FIN-TABLE-MERGE VALUE 'N'.

* Enregistrement de données après MERGE

 01  WR-ELEMENT-MERGE.
     05 WR-MERGE-CLE1        PIC X(001).

 PROCEDURE DIVISION.

     PERFORM 1000-INIT
     PERFORM 2000-PROCESS
     PERFORM 9000-FINAL
     .

 1000-INIT.

     INITIALIZE VARIABLES
     .

 2000-PROCESS.

* Instruction MERGE 
* Nous joignons FICHIER1 et FICHIER2 dans TABLE-MERGE par clé 
* MERGE-CLE1 

     MERGE TABLE-MERGE ASCENDING KEY MERGE-CLE1
           USING FICHIER1 FICHIER2
           OUTPUT PROCEDURE 2100-PROCESS-SORTIE

* Dans OUTPUT PROCED nous utiliserons les informations déjà recueillies 

     IF SORT-RETURN NOT = ZEROS
        DISPLAY 'ERREUR DANS LE MERGE:' SORT-RETURN
     END-IF
     .

 2100-PROCESS-SORTIE.

* On passe du fichier temporaire au registre de sortie avec 
* l'instruction RETURN 
* On affiche les informations d'une variable définie dans 
* le programme 


     SET NO-FIN-TABLE-MERGE TO TRUE

     PERFORM UNTIL SI-FIN-TABLE-UNION
        RETURN TABLE-MERGE INTO WR-ELEMENT-MERGE
                AT END
                SET SI-FIN-TABLE-MERGE TO TRUE
                NOT AT END
                MOVE WR-MERGE-CLE1 TO WA-AUX-CLE1
                DISPLAY 'REGISTRE-> ' WA-REGISTRE
        END-RETURN
     END-PERFORM
     .

 9000-FINAL.

     STOP RUN
     .
RESULTAT : 

REGISTRE-> A 
           B
           B 
           C 
           C 
           E

Remarque :
même si vous ne voyez aucun paragraphe “ouvrir le fichier”, “lire le fichier”, etc., cela ne signifie pas que nous avons perdu le FOCUS, c’est juste que ce n’est pas nécessaire !

Exemple – MOVE

Programme utilisant le MOVE :

IDENTIFICATION DIVISION.
PROGRAM-ID.  MOVE.
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 9(009)V99    VALUE ZEROES. 
    05  VALEUR-2          PIC 9(009)V99    VALUE ZEROES. 
    05  VALEUR-3          PIC 9(009)V99    VALUE ZEROES. 
    05  VALEUR-4          PIC 9(009)       VALUE ZEROES. 
    05  VALEUR-5          PIC 9(009)       VALUE ZEROES. 

    05  ITEM-1.
        10  WS-NOME-1     PIC X(003)       VALUE 'LA'.
        10  WS-NOME-2     PIC X(011)       VALUE 'COMMUNAUTE'.
        10  WS-NOME-3     PIC X(003)       VALUE 'DU'.
        10  WS-NOME-4     PIC X(006)       VALUE 'COBOL'.

    05  ITEM-2.
        10  WS-NOME-2       PIC X(011).
        10  WS-NOME-1       PIC X(003).
        10  WS-NOME-3       PIC X(003).
        10  WS-NOME-4       PIC X(006).

    05  ITEM-3.
        10  WS-NOME-3       PIC X(003).
        10  WS-NOME-1       PIC X(003).
        10  WS-NOME-2       PIC X(011).
        10  WS-NOME-4       PIC X(006).

    05  ITEM-4.
        10  WS-NOME-4       PIC X(006).
        10  WS-NOME-1       PIC X(003).
        10  WS-NOME-2       PIC X(011).
        10  WS-NOME-3       PIC X(003).

PROCEDURE DIVISION.

001-INIT.

Exemple MOVE

    MOVE 5892,12 TO VALEUR-1
    MOVE 1234,56 TO VALEUR-2
    MOVE   88,12 TO VALEUR-3
    MOVE    5892 TO VALEUR-4
    MOVE VALOR-4 TO VALEUR-5

    DISPLAY "VALEUR-1 : " VALEUR-1 
    DISPLAY "VALEUR-2 : " VALEUR-2 
    DISPLAY "VALEUR-3 : " VALEUR-3 
    DISPLAY "VALEUR-4 : " VALEUR-4 
    DISPLAY "VALEUR-5 : " VALEUR-5 

* Resultat de test:

* VALEUR-1 : 000005892,12
* VALEUR-2 : 000001234,56
* VALEUR-3 : 000000088,12
* VALEUR-4 : 000005892
* VALEUR-5 : 000005892

Exemple MOVE CORRESPONDING

    MOVE CORR          ITEM-1 TO ITEM-2.
    MOVE CORR          ITEM-1 TO ITEM-3.
    MOVE CORRESPONDING ITEM-1 TO ITEM-4.

    DISPLAY "ITEM-1  : " ITEM-1 
    DISPLAY "ITEM-2  : " ITEM-2 
    DISPLAY "ITEM-3  : " ITEM-3 
    DISPLAY "ITEM-4  : " ITEM-4 

* Resultat de test:

* ITEM-1  : LA COMMUNAUTE DU COBOL
* ITEM-2  : COMMUNAUTE LA DU COBOL 
* ITEM-3  : DU LA COMMUNAUTE COBOL 
* ITEM-4  : COBOL LA COMMUNAUTE DU 

Exemple – MULTIPLY

Programme utilisant le MULTIPLY :

IDENTIFICATION DIVISION.
PROGRAM-ID.  MULTIPLY.
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(009)       VALUE ZEROES. 
    05  VALEUR-2         PIC S9(009)       VALUE ZEROES. 
    05  VALEUR-3         PIC S9(009)       VALUE ZEROES. 

PROCEDURE DIVISION.

001-INIT.

Exemple MULTIPLY

    MOVE   8 TO VALEUR-1
    MOVE   9 TO VALEUR-2
    MULTIPLY VALEUR-1 BY VALEUR-2	
    DISPLAY "VALEUR-1  " VALEUR-1 
    DISPLAY "VALEUR-2  " VALEUR-2 

* Resultat de test:

* VALEUR-1  +000000008
* VALEUR-2  +000000072

    MOVE  23 TO VALEUR-1
    MULTIPLY 5 BY VALEUR-1	
    DISPLAY "VALEUR-1  " VALEUR-1 

* Resultat de test:

* VALEUR-1  +000000115

    MOVE -10 TO VALEUR-1
    MULTIPLY 5 BY VALEUR-1	
    DISPLAY "VALEUR-1  " VALEUR-1 

* Resultat de test:

* VALEUR-1  -000000050

    MOVE -10 TO VALEUR-1
    MULTIPLY -5 BY VALEUR-1	
    DISPLAY "VALEUR-1  " VALEUR-1 

* Resultat de test:

* VALEUR-1  +000000050

Exemple MULTIPLY GIVING

    MOVE   8 TO VALEUR-1
    MOVE   9 TO VALEUR-2
    MOVE  16 TO VALEUR-3
    MULTIPLY VALEUR-1 BY VALEUR-2 GIVING VALEUR-3	
    DISPLAY "VALEUR-1  " VALEUR-1 
    DISPLAY "VALEUR-2  " VALEUR-2 
    DISPLAY "VALEUR-3  " VALEUR-3 

* Resultat de test:

* VALEUR-1  +000000008
* VALEUR-2  +000000009
* VALEUR-3  +000000072

    MOVE  10 TO VALEUR-1
    MOVE  -2 TO VALEUR-2
    MULTIPLY VALEUR-1 BY VALEUR-2 GIVING VALEUR-3	
    DISPLAY "VALEUR-1  " VALEUR-1 
    DISPLAY "VALEUR-2  " VALEUR-2 
    DISPLAY "VALEUR-3  " VALEUR-3 

* Resultat de test:

* VALEUR-1  +000000010
* VALEUR-2  -000000002
* VALEUR-3  -000000020

    MOVE -10 TO VALEUR-1
    MOVE   2 TO VALEUR-2
    MULTIPLY VALEUR-1 BY VALEUR-2 GIVING VALEUR-3	
    DISPLAY "VALEUR-1  " VALEUR-1 
    DISPLAY "VALEUR-2  " VALEUR-2 
    DISPLAY "VALEUR-3  " VALEUR-3 

* Resultat de test:

* VALEUR-1  -000000010
* VALEUR-2  +000000002
* VALEUR-3  -000000020

    MOVE -10 TO VALEUR-1
    MOVE  -2 TO VALEUR-2
    MULTIPLY VALEUR-1 BY VALEUR-2 GIVING VALEUR-3	
    DISPLAY "VALEUR-1  " VALEUR-1 
    DISPLAY "VALEUR-2  " VALEUR-2 
    DISPLAY "VALEUR-3  " VALEUR-3 

* Resultat de test:

* VALEUR-1  -000000010
* VALEUR-2  -000000002
* VALEUR-3  +000000020

    MOVE  23 TO VALEUR-1
    MOVE  78 TO VALEUR-2
    MULTIPLY 5       BY VALEUR-2 GIVING VALEUR-2	
    DISPLAY "VALEUR-1  " VALEUR-1 
    DISPLAY "VALEUR-2  " VALEUR-2 

* Resultat de test:

* VALEUR-1  +000000023
* VALEUR-2  +000000390

Exemple – SEARCH dans une table

Programme utilisant le SEARCH :

      *----------------------------------------------------
       IDENTIFICATION DIVISION.                                         
      *----------------------------------------------------
       PROGRAM-ID.       SEARCH.                                      
       AUTHOR.           LA COMMUNAUTE DU COBOL.                      
      *----------------------------------------------------
      *  PROGRAMME     : SEARCH                                       
      *  OBJECTIF      : UTILISER LA COMMANDE SEARCH DANS 
      *                : UNE TABLE          
      *----------------------------------------------------

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

       DATA DIVISION.

       WORKING-STORAGE SECTION.                                         

       01  WS-TABLE-ETATS.                                           
           05 TAB-NOM-ETAT.                                              
              10  FILLER       PIC X(021) VALUE "ACACRE               ".
              10  FILLER       PIC X(021) VALUE "ALALAGOAS            ".
              10  FILLER       PIC X(021) VALUE "AMAMAZONAS           ".
              10  FILLER       PIC X(021) VALUE "APAMAPA              ".
              10  FILLER       PIC X(021) VALUE "BABAHIA              ".
              10  FILLER       PIC X(021) VALUE "CECEARA              ".
              10  FILLER       PIC X(021) VALUE "DFDISTRITO FEDERAL   ".
              10  FILLER       PIC X(021) VALUE "ESESPIRITO SANTO     ".
              10  FILLER       PIC X(021) VALUE "GOGOIAS              ".
              10  FILLER       PIC X(021) VALUE "MAMARANHAO           ".
              10  FILLER       PIC X(021) VALUE "MGMINAS GERAIS       ".
              10  FILLER       PIC X(021) VALUE "MSMATO GROSSO DO SUL ".
              10  FILLER       PIC X(021) VALUE "MTMATO GROSSO        ".
              10  FILLER       PIC X(021) VALUE "PAPARA               ".
              10  FILLER       PIC X(021) VALUE "PBPARAIBA            ".
              10  FILLER       PIC X(021) VALUE "PEPERNAMBUCO         ".
              10  FILLER       PIC X(021) VALUE "PIPIAUI              ".
              10  FILLER       PIC X(021) VALUE "PRPARANA             ".
              10  FILLER       PIC X(021) VALUE "RJRIO DE JANEIRO     ".
              10  FILLER       PIC X(021) VALUE "RNRIO GRANDE DO NORTE".
              10  FILLER       PIC X(021) VALUE "RORONDONIA           ".
              10  FILLER       PIC X(021) VALUE "RRRORAIAMA           ".
              10  FILLER       PIC X(021) VALUE "RSRIO GRANDE DO SUL  ".
              10  FILLER       PIC X(021) VALUE "SCSANTA CATARINA     ".
              10  FILLER       PIC X(021) VALUE "SESERGIPE            ".
              10  FILLER       PIC X(021) VALUE "SPSAO PAULO          ".
              10  FILLER       PIC X(021) VALUE "TOTOCANTINS          ".
           05 TAB-NOM-ETAT-R    REDEFINES  TAB-NOM-ETAT.                  
              07  WS-ETAT      OCCURS 27 TIMES                          
                               ASCENDING KEY SIGLA-UF                  
                               INDEXED BY IX-TAB.                       
                  10  SIGLE-ETAT PIC X(002).                              
                  10  NOM-ETAT   PIC X(019).                              

       01  WS-AUXILIARES.                                               
           05 NON-TROUVE         PIC 9(003) VALUE ZEROES.       
           05 WS-SIGLE-ETAT      PIC X(002) VALUE SPACES.       
           05 WS-VARIABLE        PIC X(019) VALUE SPACES.       

       PROCEDURE DIVISION.                                              

           MOVE ZEROES TO NON-TROUVE                                
           MOVE "SP"   TO WS-SIGLE-ETAT
           SET IX-TAB TO 1                                              
           SEARCH WS-ETAT                                           
                  AT END                                                
                     MOVE 1 TO NON-TROUVE                         
                WHEN SIGLE-ETAT (IX-TAB) EQUAL WS-SIGLE-ETAT                
                     MOVE NOM-ETAT (IX-TAB) TO WS-VARIABLE                           
           END-SEARCH                                                   

           IF  NON-TROUVE  EQUAL 1
               DISPLAY "SIGLE - " WS-SIGLE-ETAT " NON TROUVE"
           ELSE
               DISPLAY "SIGLE - " WS-SIGLE-ETAT " - "
                        WS-VARIABLE " TROUVE "
           END-IF 
           STOP RUN.

           SIGLE - SP - SAO PAULO           TROUVE

           MOVE "FN"   TO WS-SIGLE-ETAT
           SIGLE - FN NON TROUVE

Exemple – PERFORM VARYING UNTIL AFTER

Un bloc d’instruction ou un paragraphe/section sera exécuté dans PERFORM VARYING jusqu’à ce que la condition devienne vraie dans la phrase UNTIL.

Dans l’exemple ci-dessous, il y a trois DEPARTEMENTS et chaque département a deux EMPLOYES.

       IDENTIFICATION DIVISION.                                         
       PROGRAM-ID.       PERFORM.                                      
       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-DEPT-01       PIC 9(002) VALUE ZEROES.
           05 WS-DEPT-02       PIC 9(002) VALUE ZEROES.

       01  TABLE-DEPARTAMENT.
           05 DEPARTAMENT                OCCURS 3 TIMES.
              10 NOM-DEPT      PIC X(20).
              10 NOM-EMPL      PIC X(20) OCCURS 2 TIMES.

       PROCEDURE DIVISION.

           MOVE "FACTURATION"   TO NOM-DEPTO (1)
           MOVE "QUALITE"       TO NOM-DEPTO (2)
           MOVE "MARKETING"     TO NOM-DEPTO (3)

           MOVE "Carl"          TO NOM-EMPL (1 1)	
           MOVE "Albert"        TO NOM-EMPL (1 2)	
           MOVE "Augustin"      TO NOM-EMPL (2 1)	
           MOVE "Eduard"        TO NOM-EMPL (2 2)	
           MOVE "Antoine"       TO NOM-EMPL (3 1)	
           MOVE "Marie"         TO NOM-EMPL (3 2)  

           DISPLAY "--------------------------------------------------------------------------------------------"
           DISPLAY "En utilisant PERFORM VARYING UNTIL "
           DISPLAY "--------------------------------------------------------------------------------------------"
           
           PERFORM VARYING WS-DEPT-01 FROM 1 BY 1
                     UNTIL WS-DEPT-01 > 3
              PERFORM VARYING WS-DEPT-02 FROM 1 BY 1
                        UNTIL WS-DEPT-02 > 2
                 PERFORM PARAGRAF-1 THRU PARAGRAF-1-FIN
              END-PERFORM                                                     
           END-PERFORM                                                     
           
           DISPLAY "--------------------------------------------------------------------------------------------"
           DISPLAY "En utilisant PERFORM VARYING UNTIL AFTER"
           DISPLAY "--------------------------------------------------------------------------------------------"
			  
           PERFORM PARAGRAF-1 THRU PARAGRAF-1-FIN
                  VARYING WS-DEPT-01 FROM 1 BY 1
                          UNTIL WS-DEPT-01 > 3
                  AFTER   WS-DEPT-02 FROM 1 BY 1
                          UNTIL WS-DEPT-02 > 2.
           STOP RUN.

       PARAGRAFO-1.

           DISPLAY " DEPARTAMENT : "  NOM-DEPT (WS-DEPT-01)
                   " EMPLOYEES   : "  NOME-EMPL (WS-DEPT-01 WS-DEPT-02).

       PARAGRAF-1-FIN.
           EXIT.

Résultat du test

--------------------------------------------------------------------------------------------
En utilisant PERFORM VARYING UNTIL 
--------------------------------------------------------------------------------------------
       DEPARTAMENT: FACTURATION          EMPLOYEES   : Carl
       DEPARTAMENT: FACTURATION          EMPLOYEES   : Albert
       DEPARTAMENT: QUALITE              EMPLOYEES   : Augustin
       DEPARTAMENT: QUALITE              EMPLOYEES   : Eduard
       DEPARTAMENT: MARKETING            EMPLOYEES   : Antoine
       DEPARTAMENT: MARKETING            EMPLOYEES   : Marie
--------------------------------------------------------------------------------------------
En utilisant PERFORM VARYING UNTIL AFTER
--------------------------------------------------------------------------------------------
       DEPARTAMENT: FACTURATION          EMPLOYEES   : Carl
       DEPARTAMENT: FACTURATION          EMPLOYEES   : Albert
       DEPARTAMENT: QUALITE              EMPLOYEES   : Augustin
       DEPARTAMENT: QUALITE              EMPLOYEES   : Eduard
       DEPARTAMENT: MARKETING            EMPLOYEES   : Antoine
       DEPARTAMENT: MARKETING            EMPLOYEES   : Marie