SlideShare une entreprise Scribd logo
1  sur  47
Bruno Delb                             http://www.brunodelb.com                         Date : 12/02/2001

                                                Le langage Cobol




                                                Sommaire

LA STRUCTURE D’UN PROGRAMME..........................................................................5
  QUELLE EST L’HISTOIRE DU COBOL ?...............................................................................5
  QUELLE EST LA STRUCTURE D'UN PROGRAMME ?....................................................................5
    IDENTIFICATION DIVISION...................................................................................5
    ENVIRONMENT DIVISION......................................................................................5
    DATA DIVISION...................................................................................................6
LES COMMANDES.....................................................................................................9
  ACCEPT..................................................................................................................9
    Définition............................................................................................................9
    Syntaxe 1...........................................................................................................9
    Description 1.......................................................................................................9
    Syntaxe 1...........................................................................................................9
    Description 1.......................................................................................................9
    Equivallence Pascal..............................................................................................9
  ADD.......................................................................................................................9
    Définition............................................................................................................9
    Syntaxe..............................................................................................................9
    Equivalence Pascal...............................................................................................9
  CLOSE..................................................................................................................10
    Définition..........................................................................................................10
    Syntaxe............................................................................................................10
  COMPUTE.............................................................................................................10
    Définition..........................................................................................................10
  DISPLAY...............................................................................................................10
    Définition..........................................................................................................10
    Syntaxe 1..........................................................................................................10
    Syntaxe 2..........................................................................................................11
    Description 1.....................................................................................................11
    Description 2.....................................................................................................11
  DIVIDE.................................................................................................................11
    Définition..........................................................................................................11
    Syntaxe............................................................................................................11
  EXIT.....................................................................................................................11
    Définition..........................................................................................................11
    Syntaxe............................................................................................................11
  IF........................................................................................................................11
    Définition..........................................................................................................11
    Syntaxe............................................................................................................11
  MULTIPLY.............................................................................................................12
    Définition..........................................................................................................12
    Syntaxe............................................................................................................12
  OPEN...................................................................................................................12
    Définition..........................................................................................................12
    Syntaxe............................................................................................................12
  PERFORM..............................................................................................................12
    Définition..........................................................................................................12
    Syntaxe............................................................................................................13
    Equivalence Pascal.............................................................................................13


                                                             1
Bruno Delb                             http://www.brunodelb.com                         Date : 12/02/2001

                                                Le langage Cobol

  READ...................................................................................................................13
    Définition..........................................................................................................13
    Syntaxe............................................................................................................13
  SUBSTRACT..........................................................................................................13
    Définition..........................................................................................................13
    Syntaxe............................................................................................................13
    Equivalence Pascal.............................................................................................14
  WRITE..................................................................................................................14
    Définition..........................................................................................................14
    Syntaxe............................................................................................................14
  >.........................................................................................................................14
    Définition..........................................................................................................14
    Syntaxe 1..........................................................................................................14
  <.........................................................................................................................15
    Définition..........................................................................................................15
    Syntaxe............................................................................................................15
  =.........................................................................................................................15
    Définition..........................................................................................................15
    Syntaxe............................................................................................................15
  >=.......................................................................................................................15
    Définition..........................................................................................................15
    Syntaxe............................................................................................................15
  <=.......................................................................................................................15
    Définition..........................................................................................................15
    Syntaxe............................................................................................................15
  IS........................................................................................................................16
    Définition..........................................................................................................16
    Syntaxe............................................................................................................16
LA PROGRAMMATION STRUCTURÉE......................................................................17
  QU’EST-CE QU’UN PROGRAMME ?....................................................................................17
  QUELS SONT LES TYPES DE STRUCTURE EN ARBRE ?.............................................................17
    Qu’est-ce qu’un arbre ?.......................................................................................17
  QUEL EST LE SCHÉMA DE CHARGEMENT DE TABLE ?..............................................................18
  QUEL EST LE SCHÉMA DE RECHERCHE ?............................................................................18
DE PASCAL À COBOL..............................................................................................21
  STRUCTURE GÉNÉRALE DU PROGRAMME.............................................................................21
  WORKING-STORAGE SECTION................................................................................21
    Scalaires non numériques...................................................................................21
    Enregistrements.................................................................................................21
    Zone groupée....................................................................................................22
    Identification d'un champ....................................................................................22
    Types................................................................................................................22
    Tableaux...........................................................................................................22
    Affectation.........................................................................................................23
    Entrées sorties...................................................................................................23
    Until.................................................................................................................23
    Fichier séquentiel...............................................................................................24
    IDENTIFICATION DIVISION.................................................................................24
    ENVIRONMENT DIVISION....................................................................................24
    DATA DIVISION.................................................................................................25
    PROCEDURE DIVISION........................................................................................25
    Règles d'écriture................................................................................................25
    Déclaration de fichier [SELECT]...........................................................................25
    Déclaration d'enregistrement [FD].......................................................................26
    Description d'enregistrement...............................................................................27


                                                             2
Bruno Delb                            http://www.brunodelb.com                        Date : 12/02/2001

                                                Le langage Cobol

    Ouverture [OPEN]..............................................................................................27
    Fermeture [CLOSE]............................................................................................27
    Lecture [READ]..................................................................................................27
  ECRITURE [WRITE]................................................................................................28
FICHIER IMPRIMANTE..........................................................................................29
  FICHIER LECTEUR DE CARTE..................................................................................29
  FICHIER IMPRIMANTE............................................................................................29
  ECRITURE [WRITE]................................................................................................29
  ECRITURE V 2 [WRITE]..........................................................................................29
    CARACTERE DE SAUT.........................................................................................30
FICHIER VSAM/ESDS............................................................................................30
  DECLARATION DE FICHIER [SELECT].......................................................................30
  OUVERTURE DE FICHIER [OPEN].............................................................................31
    option...............................................................................................................31
  FIN DE FICHIER.....................................................................................................31
  RE-ECRITURE DE FICHIER [REWRITE].....................................................................31
FICHIER VSAM/KSDS............................................................................................31
  DECLARATION DE FICHIER [SELECT].......................................................................31
  OUVERTURE DE FICHIER [OPEN].............................................................................32
  POSITIONNEMENT DANS UN FICHIER [START].........................................................33
  LECTURE D'UN FICHIER [READ]..............................................................................34
  ECRITURE DANS UN FICHIER [WRITE].....................................................................34
    dépassement de capacité du fichier......................................................................35
  RE-ECRITURE DANS UN FICHIER [REWRITE]............................................................35
  SUPPRIMER UN ENREGISTREMENT [DELETE]............................................................35
  OUVERTURE POSSIBLE...........................................................................................36
FICHIER VSAM.......................................................................................................36
  CODE RETOUR......................................................................................................36
E/S........................................................................................................................38
  ARRET DE PROGRAMME [STOP]...............................................................................38
  LECTURE INFORMATION [ACCEPT]..........................................................................38
  ENVOI DE MESSAGE [DISPLAY]..............................................................................38
DONNEE ................................................................................................................39
  DEFINITION..........................................................................................................39
    numéro-niveau..................................................................................................39
    nom-donnée......................................................................................................39
    image...............................................................................................................39
    image alphanumérique.......................................................................................40
    image numérique...............................................................................................40
    image numérique - EBCDIC.................................................................................40
    image numérique d'édition..................................................................................41
    image alphabétique............................................................................................42
    valeur initiale (optionnel)....................................................................................42
    Représentation des données : USAGE...................................................................43
    Valeur binaire : COMPUTATIONAL........................................................................43
WORKING STORAGE SECTION...............................................................................44
  PRESENTATION.....................................................................................................44
  ZONE...................................................................................................................44
    ELEMENTAIRE....................................................................................................44
  GROUPEE..............................................................................................................45


                                                             3
Bruno Delb                          http://www.brunodelb.com                      Date : 12/02/2001

                                             Le langage Cobol

     INDEPENDANTE.................................................................................................45
     NOMBRE-NIVEAU...............................................................................................45
     Alignement mémoire..........................................................................................45
     Redéfinition des zones........................................................................................46
     Noms de condition..............................................................................................47
     Expression RENAMES..........................................................................................47
PROCEDURE DIVISION..........................................................................................48
  INTRODUCTION.....................................................................................................48




                                                          4
Bruno Delb                       http://www.brunodelb.com                 Date : 12/02/2001

                                           Le langage Cobol




La structure d’un programme




  Quelle est l’histoire du COBOL ?

            L’histoire du COBOL (COmmon Business Oriented Language) est résumée
            dans le tableau suivant.


                Année     Evénement
                1954      Premier langage évolué : FORTRAN
                1960      CODASYL (Conférence On DAta SYstem Language fournit une ébauche de description)
                          => COBOL 60, COBOL 61
                1968      COBOL 65 reconnu comme standard
                1974      Norme ANS (American National Standard)
                          CODASYL ajoute des perfectionnements au standard




  Quelle est la structure d'un programme ?

     IDENTIFICATION DIVISION.
Nom du programme.                            PROGRAM-ID. nom-programme.
Auteur                                       [AUTHOR. commentaire]
Installation.                                [INSTALLATION. commentaire]
Date d'écriture du programme.                [DATE-WRITTEN. commentaire]
Date   de         compilation   du           [DATE-COMPILED. commentaire]
programme.
Sécurité.                                    [SECURITY. commentaire]
Remarques diverses.                          [REMARKS. commentaire]

     ENVIRONMENT DIVISION.
  CONFIGURATION SECTION.
Nom de l'ordinateur sur lequel le            [SOURCE-COMPUTER. nom [WITH DEBUGGING
source a été écrit.
                                             MODEM].]
Nom de l'ordinateur sur lequel               [OBJECT-COMPUTER. nom-ordinateur
l'objet a été créé.
La taille mémoire est de "entier"            [MEMORY SIZE entier type]
unités      "type"     (WORDS,
CHARACTERS, MODULES).

                                             [PROGRAM COLLATING                SEQUENCE          IS    nom-
                                             alphabet].]



                                                      5
Bruno Delb                     http://www.brunodelb.com              Date : 12/02/2001

                                      Le langage Cobol

  INPUT-OUTPUT SECTION.
          FILE-CONTROL.
Associe le fichier physique au             SELECT [OPTIONNAL] fichier-physique ASSIGN
fichier logique [classique, ou
SYSIN (organe d'entrée) ou               TO
SYSOUT (organe de sortie)].
                                                          fichier-logique
Type              d'organisation           [RESERVE entier AREA]
(SEQUENTIAL,           INDEXED,
RELATIVE) séquentiel par défaut.
Type    d'accès (SEQUENTIAL,               [ORGANIZATION type-organisation]
INDEXED, RELATIVE) séquentiel
par défaut.

          [ACCESS MODE IS type-organisation]
          [RECORD KEY nom-donnee-1]
          [ALTERNATE RECORD KEY nom-donnee-2 [WITH DUPLICATES]]

     DATA DIVISION.
  FILE SECTION.
Le format des données est type-          FD fichier-physique [EXTERNAL] [GLOBAL]
format (F format fixe, V format
varaible, U format indéfini).             [RECORDING MODE IS type-format]
Spécifie la taille d'un bloc, les          [BLOCK CONTAINS [entier1 TO] entier2 type-
limites inférieure et supérieure de
la page étant entier1 et entier2         bloc]
unités de type-bloc (RECORDS,
CHARACTERS).
Spécifie le nombre de caractères           [RECORD CONTAINS entier3 [TO entier4]]
d'un    enregistrement   (simple
commentaire).

            [RECORD VARYING [FROM entier5]]
           [RECORD [To entier6] CHARACTERS]
             [DEPENDING ON nom-donnée]
Permet d'ajouter (STANDARD) ou             [LABEL RECORD type-label]
de ne pas ajouter (OMITTED)
selon "type-label" les "labels"
définis le Sytème de Gestion de
Fichier (SGF).

            [VALUE OF FILE-ID nom-système]
Liste des enregistrements      (en         [DATA RECORD nom-enreg1 [nom-enreg2] ...]
guise de commentaire).

            [LINAGE IS nom1 [FOOTING nom2]
                           [LINES TOP nom3]
                           [LINES BOTTOM nom4]]
           [CODE-SET nom-alphabet]
           [REPORT nom-état]
          01 nom-enreg1.
            ...



                                                 6
Bruno Delb                          http://www.brunodelb.com            Date : 12/02/2001

                                            Le langage Cobol

  WORKING-STORAGE SECTION.
           77         nom-element          PIC description [VALUE valeur].
Il faut "littéral1" <= "littéral2".            88      nom-condition VALUE ARE littéral1
                                                                 [THRU littéral2]
"nom-donnée1" est le nom de la                 01 à 49 nom-donnée1        [EXTERNAL] [GLOBAL]
donnée ou FILLER (permet de
définir une variable à laquelle on
n'a pas accès).
Redéfinit    "nom2"        avec       la              [REDEFINES nom-donnée2]
structure de "nom1".

                    [PIC description]
           ; Note : PIC peut être remplacé par PICTURE.
           DECLARATIVES.
           nom-section SECTION.




                                                       7
Bruno Delb                     http://www.brunodelb.com         Date : 12/02/2001

                                      Le langage Cobol




Les commandes




  ACCEPT

     Définition
          Lecture au clavier

     Syntaxe 1
          ACCEPT nom-donnée

     Description 1
          Lit une donnée au clavier et la met dans "nom-donnée".

     Syntaxe 1
          ACCEPT nom-donnée FROM nom-mnémonique

     Description 1
          "nom-mnémonique" est défini dans SPECIAL-NAMES ou vaut CONSOLE
          (clavier), DATE (6 octets), DAY (5 octets), DAY-OF-WEEK, ou TIME (8
          octets).

     Equivallence Pascal
          ACCEPT Zone <=> ReadLn (Zone);


  ADD

     Définition
          Addition

     Syntaxe
Affectation de "nom-donnée2 ..."         ADD nom-donnée1 ... TO nom-donnée2
à        "nom-donnée1        ...",
éventuellement avec arrondi.

                [ROUNDED] ...
Exécute "ordre1" en cas          de           [ON SIZE ERROR ordre1]
dépassement de capacité.
Exécute "ordre2" en cas de non                [NOT SIZE ERROR ordre2]
dépassement de capacité.
Indique la fin de l'ordre ADD.                [END-ADD]

     Equivalence Pascal


                                                 9
Bruno Delb                     http://www.brunodelb.com         Date : 12/02/2001

                                      Le langage Cobol

         ADD a b TO c d.
         <=>             c := c + a + b;
              d := d + a + b;
         ADD a b GIVING c;
         <=> c := a + b;




  CLOSE

    Définition
         Fermeture de fichier.
         Ferme le fichier "nom-fichier".

    Syntaxe
         CLOSE nom-fichier [type1 [FOR REMOVAL]]
         CLOSE nom-fichier [WITH type2]


  COMPUTE

    Définition
         Calcul
         Effectue des calculs.
         COMPUTE nom-donnée1
              [ROUNDED]
"nom-donnée1" reçoit la valeur               = expression
de "expression".
Exécute "ordre1" en cas        de            [ON SIZE ERROR ordre1]
dépassement de capacité.
Exécute "ordre2" en cas de non               [NOT SIZE ERROR ordre2]
dépassement de capacité.
Indique  la   fin   de     l'ordre           [END-COMPUTE]
COMPUTE.



  DISPLAY

    Définition
         Affichage à l'écran
         Affiche des données à l'écran.

    Syntaxe 1


                                                10
Bruno Delb                   http://www.brunodelb.com         Date : 12/02/2001

                                    Le langage Cobol

         DISPLAY nom-donnée1 ...

    Syntaxe 2
         DISPLAY nom-donnée1 ... UPON nom-mnémonique

    Description 1
         Affiche "nom-donnée1 ..." à l'écran.

    Description 2
         Idem mais dans un nom-mnémonique, sur l'écran (CONSOLE) ou sur le
         perforateur de carte (SYSPUNCH).


  DIVIDE

    Définition
         Division

    Syntaxe
INTO peut être remplacé par BY.        DIVIDE nom-donnée1 INTO nom-donnée2
"nom-donnée3"     :=     "nom-              [GIVING nom-donnée3 [ROUNDED] ... ]
donnée1" / "nom-donnée2"
Exécute "ordre1" en cas       de            [ON SIZE ERROR ordre1]
dépassement de capacité.
Exécute "ordre2" en cas de non              [NOT SIZE ERROR ordre2]
dépassement de capacité.
Indique   la   fin   de   l'ordre           [END-DIVIDIDE]
DIVIDIDE.



  EXIT

    Définition
         Sortie
         Ne fait rien (utilisé dans les paragraphes vides).

    Syntaxe
         EXIT


  IF

    Définition
         Condition "Si"
         Exécution "instruction1" à la condition "condition".

    Syntaxe


                                               11
Bruno Delb                      http://www.brunodelb.com         Date : 12/02/2001

                                       Le langage Cobol

Si "condition1" est vrai, alors           IF condition1 instruction1
"instruction1" est exécuté ou
"instruction1" peut être NEXT
SENTENCE           (pointe      sur
l'instruction suivante, juste après
le point).
Sinon, "instruction2" est exécuté.             [ELSE instruction2]
Indique la fin de l'ordre.                [END-IF]


  MULTIPLY

     Définition
             Multiplication
             Effectue une multiplication.

     Syntaxe
"nom-donnée1"     :=     "nom-            MULTIPLY nom-donnée1 BY nom-donnée2
donnée1" * "nom-donnée2"
"nom-donnée3"     :=     "nom-                 [GIVING nom-donnée3]
donnée1" * "nom-donnée2"

                 [ROUNDED]
Exécute "ordre1" en cas          de            [ON SIZE ERROR ordre1]
dépassement de capacité.
Exécute "ordre2" en cas de non                 [NOT SIZE ERROR ordre2]
dépassement de capacité.
Indique   la     fin   de    l'ordre           [END-DIVIDE]
MULTIPLY.



  OPEN

     Définition
             Ouverture de fichier
             Ouverture du fichier "nom-fichier"

     Syntaxe
en lecture                                OPEN INPUT nom-fichier [REVERSED]
                                          OPEN INPUT nom-fichier [WITH NO REWIND]
en écriture                               OPEN OUTPUT nom-fichier [WITH NO REWIND]
                                          OPEN I-O nom-fichier1 ...
                                          OPEN EXTEND nom-fichier1 ...


  PERFORM

     Définition


                                                  12
Bruno Delb                      http://www.brunodelb.com           Date : 12/02/2001

                                       Le langage Cobol

           Traitement de paragraphe
           Exécute une (ou des) procédure.

     Syntaxe
THRU permet l'enchaînement de             PERFORM     [nom-procedure1            [THRU        nom-
l'exécution        de      plusieurs
paragraphes avant de revenir à            procedure2]]
l'instruction qui suit PERFORM.
Continue     jusqu'à    ce    que              UNTIL condition [TEST moment]
"condition" soit vrai, le test se
faisant au moment "moment"
(BEFORE, AFTER).

                [ordre END-PERFORM]

     Equivalence Pascal
           PERFORM tâche
           UNTIL condition
           => condition à gauche, instruction à droite


  READ

     Définition
           Lecture de fichier
           Lit un enregistrement du fichier "nom-fichier".

     Syntaxe
INTO permet de transférer la              READ nom-fichier [NEXT] RECORD [INTO nom-
valeur dans "nom-donnée".
                                          donnée]
Exécute "ordre1" si arrivé en fin              [AT END ordre1]
de fichier.
Exécute "ordre2" si pas arrivé en              [NOT AT END ordre2]
fin de fichier.
Indique la fin de l'ordre "READ".              [END-READ]


  SUBSTRACT

     Définition
           Soustraction
           Effectue une soustraction.

     Syntaxe
"nom-donnée2"     :=     "nom-            SUBSTRACT         nom-donnée1    ...    FROM        nom-
donnée2" - "nom-donnée1 ..."
                                          donnée2
"nom-donnée3"     :=     "nom-                 [GIVING nom-donnée3]
donnée1" - "nom-donnée2"




                                                  13
Bruno Delb                       http://www.brunodelb.com         Date : 12/02/2001

                                        Le langage Cobol

               [ROUNDED]
Exécute "ordre1" en cas            de           [ON SIZE ERROR ordre1]
dépassement de capacité.
Exécute "ordre2" en cas de non                  [NOT SIZE ERROR ordre2]
dépassement de capacité.
Indique la      fin   de    l'ordre             [END-SUBSTRACT
SUBSTRACT.


      Equivalence Pascal
          SUBSTRACT a b FROM c GIVING d.
          <=> d := c - a b;


  WRITE

      Définition
          Ecriture d'enregistrement
          Ecrit l'enregistrement "nom-enreg1".

      Syntaxe
FROM permet d'écrire "nom-                 WRITE nom-enreg1 [FROM nom-donnée1]
donnée1"     à    la  place   de
l'enregistrement "nom-enreg1".
Fait sauter "nom-donnée2" lignes                [moment ADVANCING nom-donnée2 LINE]
au moment "moment" (AFTER,
BEFORE).

               [moment ADVANCING nom-mnémonique]
Fait sauter une page au moment                  [moment ADVANCING-PAGE]
"moment" (AFTER, BEFORE).
Exécute "ordre" si arrivé en fin                [END-OF-PAGE ordre]
de page (concerne l'imprimante).
Exécute "ordre" si pas arrivé en                [NOT END-OF-PAGE ordre]
fin     de     page    (concerne
l'imprimante).
Note : END-OF-PAGE <=> EOP.
Indique la fin de l'ordre WRITE.                [END-WRITE]


  >

      Définition
          Opérateur >

      Syntaxe 1
          nom-donnée1 IS                [NOT] GREATER nom-donnée2
                           [NOT] >
          nom-donnée1 > nom-donnée2




                                                   14
Bruno Delb             http://www.brunodelb.com   Date : 12/02/2001

                            Le langage Cobol

<

    Définition
       Opérateur <

    Syntaxe
       nom-donnée1 IS       [NOT] LESS nom-donnée2
                 [NOT] <
       nom-donnée1 < nom-donnée2


=

    Définition
       Opérateur =

    Syntaxe
       nom-donnée1 IS       [NOT] EQUAL nom-donnée2
                 [NOT] =
       nom-donnée1 = nom-donnée2


>=

    Définition
       Opérateur >=

    Syntaxe
       nom-donnée1 IS       [NOT] GREATER OR EQUAL nom-donnée2
                 [NOT] >=
       nom-donnée1 >= nom-donnée2


<=

    Définition
       Opérateur <=

    Syntaxe
       nom-donnée1 IS       [NOT] LESS OR EQUAL nom-donnée2
                 [NOT] <=
       nom-donnée1 >= nom-donnée2




                                       15
Bruno Delb             http://www.brunodelb.com   Date : 12/02/2001

                            Le langage Cobol

IS

 Définition
      Retourne le signe

 Syntaxe
      expression IS [NOT] signe
      signe vaut (POSITIVE, NEGATIVE, ZERO).




                                       16
Bruno Delb                    http://www.brunodelb.com          Date : 12/02/2001

                                      Le langage Cobol




La programmation structurée




    Qu’est-ce qu’un programme ?

         C'est un ensemble de traitements conditionnels ou non conditionnels
         appliqués à des objets hiérarchisés.


    Quels sont les types de structure en arbre ?

     Qu’est-ce qu’un arbre ?
         Le COBOL structuré utilise les arbres pragmatiques (ou programmatiques).
         Un arbre est constitué de :
•   la structure répétitive : s'applique aux objets
                           NOEUD
                       F   FEUILLE              D
                           OBJET

•   la structure alternative : s'applique aux traitements
                                 NOEUD
                       F   FEUILLE  FEUILLE D
                           OBJET    OBJET

    Qu’est-ce qu’un rond ?
         Un rond représente un noeud donnant naissance à une structure de niveau
         inférieur.
    Qu’est-ce qu’un feuille ?
         Une feuille est un noeud en bout d'arbre.
         Elle peut toujours être transformée en noeuds.
         => extensibilité de l'arbre
    Qu’est-ce qu’un carré ?
         Le carré représente une feuille dépendant toujours d'un noeud.
         Un noeud donne toujours naissance à au moins deux feuilles carrées.
    Comment lire l’arbre ?
         Le sens de lecture est de la droite vers la gauche (sens des flèches).
    Qu’est-ce qu’une feuille « Début » ?
           D                    Début (toujours à droite de l'arbre)

    Qu’est-ce qu’une feuille « Fin » ?
           F                    Fin (toujours à gauche de l'arbre)

    Qu’est-ce qu’une feuille « Intermédiaire » ?


                                                    17
Bruno Delb                     http://www.brunodelb.com   Date : 12/02/2001

                                       Le langage Cobol

          In                     Feuille intermédiaire s



    Quel est le schéma de chargement de table ?
                 CHARGEMENT D'UNE TABLE
          F      ARRETER             CLIENT D
                 PROGRAMME

         En partant du NOEUD :
•   exécuter D-NOEUD
•   exécuter CLIENT
•   exécuter I
•   rien ou arrêter programme
•   exécuter F-NOEUD
         => Passer d'une feuille carrée à une autre d'un même niveau, c'est-à-dire
         issue du même noeud en passant par l'intermédiaire de feuilles rondes qui
         sont choisies en fonction de conditions.


    Quel est le schéma de recherche ?




                                                     18
Bruno Delb                          http://www.brunodelb.com              Date : 12/02/2001

                                    Le langage Cobol

           RECHERCHE
           RECHERCHE CLIENT
           EDITER
  F        CLIENT               CUMULER         D     => SEARCH (1)
           NON                     MONTANT            => SEARCH ALL (2)
           TROUVE
  ***********
  * WORKING *
  ***********
  *
  WORKING-STORAGE SECTION.
  77 NB-POSTE                 COMP VALUE 0.
     88 DEPASSEMENT-TABLE            VALUE 121.
  77 INDIC-TROUVE              COMP VALUE 0.
     88 CLIENT-TROUVE             VALUE 1.
  01 TABLE.
     05 POSTE-TABLE            OCCURS 120
                     DEPENDING ON NB-POSTE
                     ASCENDING CLIENT-TABLE (2)
                     INDEXED BY IND-POSTE.
       10 CLIENT-TABLE PIC XXXX.
       10 MONTANT-TABLE PIC 59(5)V99 COMP-3.
  **************************
  * CHARGEMENT D'UNE TABLE *
  **************************
  *
  ************
  * STRUCTURE
  ************
  *
  CHARGEMENT-TABLE-CLIENT.
      PERFORM D-CHARGEMENT-TABLE-CLIENT.
      PERFORM CLIENT.
    UNTIL DERNIER-CLIENT OR DEPASSEMENT-DE-TABLE.
      PERFORM I-1-CHARGEMENT-TABLE-CLIENT.
    IF DEPASSEMENT-DE-TABLE-CLIENT.
      PERFORM ARRETER-PROGRAMME.
      PERFORM F-CHARGEMENT-TABLE-CLIENT.
  *
  *************
  * TRAITEMENT
  *************
  *
  D-CHARGEMENT-TABLE-CLIENT.
    SET IND-POSTE TO 1.
  CLIENT.
    ADD 1 TO NB-POSTE.
    MOVE CLIENT-FICHIER TO CLIENT-TABLE (IND-POSTE).
    MOVE ZERO TO MONTANT-TABLE (IND-POSTE).
    SET IND-POSTE UP BY 1.
    READ FICHIER-CLIENT AT END
      MOVE HIGH-VALUE TO ENR-CLIENT.
  I-1-CHARGEMENT-TABLE-CLIENT.
    CLOSE FICHIER-CLIENT.
  ARRETER-PROGRAMME.
    MOVE 'Plus de 120 clients dans la table. Arrêt du programme'
        TO LIBELLE-ANO.
    WRITE ENR-CR FROM LIGNE-ANO.
    WRITE ENR-CR FROM LIGNE-FIN-ANO.
    ENTER DUMPONS.
  F-CHARGEMENT-TABLE-CLIENT.
    EXIT.
  ****************************
  * RECHERCHE « SEARCH » * (1)
  * RECHERCHE « SEARCH ALL » * (2)
  ****************************
  *
  ************
  * STRUCTURE
  ************
  *
  RECHERCHE-CLIENT.
      PERFORM D-RECHERCHE-CLIENT.




                                                 19
Bruno Delb                         http://www.brunodelb.com      Date : 12/02/2001

                                    Le langage Cobol

   IF CLIENT-TROUVE
     PERFORM CUMULER-MONTANT
   ELSE
     PERFORM EDITER-CLIENT-NON-TROUVE.
     PERFORM F-RECHERCHE-CLIENT.
  *
  *************
  * TRAITEMENT
  *************
  *
  D-RECHERCHE-CLIENT.
    SET IND-POSTE TO 1.                     (1)
    SEARCH POSTE-TABLE AT END                       (1)
    SEARCH ALL POSTE-TABLE AT END                     (2)
      MOVE 0 TO INDIC-TROUVE
    WHEN CLIENT-F = CLIENT-TABLE (IND-POSTE) (1)
      MOVE 1 TO INDIC-TROUVE.                   (1)
  CUMULER-MONTANT.
    ADD MONTANT-F TO MONTANT-TABLE (IND-POSTE).
  EDITER-CLIENT-NON-TROUVE.
    MOVE CLIENT-F TO CLIENT-CR.
    MOVE 'Client non trouvé dans la table.' TO LIBELLE-CLIENT.
    WRITE ENR-CR FROM LIGNE-ANC-CLIENT.
  F-RECHERCHE-CLIENT.
    EXIT.




                                                 20
Bruno Delb                         http://www.brunodelb.com            Date : 12/02/2001

                                       Le langage Cobol




De Pascal à Cobol




  Structure générale du programme
       Pascal                                 Cobol
       PROGRAM nom_programme;                 IDENTIFICATION DIVISION.
       PROGRAM-ID. nom_programme.
       CONST                                  ENVIRONMENT DIVISION.
       TYPE                                   ...
       VAR                                    DATA DIVISION.
                                              FILE SECTION.
       ...                                    (fichiers)
                                              WORKING-STORAGE SECTION.
       ...                                    (données)
       BEGIN                                  PROCEDURE DIVISION.
       ...                                    ... (divisé en sections et
       END.                                   paragraphes




  WORKING-STORAGE SECTION.
       Pascal                       Cobol
       VAR ident1 : INTEGER;        DATA DIVISION.
       ident2 : REAL;               WORKING-STORAGE SECTION.
                                    77 ident1 PIC longueur
                                    [USAGE] ncode [VALUE
                                    valeur]


   Scalaires non numériques
       Pascal                        Cobol
       VAR a : CHAR;                 PIC X (ou zones groupées)
       b : BOOLEAN;
       c : STRING;
       d : enumeration;
       e : intervalle;
       VAR C : CHAR;                 77 C PIC X.
       VAR B : BOOLEAN;
       VAR S : STRING [40];          77 S PIC X(40).
       VAR J : (lundi, mardi,..);    (pas d'équivalent)
       VAR I : 1..31;                (ne peut être que décimal)


   Enregistrements
       Pascal                            Cobol




                                                     21
Bruno Delb                       http://www.brunodelb.com                      Date : 12/02/2001

                                    Le langage Cobol

    VAR                                WORKING-STORAGE SECTION.
    PERSONNE : RECORD                  01 PERSONNE.
    NUM_SS : STRING [13];              05 NUM-SS PIC X(13).
    IDENT : RECORD                     05 IDENT.
    NOM : STRING [20];                 10 NOM PIC X(20).
    PRENOM : STRING [20];              10 PRENOM PIC X(20).
    END;
    ETAT_CIVIL : CHAR;                 05 ETAT-CIVIL PIC X(1).
    ADRESSE : RECORD                   05 ADRESSE.
    NUM : STRING [5];                  10 NUM PIC X(5).
    RUE : STRING [40];                 10 RUE PIC X(40).
    VILLE : STRING [30];               10 VILLE PIC X(30).
    CODE_POSTAL : RECORD               10 CODE-POSTAL.
    DEP : 1..95;                       15 DEP PIC 9(2).
    BUREAU : 0..999;                   15 BUREAU PIC 9(3).
    END;
    END;


Zone groupée
   Une zone groupée est un champ non terminal.
   Elle est toujours considérée comme alphanumérique (donc en PIC X).

Identification d'un champ
    Pascal                  Cobol
    personne.adresse.rue    rue (ou)
                            rue IN adresse (ou)
                            rue IN adresse IN personne
                            (à utiliser si l'on a plusieurs variables de même type)


Types
    Pascal                     Cobol
    TYPE                       (pas de type en COBOL)
    pers = RECORD              01 p1.
    nom : STRING [15];         05 nom PIC X(15).
    prenom : STRING [10];      05 prenom PIC X(10).
    END;
                               02 p2.
    VAR                        05 nom PIC X(15).
    p1, p2 : pers;             05 prenom PIC X(10).
    p1.nom                     nom IN p1.
    p2.pre                     prenom IN p2.


Tableaux
    Pascal                                     Cobol
    VAR                                        (pas d'équivalent direct)
    t : ARRAY [1..100] OF STRING [10];
    tab : RECORD                               01 tab.




                                                   22
Bruno Delb                        http://www.brunodelb.com                          Date : 12/02/2001

                                      Le langage Cobol

    t : ARRAY [1..100] OF STRING [10];            05 t OCCURS 100 PIC X(10).
    Identification du tableau :                   TAB, TAB ou TAB.T
    Identification d'un élément de rang I :       T (I) [IN TAB ]
    m : ARRAY [1..10, 1..5] OF STRING             (pas en COBOL)
    [20];
    tab_tab : RECORD                              01 tab-tab.
    t : ARRAY [1..10] OF                          05 t OCCURS 10.
    ARRAY [1..5] OF STRING [20];                  10 st OCCURS s PIC X(20).
    END;
    Identification des champs :                   tab-tab, tab-tab.t [i], t (i) ou t (i) IN
                                                  tab-tab, tab-tab.t [i] [j], st (i, j)


Affectation
    Pascal                         Cobol
    :=                             MOVE TO
    VAR
    s1 : STRING [6];               77 s1 PIC X(6).
    s2 : STRING [4];               s2 PIC X(4).
    s2 := s1;                      MOVE s1 TO s2.
    (=> erreur si¦(pas
    d'erreur)
    LENGTH (s2) > 4)               (Zone émettrice > zone réceptrice => troncature
                                   (Zone émettrice < zone réceptrice => troncature

   Zones numériques :
    Pascal             Cobol
    VAR                (alignement sur la virgule, conversions)
    i : INTEGER;       77 i PIC S9(4) COMP.
    j : REAL;          77 j PIC COMP-1.
                       77 k PIC 9(4)V99 COMP-3.
                       77 l PIC S9V99.
                       MOVE i TO j.
                       (conversion dans le mode de représentation de j)
                       MOVE k TO l.
                       (k > 9,99 => erreur)


Entrées sorties
    Pascal                     Cobol
    VAR                        77 i PIC S9(4) COMP. (faux)
    i : INTEGER;               ACCEPT i.
    READLN (i);                77 a PIC 9(4) [DISPLAY].
                               77 i PIC S9(4) COMP.
                               ACCEPT a.
                               MOVE a TO i.
    WRITELN ('coucou', i);     DISPLAY 'coucou', i


Until
    Pascal                     Cobol
    WHILE condition DO         PERFORM nom_paragraphe




                                                   23
Bruno Delb                      http://www.brunodelb.com                    Date : 12/02/2001

                                        Le langage Cobol

           instructions;           UNTIL condition
                                   nom-paragraphe-1.
                                   (instructions)
                                   nom-paragraphe-2.


     Fichier séquentiel
         Description :
         ENVIRONMENT DIVISION.
         INPUT-OUTPUT SECTION.
         FILE-CONTROL.
         SELECT nom-interne ASSIGN
         TO nom-externe
         ...
         DATA DIVISION.
         FILE SECTION.
         FD nom-interne
         LABEL RECORD IS STANDARD
         ...
         DATA RECORD IS nom-fenetre
         01 nom-fenetre
         (idem que WORKING-STORAGE SECTION)
         Notes :
•   nom-externe entre guillemets
•   suffixe DAT pour données
•   suffixe LIS pour imprimante
         Utilisation :
           Pascal                                   Cobol
           ASSIGN (nom-interne, nom-externe)        SELECT (dans l'ENVIRONMENT DIVISION)
           REWRITE (nom-interne)                    OPEN OUTPUT nom-interne
           RESET (nom-interne)                      OPEN INPUT nom-interne
           READ (nom-interne, nom-fenetre)          READ nom-interne AT END instruction
           WRITE (nom-interne, nom-fenetre)         WRITE nom-fenetre
           CLOSE (nom-interne)                      CLOSE nom-interne


     IDENTIFICATION DIVISION
         La division IDENTIFICATION donne un nom au programme, afin de le
         différencier des autres.
         Elle donne des explications (sous forme de commentaires) sur le programme.

     ENVIRONMENT DIVISION


                                                       24
Bruno Delb                         http://www.brunodelb.com                       Date : 12/02/2001

                                          Le langage Cobol

         La division ENVIRONMENT décrit physiquement les fichiers utilisés.

     DATA DIVISION
         La division DATA :
•   réserve la mémoire
•   décrit logiquement les données (description des enregistrements, ...)

     PROCEDURE DIVISION
         La division PROCEDURE décrit le traitement à effectuer, c'est-à-dire les
         ordres.

     Règles d'écriture
           Colonne début         Colonne fin          Description
           1                     6                    Numéros de ligne.
           7                     7                    "*" pour un commentaire.
                                                      "-" pour continuer la ligne précédente.
                                                      " " pour une ligne normale.
           8                     72                   Noms de division, de section, de
                                                      paragraphe.
           12                    72                   Instructions.
           73                    80                   Commentaire.


     Déclaration de fichier [SELECT]
         SELECT nom-fichier
                ASSIGN TO SYSn-classe-type-organisation nom-externe.
         SELECT associe un fichier sur disque (nom-externe) à un nom utilisé dans le
         programme (nom-fichier).
           Argument        Description
           nom-fichier     Nom du fichier utilisé dans le programme.
                           30 caractères au maximum.
           SYSn            Unité logique affectée à ce fichier.
                           n ∈ [0, 240]
           classe          Classe du périphérique.
                           "UR" (Unit Record) pour le lecteur de cartes ou l'imprimante.
                           "UT" (Utility) pour les fichiers séquentiels.
                           "AS" (Access Sequential) pour les fichiers ESDS.
           type            Type du périphérique.
                           "2501" pour le lecteur de cartes.
                           "1403" pour l'imprimante.
                           "2400" pour la bande.
                           "3330" pour le disque.
           organisation    Organisation du fichier.
                           "S" pour les fichiers séquentiels.
                           Rien pour les autres.
           nom-externe     Nom du fichier utilisé par le JCL (donc sur disque).
                           7 caractères au maximum.




                                                        25
Bruno Delb                       http://www.brunodelb.com        Date : 12/02/2001

                                        Le langage Cobol

     Déclaration d'enregistrement [FD]
          FD (File Definition) décrit les fichiers.
Nom du fichier utilisé dans le             FD nom-fichier
programme, définit avec SELECT.
Type      de    longueur         des            [RECORD MODE IS mode]
enregistrements :
- "F" pour une longueur fixe.
- "V" pour une longueur variable.
- "U" pour une lonueur indéfinie.
Note : "F" et "V" sont déterminés
automatiquement.
Longueur de l'enregistrement en               [RECORD CONTAINS entier1 [TO entier2]
caractères.
                                           CHARACTERS]
Pour les enregistrements :
- de longueur       fixe,    préciser
entier1
- de longueur variable, préciser
"entier1" (longueur du plus petit
enregistrement)    et    "entier2"
(longueur     du    plus    grand
enregistrement)
Taille des blocs physiques, afin                [BLOCK CONTAINS entier3
de grouper des enregistrements.
Ne       concerne        pas    les
enregistrements     de     longueur
indéfinie.
Indique        le         nombre                [TO entier4] CHARACTERS
d'enregistrements par bloc. Cas
particulier       pour       les
enregistrements    de   longueur
variable     :    prendre    les
enregistrements    de   longueur
maximale.
Longueur physique du bloc :
(       (Longueur   maximale      de
l'enregistrement)
     + 4 octets (comptage de
l'enregistrement) ) = Longueur
physique de l'enregistrement.
x nombre d'enregistrements dans
un bloc     = Longueur logique
du bloc
+ 4 octets (comptage du bloc)
= Longueur physique du bloc
Indique le nombre de caractères                 /RECORD]
par bloc.
Indique le type de labels.                      LABEL RECORD




                                                    26
Bruno Delb                      http://www.brunodelb.com          Date : 12/02/2001

                                           Le langage Cobol

    Indique que le label du fichier est            IS STANDARD/
    au format IBM.
    Le label est créé lors de l'écriture
    dans le fichier.
    Il est utilisé au niveau du JCL
    (carte DLBL pour les fichiers sur
    disque, carte TLBL pour les
    fichiers sur bande magnétique).
    Indique que le fichier n'a pas de              OMITTED
    label.
    Indique le (ou les) nom(s) de la             [DATA RECORD          IS   nom-enreg1           [nom-
    zone tampon.
                                              enreg2] ...].

         Description d'enregistrement
               Le nom de l'enregistrement :
•     est au niveau 01
•     se trouve dans la clause DATA RECORD de l'ordre FD
               Notes : la clause VALUE est interdite, sauf pour les niveaux 88.

         Ouverture [OPEN]
               OPEN :
•     ouvre un fichier
•     contrôle (cas de la lecture) ou crée (cas de l'écriture) le label
               OPEN
    Indique que le fichier est en                  INPUT/
    lecture.
    Indique que le fichier est en                  OUTPUT
    écriture.
    Nom du fichier utilisé dans le                 nom-fichier-1 [nom-fichier2 ...]
    programme, défini avec SELECT


         Fermeture [CLOSE]
               CLOSE :
•     ferme un (ou des) fichier(s)
•     vérifie les labels de fin
               CLOSE
    C'est le nom du fichier utilisé                nom-fichier1
    dans le programme, défini avec
    SELECT.
    WITH LOCK s'applique aux fichier               [WITH LOCK] [nom-fichier-2 ...]
    sur bande. Cette option permet
    de décharger et de libérer la
    bande.


         Lecture [READ]
               READ :



                                                       27
Bruno Delb                       http://www.brunodelb.com               Date : 12/02/2001

                                             Le langage Cobol

•     lit un enregistrement
•     le stocke dans la variable indiquée par DATA RECORD
•     indique quoi faire en fin de fichier
              READ
                    nom-fichier
    Permet         de          stocker              [ INTO nom-donnée ]
    l'enregistrement lu :

•     dans    la  variable
      indiquée par DATA
      RECORD et
•     dans   la    variable
      "nom-donnée"
    Exécuter      les      instructions             AT END instructions.
    indiquées lorsque la fin de fichier
    est atteinte.

              Remarques :
•     L'enregistrement est accessible tant qu'un READ ou qu'un CLOSE n'a pas été
      exécuté.
•     Ne plus utiliser la variable stockant l'enregistrement après une fin de fichier.


      ECRITURE [WRITE]

              WRITE écrit un enregistrement dans un fichier.


              WRITE nom-enregistrement [ FROM nom-donnée ]
                                      [ INVALID KEY instructions ].


              Remarque : On n'indique pas le nom du fichier, mais le nom de
              l'enregistrement.
nom-enregistrement                                                     C'est le nom de la variable
                                                                       stockant       l'enregistrement
                                                                       indiquée par DATA RECORD.
FROM                                                                   Permet de transférer le contenu
                                                                       de la variable indiquée, et non
                                                                       pas la variable indiquée par
                                                                       DATA RECORD, dans le fichier.
INVALID KEY                                                            Si l'écriture fait déborder le
                                                                       fichier,   alors   exécuter les
                                                                       instructions indiquées.




                                                        28
Bruno Delb                 http://www.brunodelb.com              Date : 12/02/2001

                                   Le langage Cobol

Fichier imprimante




    FICHIER LECTEUR DE CARTE

         Un lecteur de cartes est utilisé comme un fichier séquentiel.
         Toutefois, il y a quelques différences :
•   Les enregistrements contiennent 80 caractères, et sont donc fixes.
•   Le fichier ne contient pas de label.


    FICHIER IMPRIMANTE

         Une imprimante est utilisée comme un fichier séquentiel.
         Toutefois, il y a quelques différences :
•   Les enregistrements contiennent 133 caractères (y compris le caractère de saut de
    ligne), et sont donc fixes.
•   Le fichier ne contient pas de label.


    ECRITURE [WRITE]

         WRITE imprime un enregistrement.


         WRITE nom-enregistrement [ FROM nom-donnée ]
                           AFTER POSITIONING nombre/caractere-saut [ LINES ]
        caractere-saut                                       caractere-saut   est  est   un
                                                             caractère contenant un code de
                                                             saut ASA.
        Nombre                                               Indique le nombre de lignes à
                                                             sauter. Si nombre = 0, alors
                                                             effectue un saut de page.
         Note : Incompatible avec l'autre version (avec AFTER/BEFORE ADVANCING).


    ECRITURE V 2 [WRITE]

         WRITE imprime un enregistrement.


         WRITE nom-enregistrement
              [ FROM nom-donnée ]



                                              29
Bruno Delb                  http://www.brunodelb.com                     Date : 12/02/2001

                                    Le langage Cobol

              AFTER/BEFORE ADVANCING nombre/caractere-saut [ LINES ]
          Note : Incompatible avec l'autre version (avec POSITIONNING).
             Nombre                               Indique le nombre de lignes à sauter
                                                  (maximum 100).
             AFTER ADVANCING                      L'impression de la ligne s'effectue après
                                                  le saut précisé.
             BEFORE ADVANCING                     L'impression de la ligne s'effectue avant
                                                  le saut précisé.

      CARACTERE DE SAUT
          On introduit ici la notion de caractère de saut "ASA".
          Il permet d'effectuer un saut de ligne, de page, ou encore de modifier
          l'espacement de ligne.
             Caractère de saut     Description

             ""                    Espacement simple

             "0"                   Espacement double

             "-"                   Espacement triple

             "+"                   Pas d'espacement

             "1"                   Saut de page

             "2".."9"              Saut indiqué par le canal correspondant de la bande pilote

             "A".."C"              Saut au canal 10, 11, 12

          Les sauts de canaux (1 à 9 et A, B, C) provoquent un saut à une ligne précise
          de la page.
          Cela dépend de la bande pilote utilisée.
          Par exemple, le canal 1 provoque un saut en première ligne de la page
          suivante.



FICHIER VSAM/ESDS




    DECLARATION DE FICHIER [SELECT]

          Il est préférable d'utiliser la clause "FILE STATUS".
          Cette zone contient le code retour lors de l'ouverture et de la fermeture du
          fichier.
          Si le code retour est égal à :
•   00 : la lecture ou l'écriture s'est bien déroulée
•   10 : la fin du fichier a été atteinte



                                                  30
Bruno Delb                     http://www.brunodelb.com                   Date : 12/02/2001

                                      Le langage Cobol

    OUVERTURE DE FICHIER [OPEN]

         OPEN option nom-fichier1 nom-fichier2 ... .


         OPEN ouvre un fichier VSAM.
           OPEN / ACCESS      INPUT   OUTPUT     I-O    EXTEND

           READ               O       N          O      N           O : accès autorisé

           WRITE              N       O          N      O           N : accès interdit

           REWRITE            N       N          O      N


     option
           Valeur de option       Description

           INPUT                  Ouverture en mode lecture seulement.

           OUTPUT                 Ouverture en mode écriture seulement.

           I-O                    Ouverture en mode lecture et écriture.

           EXTEND                 Ouverture en mode ajout.



    FIN DE FICHIER

         Pour tester la fin du fichier (FF), on peut :
•   tester la valeur de la zone indiquée dans FILE STATUS : Elle sera égale à 10 s'il y
    a FF.
•   utiliser la clause AT END dans le READ. Cette clause est optionnelle.


    RE-ECRITURE DE FICHIER [REWRITE]

         REWRITE ré-écrit le dernier enregistrement lu.


         Le fichier doit être ouvert en mode "I-O".



FICHIER VSAM/KSDS




    DECLARATION DE FICHIER [SELECT]

         SELECT nom-fichier
              ASSIGN TO SYSn-nomDLBL
              ORGANIZATION IS INDEXED
              [ ACCESS MODE IS ] type-accès


                                                  31
Bruno Delb                http://www.brunodelb.com            Date : 12/02/2001

                            Le langage Cobol

       RECORD KEY nom-zone-1
       [ FILE STATUS IS nom-zone-2 ].


   SELECT associe un fichier VSAM/KSDS sur disque (nom-externe) à un nom
   utilisé dans le programme (nom-fichier).
   nom-fichier                           Nom    du  fichier      utilisé      dans   le
                                         programme.
   x                                     30 caractères au maximum.
   SYSn                                  Unité logique affectée à ce fichier.
   X                                     n _ [0, 240]
   nom-DLBL                              Nom de la DLBL.
   type-accès                            = SEQUENTIAL pour un accès séquentiel
                                         (par défaut)
   x                                     = RANDOM pour un accès par clé
   x                                     = DYNAMIC pour un accès séquentiel et
                                         par clé


   RECORD KEY                            RECORD KEY précise la zone qui contient
                                         la clé. La clé est une sous-zone de
                                         l'enregistrement du fichier, et doit être
                                         de longueur identique à celle définie dans
                                         le paramètre KEYS du DEFINE du fichier.
   RECORD CONTAINS                       Il est recommandé d'utiliser la clause
                                         RECORD CONTAINS afin que COBOL
                                         effectue le contrôle avec la description
                                         faite au momen du DEFINE.


OUVERTURE DE FICHIER [OPEN]

   OPEN option nom-fichier1 nom-fichier2 ... .


   OPEN ouvre un fichier VSAM.


   +--------------------------------------------------------+
   ¦Option¦Description¦
   ¦-----------+--------------------------------------------¦
   ¦INPUT¦Ouverture en mode lecture seulement,¦
   ¦¦avec accès sur clé pour RANDOM et DYNAMIC.¦
   ¦OUTPUT¦Ouverture en mode écriture seulement,¦


                                        32
Bruno Delb                  http://www.brunodelb.com          Date : 12/02/2001

                              Le langage Cobol

   ¦¦création si inexistant en mode SEQUENTIAL.¦
   ¦I-O¦Ouverture en mode lecture et écriture :¦
   ¦¦. modification / suppression pour l'accès¦
   ¦¦SEQUENTIAL/RANDOM/DYNAMIC¦
   ¦¦. ajout pour l'accès RANDOM/DYNAMIC¦
   ¦EXTEND¦Ouverture en mode ajout si :¦
   ¦¦. accès SEQUENTIAL¦
   ¦¦. le fichier est trié sur la clé¦
   ¦¦. clés à ajouter plus grandes que les plus¦
   ¦¦grandes du fichier¦
   +--------------------------------------------------------+


POSITIONNEMENT DANS UN FICHIER [START]

   START nom-fichier [ KEY IS operateur nom-zone ]
                [ INVALID KEY instructions ].


   START permet de se positionner sur un enregistrement dans un fichier.


   +-------------------------------------------+
   ¦Opérateur¦Description¦
   ¦---------------+---------------------------¦
   ¦EQUAL TO¦= (égalité)¦
   ¦GREATER THAN¦> (supérieur)¦
   ¦NOT LESS THAN¦NOT < (supérieur ou égal)¦
   +-------------------------------------------+
   !KEY
   _ Si KEY IS est omis :
    Le positionnement est fait sur la clé indiquée
    dans le RECORD KEY du fichier.
    Si la clé est inexistante :
    - si INVALID KEY est présent,
     alors les instructions indiquées sont exécutées.
    - si INVALID KEY est omis :
     alors le code 23 est retourné dans le FILE STATUS.




                                          33
Bruno Delb                 http://www.brunodelb.com         Date : 12/02/2001

                              Le langage Cobol

    _ Si KEY IS est présent :
    - Le positionnement est fait sur une partie du groupe indiqué
      dans le RECORD KEY du fichier.
    - Si la clé est incomplète, elle est complétée à zéro à droite.


LECTURE D'UN FICHIER [READ]

    READ nom-fichier [ NEXT ]
                RECORD [ INTO nom-donnée ]
                [ AT END instructions ]/[ INVALID KEY instructions ].


    READ lit séquentiellement ou par clé un enregistrement d'un fichier.
    !NEXT
    La lecture se fait suivant le positionnement effectué par START.


    Cette option n'est possible qu'avec un accès DYNAMIC.


    Si elle est omise, la lecture est :


    - séquentielle pour un accès SEQUENTIAL
    - par clé pour un accès RANDOM ou DYNAMIC
    !AT END
    Cette option n'est possible qu'avec un accès SEQUENTIAL.


    Si elle est omise, le code retour 10 est retourné.
    !INVALID KEY
    Cette option n'est possible que pour un accès par clé.


    Si la clé n'est pas trouvée dans le fichier,
    les instructions indiquées sont exécutées.


    Si elle est omise, et si la clé est inconnue,
    un code retour 23 est retourné dans le FILE STATUS.


ECRITURE DANS UN FICHIER [WRITE]



                                          34
Bruno Delb                http://www.brunodelb.com               Date : 12/02/2001

                                 Le langage Cobol

         WRITE nom-enregistrement [ FROM nom-donnée ]
                          [ INVALID KEY instructions ].


         WRITE écrit un enregistrement :
•   séquentiellement ou
•   par clé
         Notes :
•   L'ouverture en OUTPUT permet de créer un fichier et d'écrire des enregistrements.
•   L'ouverture en EXTEND permet d'ajouter des enregistrements à la fin du fichier.
•   L'ouverture en I-O permet d'ajouter des enregistrements de clés inexistantes dans
    le fichier.
         INVALID KEY                                        Si une des conditions suivantes
                                                            est     réalisée,    alors  les
                                                            instructions    indiquées  sont
                                                            exécutées.

     dépassement de capacité du fichier
•   Pour l'ouverture en (OUTPUT ou EXTEND) et l'accès en SEQUENTIAL : Les clés du
    fichier ne sont pas triés dans l'ordre croissant.
•   Pour l'ouverture en (OUTPUT ou I-O) et l'accès DIRECT ou DYNAMIQUE : La clé de
    l'enregistrement à écrire existe déjà dans le fichier.


    RE-ECRITURE DANS UN FICHIER [REWRITE]

         REWRITE nom-enregistrement [ FROM nom-donnée ]
                           [ INVALID KEY instructions ].


         Cette commande n'est utilisable qu'en ouverture I-O.
         REWRITE permet de ré-écrire le dernier enregistrement lu.
         INVALID KEY       Si une des conditions suivantes est réalisée, alors les
         instructions indiquées sont exécutées.
         Pour les accès SEQUENTIAL : La clé à ré-écrire est différente de celle déjà
         écrite.
         Pour les accès DIRECT : La clé à ré-écrire n'existe pas dans le fichier.


    SUPPRIMER UN ENREGISTREMENT [DELETE]

         DELETE nom-fichier RECORD
                     [ INVALID KEY instructions ].



                                             35
Bruno Delb                http://www.brunodelb.com                Date : 12/02/2001

                                  Le langage Cobol


          Cette commande n'est utilisable qu'avec les fichiers :
•    en ouverture I-O
•    en accès SEQUENTIAL ou DIRECT
          DELETE supprime logiquement un enregistrement dans un fichier.
          INVALID KEY                                        Cette clause n'est pas utilisable
                                                             en accès SEQUENTIAL.
          Si la clé indiquée dans RECORD KEY n'existe pas, alors les instructions
          indiquées sont exécutées.


     OUVERTURE POSSIBLE

OPEN         / INPUT          OUTPUT           I-O                EXTEND
ACCESS
READ           O              N                O                  N                O : accès
                                                                                   autorisé
WRITE          N              O                O                  O
REWRITE        N              N                O                  N                N : accès
                                                                                   interdit
DELETE         N              N                O                  N



FICHIER VSAM




     CODE RETOUR

VALEUR                                         DESCRIPTION
00                                             Pas de problème.
10                                             Fin de fichier.
22                                             Clé inexistante.
23                                             Clé inconnue.
91                                             Ecriture sur un fichier non partagé.
92                                             Fichier déjà ouvert ou déjà fermé.
93                                             Fichier non disponible.
94                                             Fichier inconnu ou vide ou VSAM-KSDS
                                               utilisé comme un ESDS.



                                              36
Bruno Delb   http://www.brunodelb.com     Date : 12/02/2001

                  Le langage Cobol

95                             DLBL absente.




                              37
Bruno Delb                 http://www.brunodelb.com           Date : 12/02/2001

                                  Le langage Cobol




E/S




    ARRET DE PROGRAMME [STOP]

           STOP RUN/littéral.


           STOP arrêt le programme.
RUN                                            Arrête l'exécution du programme           et
                                               donne le contrôle au superviseur.
Littéral                                       Arrête le programme, affiche le littéral et
                                               donne le contrôleur au pupitreur.


    LECTURE INFORMATION [ACCEPT]

           ACCEPT nom-donnée [ FROM SYSIPT/nom-symbolique/CONSOLE ].


           ACCEPT lit une information (80 caractères au maximum) à partir :
•   du lecteur si SYSIPT est indiqué (par défaut)
•   de la console si CONSOLE est indiqué
•   du périphérique nommé "nom-symbolique" dans la partie SPECIAL-NAMES
           et l'écrit dans "nom-donnée".


    ENVOI DE MESSAGE [DISPLAY]

           DISPLAY littéral1/nom-donnée1 littéral2/nom-donnée2 ...
               [ UPON SYSLST/SYSPCH/CONSOLE/nom-symbolique ].


           DISPLAY envoie un message vers :
•   le périphérique nommé "nom-symbolique" dans la partie SPECIAL-NAMES
•   l'imprimante (120 caractères au maximum) si SYSLST est indiqué
•   la console (100 caractères au maximum) si CONSOLE est indiqué
•   la carte (80 caractères dont 72 utilisables au maximum)
UPON                                           Si UPON est utilisé, le périphérique pris


                                              38
Bruno Delb                  http://www.brunodelb.com               Date : 12/02/2001

                                   Le langage Cobol

                                                par défaut est l'imprimante.



DONNEE




    DEFINITION

          numéro-niveau nom-donnée image               valeur-initiale.


          Exemple :
          03           Libellé   PIC X(7) VALUE 'TABLEAU'

      numéro-niveau
          Le numéro de niveau est composé de deux chiffres (de 01 à 49, et 77).
          Il indique le niveau dans la hiérarchie de la structure.
          Les niveaux 01 et 77 sont particuliers :
•   Le niveau 01 définit le sommet de la hiérarchie. Un cadrage à gauche est effectué.
•   Le niveau 77 définit une variable ne figurant dans aucun groupement.
          Attention : Les définitions de niveau 77 doivent précéder les définitions de
          variables.
          Conventions :
•   Commencer en marge B.
•   Décaler de 4 positions à chaque changement de niveau.

      nom-donnée
          C'est le nom de l'article.
          Il est préférable que le nom soit unique, mais il peut être tout de même
          répété s'il se trouve dans des branches différentes.
          Le nom FILLER peut être utilisé (entre les niveaux 02 et 49) chaque fois qu'il
          y a une zone constante faisant partie d'une zone à éditer.
          Mais aucune référence à cette zone ne pourra être faite.

      image
          On indique ici :
•   la taille de la variable
•   son type
•   ce qu'on en fera


                                               39
Bruno Delb                http://www.brunodelb.com         Date : 12/02/2001

                                 Le langage Cobol

         Cette définition doit tenir en 30 caractères au maximum.
         Il existe quatre types d'images :
•   image alphanumérique
•   image numérique
•   image numérique d'édition
•   image alphabétique

     image alphanumérique
         Cette zone peut contenir n'importe quel caractère.
         Exemple : PIC XXXXXXXXXX            ou     PICTURE IS XXXXXXXXXX
         définit une variable pouvant contenir jusqu'à 10 caractères.
         On pourra écrire plus simplement : PIC X(10)
         Si la zone de réception est plus grande que la zone d'origine, il y a cadrage à
         gauche, et des espaces sont ajoutés pour combler.
         Si la zone de réception est plus petite que la zone d'origine, il y a perte des
         caractères dépassant à droite.

     image numérique
         Cette zone ne peut contenir que des nombres signés ou non. Seuls les
         chiffres de 0 à 9 sont acceptés.
         Exemple : PIC 9999999999
         définit une variable pouvant contenir jusqu'à 10 chiffres.
         On pourra écrit plus simplement : PIC 9(10).
         Autres exemples :
•   Si en mémoire on a 0123, alors PIC 99V99 stocke la valeur 01,23
•   PIC 9999 stocke la valeur 0123
•   PIC 999V9 stocke la valeur 012,3
•   Si on transfère la valeur 265724 de PIC 9(4)V99 à 999V999, alors la valeur devient
    657240.
         Les troncatures sont signalées par un message d'avertissement du style «
         ILA5011I-> HIGH ORDER TRUNCATION MIGHT OCCUR ».
         Mais il y a poursuite de la compilation.

     image numérique - EBCDIC
•   Pour les nombres positifs, le chiffre extrême droit est remplacé par : A pour +1, B
    pour +2, ... I pour +9.
•   Pour les nombres négatifs, le chiffre extrême droit est remplacé par : J pour -1, K
    pour -2, ... R pour -9.
         Donc le signe n'occupe pas de place en mémoire.


                                             40
Bruno Delb                     http://www.brunodelb.com        Date : 12/02/2001

                                      Le langage Cobol

          Exemple :
•   +100,3 est représenté en mémoire par 000100C,
•   -100,3 par 000100L.
          En cas de troncature ou de remplissage avec des 0, Cobol gère correctement
          le signe.
          Attention : Penser à déclarer les variables avec signe lorsqu'elles sont
          susceptibles de recevoir des valeurs négatives.

      image numérique d'édition
          Les images numériques d'édition permettent la représentation de valeurs
          numériques sur les états.
          On distingue :
•   les caractères d'insertion ",", "B", "_", "/", "0", "F", "$", "+", "-", "CR", "DB"
•   Ils sont insérés dans la chaîne de caractères à imprimer.
•   Chacune occupe un caractère.
•   Exemple :
•   PIC 9(4)V99      (6 caractères)
•   PIC 9(4),99      (7 caractères)
•   la virgule ","
•   Ce caractère d'insertion permet aussi le centrage sur la virgule réelle.
•   Ne pas oublier d'indiquer "DECIMAL-POINT IS COMMA" dans le paragraphe
•   SPECIAL-NAMES.
•   Exemple :
•      005862           5862,00
•   PIC ------ ------> -------
•      9(6)           9(4),99
•   Le caractère "F" (pour les Francs) ou "$" (pour les dollars)
•   Il insère un symbole de monnaie.
•   Il doit figurer à gauche de l'image.
•   Il faut indiquer CURRENCY SIGN IS 'F' dans le paragraphe SPECIAL-NAMES.
•   Exemple : PIC F99.999.999
•   Le caractère "."
•   Il faut indiquer DECIMAL-POINT IS COMMA" dans le paragraphe SPECIAL-NAMES.
•   Les caractères '-', '+', 'DB', 'CR'
•   Les caractères 'DB' et 'CR' ne peuvent être placés qu'à droite.
•   Les caractères '+' et '-' peuvent être placés à gauche ou à droite.


                                                  41
Bruno Delb                  http://www.brunodelb.com             Date : 12/02/2001

                                   Le langage Cobol

•   Le '-' n'imprime le signe que s'il est négatif.
•   Le '+' imprime toujours le signe.
•   Les caractères "Z", "*"
•   Le "Z" supprime les zéros non significatifs.
•   Le "*" remplace les zéros non significatifs par des "*", afin de rendre difficile la
    falsification des documents.
•   Par convention, on ne cherche pas à supprimer les 0 de la partie décimale.
•   Lorsque la valeur à imprimer dépasse de la taille de la zone d'impression, les
    chiffres de gauche sont supprimés.
•   Afin de garantir une sortie correcte, on colle toutes les informations en ajoutant un
    chiffre significatif à l'image avec remplacement des zéros par un espace.
•   Les caractères "F", "$", "+", "-"
•   Ce sont des caractères de remplacement.
•   Les zéros non significatifs sont remplacés par des espaces, sauf celui le plus à
    droite, qui reçoit le symbole de monnaie (F, $) ou le signe (+, -).
•   Il faut toujours prévoir un caractère de plus par rapport au nombre de chiffres
    dans la zone émettrice.
•   Exemple avec perte de chiffre :
•   PIC S9(6) ----> PIC -(5)9
•     58625L       -86253
•   Lorsque la zone numérique est nulle, on peut n'imprimer que des espaces :
•   PIC ZZZ,99 BLANK WHEN ZERO

      image alphabétique
          Les images alphabétiques permettent la représentation de groupes de lettres
          (de 'A' à 'Z', plus l'espace).
          Tous les autres caractères sont exclus : "-", "_", "1", ...

      valeur initiale (optionnel)
          Si on ne précise pas la valeur que prendra les variables au début du
          programme, alors on ne peut connaître leur valeur.
          Certains compilateurs les remettent à zéro, d'autres pas ...
          Pour donner une valeur initiale, on utilise VALUE.
          Exemple :
          02 COMPTEUR PIC 999 VALUE 0.
          02 NOM       PIC X(20) VALUE 'DUPONT LAURENT'.
          02 INDICE    PIC 999 VALUE ZERO.
          02 ADRESSE PIC X(20) VALUE SPACE.


                                               42
Bruno Delb                   http://www.brunodelb.com             Date : 12/02/2001

                                    Le langage Cobol

         Notes :
•   ZERO, ZEROS, ZEROES sont équivalent à 0.
•   SPACE, SPACES sont équivalents à des espaces.
•   La clause VALUE est possible au niveau du groupe. Mais un article ne peut pas
    recevoir deux VALUE. Ainsi, dans ce cas, aucun de ses articles élémentaires ne
    peut contenir elle-aussi la clause VALUE.
•   Il est également possible de mettre une clause VALUE avec une image d'édition :
    01 TOTAL PIC ZZ9,99 VALUE '0,00'.

     Représentation des données : USAGE

     Valeur binaire : COMPUTATIONAL
         01 MONTANT PIC S9(7)V99 COMP-3 VALUE ZERO.
         01 CODE        PIC 99 COMP VALUE 80.
         DE                     A                              TAILLE
         9                      9(4)                           1/2 mot               2 octets
         9(5)                   9(9)                           1 mot                 4 octets
         9(10)                  9(18)                          2 mots                8 octets
         Note :
•   COMP     = COMPUTATIONAL
•   COMP-1 = COMPUTATIONAL-1
•   COMP-2 = COMPUTATIONAL-2
•   COMP-3 = COMPUTATIONAL-3
         Le cadrage n'est pas automatique. Mais en cas d'alignement incorrect,
         chaque valeur est transférée vers une zone de travail pour les opérations
         arithmétiques. Les calculs sont alors corrects, mais il y ralentissement.
         La clause SYNC permet d'aligner correctement.
         02 BOUCLE PIC 9(5) COMP SYNC.
         Réserve 4 octets alignés sur un mot.
         Exemple :
•   02 A PIC 9(6) COMP SYNC.         4 octets, soit 1 mot.
•   02 B PIC 9(3) COMP SYNC.         2 octets, soit 1/2 mot.
•   02 C PIC 9(5) COMP SYNC.         4 octets, soit 1 mot.
         A      B xxx    C
         2 octets sont donc rajoutés en "xxx" pour constituer 1 mot. La mention SYNC
         pour B n'est pas nécessaire dans ce cas. Mais elle le serait dans le cas
         d'éventuelles insertions.
COMP                                             Représentation binaire.


                                                43
Bruno Delb                 http://www.brunodelb.com              Date : 12/02/2001

                                Le langage Cobol

COMP-1                                      Virgule flottante, simple précision.
                                            •   4 octets.
                                            •   6 chiffres significatifs.
                                            •   Valeur absolue        de      10^(-78)   à
                                                10^(+75).
COMP-2                                      Virgule flottante, double précision.
                                            •   8 octets.
                                            •   16 chiffres significatifs.
                                            •   Valeur absolue        de      10^(-78)   à
                                                10^(+75).
COMP-3                                      Décimal condensé.
                                            •   5 octets.
                                            •   (9 1/2 octets pour les chiffres + 1/2
                                                octets pour le signe) : 1 chiffre (1
                                                octet) + 3 chiffres (2 octets) + 5
                                                chiffres (3 octets)
         On peut éviter le problème des cadrage en mettant les réservations dans
         l'ordre suivant :
         •   doubles mots
         •   simples mots
         •   demi-mots
         •   valeurs EBCDIC
         •   valeurs en décimal condensé



WORKING STORAGE SECTION




  PRESENTATION

         La Working Storage Section contient toutes les zones utiles pour stocker des
         informations au cours même de l'exécution d'un programme (zones de
         travail).


  ZONE

   ELEMENTAIRE



                                           44
Bruno Delb                  http://www.brunodelb.com   Date : 12/02/2001

                                    Le langage Cobol

         Une zone élémentaire est une zone qui ne peut pas être subdivisée.
         Exemple : la zone d'un compteur.
         Elle contient une clause PIC.


   GROUPEE

         Une zone groupée est un regroupement de plusieurs zones élémentaires.
         Exemple : la zone contenant plusieurs compteurs.
         Elle ne contient pas de clause PIC, mais peut contenir les clauses USAGE
         et/ou VALUE (par défaut PIC X et USAGE DISPLAY).
         Exemple :
          (PIC X)         (PIC 9)
         Zone groupée = Zone élémentaire 1 + Zone élémentaire 2 (PIC 9)

       INDEPENDANTE
         Une zone indépendante est une zone ni groupée ni faisant partie d'une zone
         groupée.

       NOMBRE-NIVEAU
         Chaque niveau de description possède un nombre-niveau. Le plus haut
         niveau d'une zone groupée est '01'. Les nombre-niveaux ne se suivent pas
         forcément. Ils peuvent aller de '01' à '49'.
         Les nombre-niveaux '01' et '77' commencent en marge A.
         Seules les zones élémentaires ont une "picture".
         Une zone groupée est suivie d'un point (après la clause USAGE s'il y en a
         une).
         Par convention, on décale de quatre position pour chaque changement de
         niveau.
         On cherche à regrouper des informations de même domaine dans un groupe.
         01 nom-groupe VALUE ZEROS. permet de remettre à zéro une zone EBCDIC,
         mais pas des zones en décimal condensé ou autre.

       Alignement mémoire
         Afin d'augmenter la rapidité d'exécution, le compilateur              aligne   les
         informations de niveau 01 sur la frontière suivante :
Zone                                             Alignement
2 octets, jusqu'à S9(4)                          Demi-mot
4 octets, jusqu'à S9(9)                          Mot
8 octets, au-delà de S9(9)                       Doubl-mot
         Exemple :



                                                45
Bruno Delb                     http://www.brunodelb.com              Date : 12/02/2001

                                    Le langage Cobol

         •   NUMERO        sur 3 caractères             3 octets
         •   NOM         sur 7 caractères            7 octets
         •   QUANTITE sur 4 octets (en binaire)           4 octets
Numéro             Nom                 xxxxx                   Quantité
0                  2 3    9 10    11
                   12      15
1                  2                   3                       4               Numéro du mot

    Redéfinition des zones
         La redéfinition des zones sert dans le cas où l'on veut que une même zone de
         travail contienne plusieurs types de renseignements.
         Note importante : Cette redéfinition ne réserve pas de place en mémoire.
         Voici les règles à respecter :
         •   La zone redéfinie doit être de même niveau que la zone à redéfinir.
         •   Dans le cas de plusieurs redéfinitions d'une même zone à redéfinir, les
             redéfinitions se rapportent toujours à la zone à redéfinir.
         •   La zone redéfinie ne doit pas contenir de clause VALUE.
         •   Les zones redéfinies doivent immédiatement suivre la zone à redéfinir.
         •   La zone redéfinir doit avoir la même longueur que la zone à redéfinir.
         Exemples :
         •   Une zone peut être décomposée deux plusieurs manières :
         •   01 ZONE
         •      02 ZONE-1        PIC X(10).
         •      02 ZONE-2        PIC X(20).
         •   01 ZONE-REDEF REDEFINES ZONE.
         •      02 ZONE-3        PIC X(30).
         •   Une même zone peut avoir deux PIC différents :
         •   01 ZONE-1        PIC X(5).
         •   01 ZONE-2        PIC 9(5).
         •   Où encore :
         •   01 ZONE.
         •      02 ZONE-1        PIC 9(5).
         •   Car ZONE est définit en alphanumérique.
         •   Une conversion de francs en centimes par exemple :
         •   77 FRANCS                        PIC 999V99.




                                                46
Bruno Delb                 http://www.brunodelb.com           Date : 12/02/2001

                            Le langage Cobol

  •     77 CENTIMES REDEFINES FRANCS               PIC 9(5).

Noms de condition
  Un nom-condition est vrai s'il appartient à un certain ensemble de valeurs.
  Ceci permet d'écrire des programmes plus parlants.
  88 nom-condition VALUE littéral
      [ TROUGH/THRU littéral ]
      [ littéral [ TROUGH/THRU littéral ] ]
  Exemples :
  •   Nationalité ...
       77 NATIONALITE PIC 9.
          88 FRANCAIS VALUE 1.
          88 ETRANGER VALUE 2.


      On écrirait : IF NATIONALITE = 1 COMPUTE ...
      Mais on peut écrire : IF FRANCAIS COMPUTE ...
  •   Age ...
             01 AGE     PIC 9(3).
                88 ENFANT         VALUE 1 THRU 17.
                88 JEUNE       VALUE 18 THRU 25.
                88 ADULTE         VALUE 25 THRU 65.
                88 VIEILLARD VALUE 66 THRU 100.
            Les enfants ont de 1 à 17 ans.
            Les jeunes de 18 à 25 ans.
            Les adultes de 25 à 65 ans.
            Les vieillards de 66 à 100 ans.
  •   Annuaire téléphonique ...
             01 LETTRE      PIC X.
                88 VOYELLE VALUES 'A', 'E', 'I', 'O', 'U', 'Y'.

Expression RENAMES
  RENAMES est très rarement utilisé et permet de redéfinir une zone à cheval
  sur deux autres zones.
  01 DATE.
      02 DATE-1.
        03 DATE-JJ      PIC 99.



                                        47
Bruno Delb              http://www.brunodelb.com       Date : 12/02/2001

                           Le langage Cobol

          03 DATE-MM    PIC 99.
          03 DATE-AA   PIC 99.
        02 DATE-MM2     PIC 99.
        66 DATE-2 RENAMES DATE-AA
                THRU DATE-MM2.
    •   DATE-2 contient donc les zones DATE-AA (l'année) et DATE-MM2 (le
        mois).
    •   La zone renommée ne suit pas obligatoirement les zones à renommer.
    •   Les zones à renommer ne peuvent pas être de niveau 01, 77 ni 88.



PROCEDURE DIVISION




 INTRODUCTION

    ROUNDED renvoit un arrondi à l'unité supérieure du chiffre le moins
    significatif si > 4.




                                       48

Contenu connexe

Tendances

Chapitre 4 Fonctions et procédures.pdf
Chapitre 4 Fonctions et procédures.pdfChapitre 4 Fonctions et procédures.pdf
Chapitre 4 Fonctions et procédures.pdfC00LiMoUn
 
An overview of the ims connect client interface
An overview of the ims connect client interfaceAn overview of the ims connect client interface
An overview of the ims connect client interfaceJeff Pearce
 
Abap coding standards
Abap coding standardsAbap coding standards
Abap coding standardssurendra1579
 
How to chtmultiregionfoam
How to chtmultiregionfoamHow to chtmultiregionfoam
How to chtmultiregionfoamEustache Gokpi
 
Calculation commands in essbase
Calculation commands in essbaseCalculation commands in essbase
Calculation commands in essbaseShoheb Mohammad
 
Cours langage c
Cours langage cCours langage c
Cours langage ccoursuniv
 
DB2 for z/OS and DASD-based Disaster Recovery - Blowing away the myths
DB2 for z/OS and DASD-based Disaster Recovery - Blowing away the mythsDB2 for z/OS and DASD-based Disaster Recovery - Blowing away the myths
DB2 for z/OS and DASD-based Disaster Recovery - Blowing away the mythsFlorence Dubois
 
Reading the LISTCAT entries for VSAM
Reading the LISTCAT entries for VSAMReading the LISTCAT entries for VSAM
Reading the LISTCAT entries for VSAMDan O'Dea
 
0106 debugging
0106 debugging0106 debugging
0106 debuggingvkyecc1
 
How to develop a gateway service using code based implementation
How to develop a gateway service using code based implementationHow to develop a gateway service using code based implementation
How to develop a gateway service using code based implementationnitin2517
 

Tendances (20)

Chapitre 4 Fonctions et procédures.pdf
Chapitre 4 Fonctions et procédures.pdfChapitre 4 Fonctions et procédures.pdf
Chapitre 4 Fonctions et procédures.pdf
 
MVS ABEND CODES
MVS ABEND CODESMVS ABEND CODES
MVS ABEND CODES
 
Exercise in alv
Exercise in alvExercise in alv
Exercise in alv
 
Mainframe interview
Mainframe interviewMainframe interview
Mainframe interview
 
Algorithme chap 1
Algorithme chap 1Algorithme chap 1
Algorithme chap 1
 
An overview of the ims connect client interface
An overview of the ims connect client interfaceAn overview of the ims connect client interface
An overview of the ims connect client interface
 
Abap coding standards
Abap coding standardsAbap coding standards
Abap coding standards
 
Cics Connectivity
Cics ConnectivityCics Connectivity
Cics Connectivity
 
How to chtmultiregionfoam
How to chtmultiregionfoamHow to chtmultiregionfoam
How to chtmultiregionfoam
 
Calculation commands in essbase
Calculation commands in essbaseCalculation commands in essbase
Calculation commands in essbase
 
Cours langage-c
Cours langage-cCours langage-c
Cours langage-c
 
Programmation en C
Programmation en CProgrammation en C
Programmation en C
 
Cours langage c
Cours langage cCours langage c
Cours langage c
 
Web Dynpro
Web DynproWeb Dynpro
Web Dynpro
 
Cobol tutorial
Cobol tutorialCobol tutorial
Cobol tutorial
 
Abap Objects for BW
Abap Objects for BWAbap Objects for BW
Abap Objects for BW
 
DB2 for z/OS and DASD-based Disaster Recovery - Blowing away the myths
DB2 for z/OS and DASD-based Disaster Recovery - Blowing away the mythsDB2 for z/OS and DASD-based Disaster Recovery - Blowing away the myths
DB2 for z/OS and DASD-based Disaster Recovery - Blowing away the myths
 
Reading the LISTCAT entries for VSAM
Reading the LISTCAT entries for VSAMReading the LISTCAT entries for VSAM
Reading the LISTCAT entries for VSAM
 
0106 debugging
0106 debugging0106 debugging
0106 debugging
 
How to develop a gateway service using code based implementation
How to develop a gateway service using code based implementationHow to develop a gateway service using code based implementation
How to develop a gateway service using code based implementation
 

En vedette

PréSentation Tso
PréSentation TsoPréSentation Tso
PréSentation TsoEric Camus
 
Es82 g formation-ibm-system-z-presentation-technique-de-l-evolution-du-materi...
Es82 g formation-ibm-system-z-presentation-technique-de-l-evolution-du-materi...Es82 g formation-ibm-system-z-presentation-technique-de-l-evolution-du-materi...
Es82 g formation-ibm-system-z-presentation-technique-de-l-evolution-du-materi...CERTyou Formation
 
Atelier IBM Pseries
Atelier IBM PseriesAtelier IBM Pseries
Atelier IBM Pseriespimp uncle
 
IBM MVS Implementation
IBM MVS ImplementationIBM MVS Implementation
IBM MVS ImplementationRui Andrade
 
Android Lab Test : Using the sensor gyroscope (english)
Android Lab Test : Using the sensor gyroscope (english)Android Lab Test : Using the sensor gyroscope (english)
Android Lab Test : Using the sensor gyroscope (english)Bruno Delb
 

En vedette (6)

PréSentation Tso
PréSentation TsoPréSentation Tso
PréSentation Tso
 
Es82 g formation-ibm-system-z-presentation-technique-de-l-evolution-du-materi...
Es82 g formation-ibm-system-z-presentation-technique-de-l-evolution-du-materi...Es82 g formation-ibm-system-z-presentation-technique-de-l-evolution-du-materi...
Es82 g formation-ibm-system-z-presentation-technique-de-l-evolution-du-materi...
 
Atelier IBM Pseries
Atelier IBM PseriesAtelier IBM Pseries
Atelier IBM Pseries
 
IBM MVS Implementation
IBM MVS ImplementationIBM MVS Implementation
IBM MVS Implementation
 
Mainframe TSO
Mainframe TSOMainframe TSO
Mainframe TSO
 
Android Lab Test : Using the sensor gyroscope (english)
Android Lab Test : Using the sensor gyroscope (english)Android Lab Test : Using the sensor gyroscope (english)
Android Lab Test : Using the sensor gyroscope (english)
 

Similaire à Le langage Cobol

Le langage Lisp
Le langage LispLe langage Lisp
Le langage LispBruno Delb
 
Assembleur et binaire
Assembleur et binaireAssembleur et binaire
Assembleur et binaireBruno Delb
 
Opencart
OpencartOpencart
Opencartmedfa
 
La base de données Oracle
La base de données OracleLa base de données Oracle
La base de données OracleBruno Delb
 
Le langage Pascal
Le langage PascalLe langage Pascal
Le langage PascalBruno Delb
 
Les artistes du Centre culturel Jovence#5 - Louvigné du Désert
Les artistes du Centre culturel Jovence#5 -  Louvigné du DésertLes artistes du Centre culturel Jovence#5 -  Louvigné du Désert
Les artistes du Centre culturel Jovence#5 - Louvigné du DésertCentre Culturel Jovence
 
Oracle
OracleOracle
OracleMyBlj
 
Statistique descriptive et lois de probabilités
Statistique descriptive et lois de probabilitésStatistique descriptive et lois de probabilités
Statistique descriptive et lois de probabilitésYoucef63000
 
Dossier De Conception Lena Labyrinthe
Dossier De Conception Lena LabyrintheDossier De Conception Lena Labyrinthe
Dossier De Conception Lena Labyrinthegobz
 
Les bases fondamentales du langage transact sql
Les bases fondamentales du langage transact sqlLes bases fondamentales du langage transact sql
Les bases fondamentales du langage transact sqlZineb Meryem
 
The Ring programming language version 1.3 book - Part 1 of 88
The Ring programming language version 1.3 book - Part 1 of 88The Ring programming language version 1.3 book - Part 1 of 88
The Ring programming language version 1.3 book - Part 1 of 88Mahmoud Samir Fayed
 
ICET 2011 PowerPoint workshop - handout
ICET 2011 PowerPoint workshop - handoutICET 2011 PowerPoint workshop - handout
ICET 2011 PowerPoint workshop - handoutj.lodge
 
Les réseaux locaux
Les réseaux locauxLes réseaux locaux
Les réseaux locauxBruno Delb
 
Annexes Logiciel Pl7
Annexes Logiciel Pl7Annexes Logiciel Pl7
Annexes Logiciel Pl7youri59490
 

Similaire à Le langage Cobol (20)

Le langage Lisp
Le langage LispLe langage Lisp
Le langage Lisp
 
Assembleur et binaire
Assembleur et binaireAssembleur et binaire
Assembleur et binaire
 
Opencart
OpencartOpencart
Opencart
 
La base de données Oracle
La base de données OracleLa base de données Oracle
La base de données Oracle
 
VAX
VAXVAX
VAX
 
Complet
CompletComplet
Complet
 
Le langage Pascal
Le langage PascalLe langage Pascal
Le langage Pascal
 
Les artistes du Centre culturel Jovence#5 - Louvigné du Désert
Les artistes du Centre culturel Jovence#5 -  Louvigné du DésertLes artistes du Centre culturel Jovence#5 -  Louvigné du Désert
Les artistes du Centre culturel Jovence#5 - Louvigné du Désert
 
Le PC
Le PCLe PC
Le PC
 
Oracle
OracleOracle
Oracle
 
Statistique descriptive et lois de probabilités
Statistique descriptive et lois de probabilitésStatistique descriptive et lois de probabilités
Statistique descriptive et lois de probabilités
 
Dossier De Conception Lena Labyrinthe
Dossier De Conception Lena LabyrintheDossier De Conception Lena Labyrinthe
Dossier De Conception Lena Labyrinthe
 
Manuel 3
Manuel 3Manuel 3
Manuel 3
 
Manuel 3
Manuel 3Manuel 3
Manuel 3
 
Les bases fondamentales du langage transact sql
Les bases fondamentales du langage transact sqlLes bases fondamentales du langage transact sql
Les bases fondamentales du langage transact sql
 
The Ring programming language version 1.3 book - Part 1 of 88
The Ring programming language version 1.3 book - Part 1 of 88The Ring programming language version 1.3 book - Part 1 of 88
The Ring programming language version 1.3 book - Part 1 of 88
 
ICET 2011 PowerPoint workshop - handout
ICET 2011 PowerPoint workshop - handoutICET 2011 PowerPoint workshop - handout
ICET 2011 PowerPoint workshop - handout
 
Access 2007
Access 2007Access 2007
Access 2007
 
Les réseaux locaux
Les réseaux locauxLes réseaux locaux
Les réseaux locaux
 
Annexes Logiciel Pl7
Annexes Logiciel Pl7Annexes Logiciel Pl7
Annexes Logiciel Pl7
 

Plus de Bruno Delb

Introduction to Swift (tutorial)
Introduction to Swift (tutorial)Introduction to Swift (tutorial)
Introduction to Swift (tutorial)Bruno Delb
 
Android Lab Test : Storage of data with SharedPreferences (english)
Android Lab Test : Storage of data with SharedPreferences (english)Android Lab Test : Storage of data with SharedPreferences (english)
Android Lab Test : Storage of data with SharedPreferences (english)Bruno Delb
 
Android Lab Test : Using the network with HTTP (english)
Android Lab Test : Using the network with HTTP (english)Android Lab Test : Using the network with HTTP (english)
Android Lab Test : Using the network with HTTP (english)Bruno Delb
 
Android Lab Test : Managing sounds with SoundPool (english)
Android Lab Test : Managing sounds with SoundPool (english)Android Lab Test : Managing sounds with SoundPool (english)
Android Lab Test : Managing sounds with SoundPool (english)Bruno Delb
 
Android Lab Test : Using the text-to-speech (english)
Android Lab Test : Using the text-to-speech (english)Android Lab Test : Using the text-to-speech (english)
Android Lab Test : Using the text-to-speech (english)Bruno Delb
 
Android Lab Test : Reading the foot file list (english)
Android Lab Test : Reading the foot file list (english)Android Lab Test : Reading the foot file list (english)
Android Lab Test : Reading the foot file list (english)Bruno Delb
 
Android Lab Test : Creating a menu dynamically (english)
Android Lab Test : Creating a menu dynamically (english)Android Lab Test : Creating a menu dynamically (english)
Android Lab Test : Creating a menu dynamically (english)Bruno Delb
 
Android Lab Test : Creating a dialog Yes/No (english)
Android Lab Test : Creating a dialog Yes/No (english)Android Lab Test : Creating a dialog Yes/No (english)
Android Lab Test : Creating a dialog Yes/No (english)Bruno Delb
 
Android Lab Test : The styles of views (english)
Android Lab Test : The styles of views (english)Android Lab Test : The styles of views (english)
Android Lab Test : The styles of views (english)Bruno Delb
 
Android Lab Test : Creating a menu context (english)
Android Lab Test : Creating a menu context (english)Android Lab Test : Creating a menu context (english)
Android Lab Test : Creating a menu context (english)Bruno Delb
 
Android Lab Test : Using the camera preview (english)
Android Lab Test : Using the camera preview (english)Android Lab Test : Using the camera preview (english)
Android Lab Test : Using the camera preview (english)Bruno Delb
 
Android Lab Test : The views, the Gallery (english)
Android Lab Test : The views, the Gallery (english)Android Lab Test : The views, the Gallery (english)
Android Lab Test : The views, the Gallery (english)Bruno Delb
 
Android Lab Test : Using the WIFI (english)
Android Lab Test : Using the WIFI (english)Android Lab Test : Using the WIFI (english)
Android Lab Test : Using the WIFI (english)Bruno Delb
 
Android Lab Test : Managing the telephone calls (english)
Android Lab Test : Managing the telephone calls (english)Android Lab Test : Managing the telephone calls (english)
Android Lab Test : Managing the telephone calls (english)Bruno Delb
 
Android Lab Test : Reading the SMS-inbox (english)
Android Lab Test : Reading the SMS-inbox (english)Android Lab Test : Reading the SMS-inbox (english)
Android Lab Test : Reading the SMS-inbox (english)Bruno Delb
 
Android Lab Test : Installation of application in Java (english)
Android Lab Test : Installation of application in Java (english)Android Lab Test : Installation of application in Java (english)
Android Lab Test : Installation of application in Java (english)Bruno Delb
 
Android Lab Test : Ecrire un texte sur le canevas (français)
Android Lab Test : Ecrire un texte sur le canevas (français)Android Lab Test : Ecrire un texte sur le canevas (français)
Android Lab Test : Ecrire un texte sur le canevas (français)Bruno Delb
 
Android Lab Test : La connectivité réseau avec HTTP (français)
Android Lab Test : La connectivité réseau avec HTTP (français)Android Lab Test : La connectivité réseau avec HTTP (français)
Android Lab Test : La connectivité réseau avec HTTP (français)Bruno Delb
 
Android Lab Test : Le capteur gyroscope (français)
Android Lab Test : Le capteur gyroscope (français)Android Lab Test : Le capteur gyroscope (français)
Android Lab Test : Le capteur gyroscope (français)Bruno Delb
 
Android Lab Test : Les threads (français)
Android Lab Test : Les threads (français)Android Lab Test : Les threads (français)
Android Lab Test : Les threads (français)Bruno Delb
 

Plus de Bruno Delb (20)

Introduction to Swift (tutorial)
Introduction to Swift (tutorial)Introduction to Swift (tutorial)
Introduction to Swift (tutorial)
 
Android Lab Test : Storage of data with SharedPreferences (english)
Android Lab Test : Storage of data with SharedPreferences (english)Android Lab Test : Storage of data with SharedPreferences (english)
Android Lab Test : Storage of data with SharedPreferences (english)
 
Android Lab Test : Using the network with HTTP (english)
Android Lab Test : Using the network with HTTP (english)Android Lab Test : Using the network with HTTP (english)
Android Lab Test : Using the network with HTTP (english)
 
Android Lab Test : Managing sounds with SoundPool (english)
Android Lab Test : Managing sounds with SoundPool (english)Android Lab Test : Managing sounds with SoundPool (english)
Android Lab Test : Managing sounds with SoundPool (english)
 
Android Lab Test : Using the text-to-speech (english)
Android Lab Test : Using the text-to-speech (english)Android Lab Test : Using the text-to-speech (english)
Android Lab Test : Using the text-to-speech (english)
 
Android Lab Test : Reading the foot file list (english)
Android Lab Test : Reading the foot file list (english)Android Lab Test : Reading the foot file list (english)
Android Lab Test : Reading the foot file list (english)
 
Android Lab Test : Creating a menu dynamically (english)
Android Lab Test : Creating a menu dynamically (english)Android Lab Test : Creating a menu dynamically (english)
Android Lab Test : Creating a menu dynamically (english)
 
Android Lab Test : Creating a dialog Yes/No (english)
Android Lab Test : Creating a dialog Yes/No (english)Android Lab Test : Creating a dialog Yes/No (english)
Android Lab Test : Creating a dialog Yes/No (english)
 
Android Lab Test : The styles of views (english)
Android Lab Test : The styles of views (english)Android Lab Test : The styles of views (english)
Android Lab Test : The styles of views (english)
 
Android Lab Test : Creating a menu context (english)
Android Lab Test : Creating a menu context (english)Android Lab Test : Creating a menu context (english)
Android Lab Test : Creating a menu context (english)
 
Android Lab Test : Using the camera preview (english)
Android Lab Test : Using the camera preview (english)Android Lab Test : Using the camera preview (english)
Android Lab Test : Using the camera preview (english)
 
Android Lab Test : The views, the Gallery (english)
Android Lab Test : The views, the Gallery (english)Android Lab Test : The views, the Gallery (english)
Android Lab Test : The views, the Gallery (english)
 
Android Lab Test : Using the WIFI (english)
Android Lab Test : Using the WIFI (english)Android Lab Test : Using the WIFI (english)
Android Lab Test : Using the WIFI (english)
 
Android Lab Test : Managing the telephone calls (english)
Android Lab Test : Managing the telephone calls (english)Android Lab Test : Managing the telephone calls (english)
Android Lab Test : Managing the telephone calls (english)
 
Android Lab Test : Reading the SMS-inbox (english)
Android Lab Test : Reading the SMS-inbox (english)Android Lab Test : Reading the SMS-inbox (english)
Android Lab Test : Reading the SMS-inbox (english)
 
Android Lab Test : Installation of application in Java (english)
Android Lab Test : Installation of application in Java (english)Android Lab Test : Installation of application in Java (english)
Android Lab Test : Installation of application in Java (english)
 
Android Lab Test : Ecrire un texte sur le canevas (français)
Android Lab Test : Ecrire un texte sur le canevas (français)Android Lab Test : Ecrire un texte sur le canevas (français)
Android Lab Test : Ecrire un texte sur le canevas (français)
 
Android Lab Test : La connectivité réseau avec HTTP (français)
Android Lab Test : La connectivité réseau avec HTTP (français)Android Lab Test : La connectivité réseau avec HTTP (français)
Android Lab Test : La connectivité réseau avec HTTP (français)
 
Android Lab Test : Le capteur gyroscope (français)
Android Lab Test : Le capteur gyroscope (français)Android Lab Test : Le capteur gyroscope (français)
Android Lab Test : Le capteur gyroscope (français)
 
Android Lab Test : Les threads (français)
Android Lab Test : Les threads (français)Android Lab Test : Les threads (français)
Android Lab Test : Les threads (français)
 

Le langage Cobol

  • 1. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol Sommaire LA STRUCTURE D’UN PROGRAMME..........................................................................5 QUELLE EST L’HISTOIRE DU COBOL ?...............................................................................5 QUELLE EST LA STRUCTURE D'UN PROGRAMME ?....................................................................5 IDENTIFICATION DIVISION...................................................................................5 ENVIRONMENT DIVISION......................................................................................5 DATA DIVISION...................................................................................................6 LES COMMANDES.....................................................................................................9 ACCEPT..................................................................................................................9 Définition............................................................................................................9 Syntaxe 1...........................................................................................................9 Description 1.......................................................................................................9 Syntaxe 1...........................................................................................................9 Description 1.......................................................................................................9 Equivallence Pascal..............................................................................................9 ADD.......................................................................................................................9 Définition............................................................................................................9 Syntaxe..............................................................................................................9 Equivalence Pascal...............................................................................................9 CLOSE..................................................................................................................10 Définition..........................................................................................................10 Syntaxe............................................................................................................10 COMPUTE.............................................................................................................10 Définition..........................................................................................................10 DISPLAY...............................................................................................................10 Définition..........................................................................................................10 Syntaxe 1..........................................................................................................10 Syntaxe 2..........................................................................................................11 Description 1.....................................................................................................11 Description 2.....................................................................................................11 DIVIDE.................................................................................................................11 Définition..........................................................................................................11 Syntaxe............................................................................................................11 EXIT.....................................................................................................................11 Définition..........................................................................................................11 Syntaxe............................................................................................................11 IF........................................................................................................................11 Définition..........................................................................................................11 Syntaxe............................................................................................................11 MULTIPLY.............................................................................................................12 Définition..........................................................................................................12 Syntaxe............................................................................................................12 OPEN...................................................................................................................12 Définition..........................................................................................................12 Syntaxe............................................................................................................12 PERFORM..............................................................................................................12 Définition..........................................................................................................12 Syntaxe............................................................................................................13 Equivalence Pascal.............................................................................................13 1
  • 2. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol READ...................................................................................................................13 Définition..........................................................................................................13 Syntaxe............................................................................................................13 SUBSTRACT..........................................................................................................13 Définition..........................................................................................................13 Syntaxe............................................................................................................13 Equivalence Pascal.............................................................................................14 WRITE..................................................................................................................14 Définition..........................................................................................................14 Syntaxe............................................................................................................14 >.........................................................................................................................14 Définition..........................................................................................................14 Syntaxe 1..........................................................................................................14 <.........................................................................................................................15 Définition..........................................................................................................15 Syntaxe............................................................................................................15 =.........................................................................................................................15 Définition..........................................................................................................15 Syntaxe............................................................................................................15 >=.......................................................................................................................15 Définition..........................................................................................................15 Syntaxe............................................................................................................15 <=.......................................................................................................................15 Définition..........................................................................................................15 Syntaxe............................................................................................................15 IS........................................................................................................................16 Définition..........................................................................................................16 Syntaxe............................................................................................................16 LA PROGRAMMATION STRUCTURÉE......................................................................17 QU’EST-CE QU’UN PROGRAMME ?....................................................................................17 QUELS SONT LES TYPES DE STRUCTURE EN ARBRE ?.............................................................17 Qu’est-ce qu’un arbre ?.......................................................................................17 QUEL EST LE SCHÉMA DE CHARGEMENT DE TABLE ?..............................................................18 QUEL EST LE SCHÉMA DE RECHERCHE ?............................................................................18 DE PASCAL À COBOL..............................................................................................21 STRUCTURE GÉNÉRALE DU PROGRAMME.............................................................................21 WORKING-STORAGE SECTION................................................................................21 Scalaires non numériques...................................................................................21 Enregistrements.................................................................................................21 Zone groupée....................................................................................................22 Identification d'un champ....................................................................................22 Types................................................................................................................22 Tableaux...........................................................................................................22 Affectation.........................................................................................................23 Entrées sorties...................................................................................................23 Until.................................................................................................................23 Fichier séquentiel...............................................................................................24 IDENTIFICATION DIVISION.................................................................................24 ENVIRONMENT DIVISION....................................................................................24 DATA DIVISION.................................................................................................25 PROCEDURE DIVISION........................................................................................25 Règles d'écriture................................................................................................25 Déclaration de fichier [SELECT]...........................................................................25 Déclaration d'enregistrement [FD].......................................................................26 Description d'enregistrement...............................................................................27 2
  • 3. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol Ouverture [OPEN]..............................................................................................27 Fermeture [CLOSE]............................................................................................27 Lecture [READ]..................................................................................................27 ECRITURE [WRITE]................................................................................................28 FICHIER IMPRIMANTE..........................................................................................29 FICHIER LECTEUR DE CARTE..................................................................................29 FICHIER IMPRIMANTE............................................................................................29 ECRITURE [WRITE]................................................................................................29 ECRITURE V 2 [WRITE]..........................................................................................29 CARACTERE DE SAUT.........................................................................................30 FICHIER VSAM/ESDS............................................................................................30 DECLARATION DE FICHIER [SELECT].......................................................................30 OUVERTURE DE FICHIER [OPEN].............................................................................31 option...............................................................................................................31 FIN DE FICHIER.....................................................................................................31 RE-ECRITURE DE FICHIER [REWRITE].....................................................................31 FICHIER VSAM/KSDS............................................................................................31 DECLARATION DE FICHIER [SELECT].......................................................................31 OUVERTURE DE FICHIER [OPEN].............................................................................32 POSITIONNEMENT DANS UN FICHIER [START].........................................................33 LECTURE D'UN FICHIER [READ]..............................................................................34 ECRITURE DANS UN FICHIER [WRITE].....................................................................34 dépassement de capacité du fichier......................................................................35 RE-ECRITURE DANS UN FICHIER [REWRITE]............................................................35 SUPPRIMER UN ENREGISTREMENT [DELETE]............................................................35 OUVERTURE POSSIBLE...........................................................................................36 FICHIER VSAM.......................................................................................................36 CODE RETOUR......................................................................................................36 E/S........................................................................................................................38 ARRET DE PROGRAMME [STOP]...............................................................................38 LECTURE INFORMATION [ACCEPT]..........................................................................38 ENVOI DE MESSAGE [DISPLAY]..............................................................................38 DONNEE ................................................................................................................39 DEFINITION..........................................................................................................39 numéro-niveau..................................................................................................39 nom-donnée......................................................................................................39 image...............................................................................................................39 image alphanumérique.......................................................................................40 image numérique...............................................................................................40 image numérique - EBCDIC.................................................................................40 image numérique d'édition..................................................................................41 image alphabétique............................................................................................42 valeur initiale (optionnel)....................................................................................42 Représentation des données : USAGE...................................................................43 Valeur binaire : COMPUTATIONAL........................................................................43 WORKING STORAGE SECTION...............................................................................44 PRESENTATION.....................................................................................................44 ZONE...................................................................................................................44 ELEMENTAIRE....................................................................................................44 GROUPEE..............................................................................................................45 3
  • 4. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol INDEPENDANTE.................................................................................................45 NOMBRE-NIVEAU...............................................................................................45 Alignement mémoire..........................................................................................45 Redéfinition des zones........................................................................................46 Noms de condition..............................................................................................47 Expression RENAMES..........................................................................................47 PROCEDURE DIVISION..........................................................................................48 INTRODUCTION.....................................................................................................48 4
  • 5. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol La structure d’un programme Quelle est l’histoire du COBOL ? L’histoire du COBOL (COmmon Business Oriented Language) est résumée dans le tableau suivant. Année Evénement 1954 Premier langage évolué : FORTRAN 1960 CODASYL (Conférence On DAta SYstem Language fournit une ébauche de description) => COBOL 60, COBOL 61 1968 COBOL 65 reconnu comme standard 1974 Norme ANS (American National Standard) CODASYL ajoute des perfectionnements au standard Quelle est la structure d'un programme ? IDENTIFICATION DIVISION. Nom du programme. PROGRAM-ID. nom-programme. Auteur [AUTHOR. commentaire] Installation. [INSTALLATION. commentaire] Date d'écriture du programme. [DATE-WRITTEN. commentaire] Date de compilation du [DATE-COMPILED. commentaire] programme. Sécurité. [SECURITY. commentaire] Remarques diverses. [REMARKS. commentaire] ENVIRONMENT DIVISION. CONFIGURATION SECTION. Nom de l'ordinateur sur lequel le [SOURCE-COMPUTER. nom [WITH DEBUGGING source a été écrit. MODEM].] Nom de l'ordinateur sur lequel [OBJECT-COMPUTER. nom-ordinateur l'objet a été créé. La taille mémoire est de "entier" [MEMORY SIZE entier type] unités "type" (WORDS, CHARACTERS, MODULES). [PROGRAM COLLATING SEQUENCE IS nom- alphabet].] 5
  • 6. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol INPUT-OUTPUT SECTION. FILE-CONTROL. Associe le fichier physique au SELECT [OPTIONNAL] fichier-physique ASSIGN fichier logique [classique, ou SYSIN (organe d'entrée) ou TO SYSOUT (organe de sortie)]. fichier-logique Type d'organisation [RESERVE entier AREA] (SEQUENTIAL, INDEXED, RELATIVE) séquentiel par défaut. Type d'accès (SEQUENTIAL, [ORGANIZATION type-organisation] INDEXED, RELATIVE) séquentiel par défaut. [ACCESS MODE IS type-organisation] [RECORD KEY nom-donnee-1] [ALTERNATE RECORD KEY nom-donnee-2 [WITH DUPLICATES]] DATA DIVISION. FILE SECTION. Le format des données est type- FD fichier-physique [EXTERNAL] [GLOBAL] format (F format fixe, V format varaible, U format indéfini). [RECORDING MODE IS type-format] Spécifie la taille d'un bloc, les [BLOCK CONTAINS [entier1 TO] entier2 type- limites inférieure et supérieure de la page étant entier1 et entier2 bloc] unités de type-bloc (RECORDS, CHARACTERS). Spécifie le nombre de caractères [RECORD CONTAINS entier3 [TO entier4]] d'un enregistrement (simple commentaire). [RECORD VARYING [FROM entier5]] [RECORD [To entier6] CHARACTERS] [DEPENDING ON nom-donnée] Permet d'ajouter (STANDARD) ou [LABEL RECORD type-label] de ne pas ajouter (OMITTED) selon "type-label" les "labels" définis le Sytème de Gestion de Fichier (SGF). [VALUE OF FILE-ID nom-système] Liste des enregistrements (en [DATA RECORD nom-enreg1 [nom-enreg2] ...] guise de commentaire). [LINAGE IS nom1 [FOOTING nom2] [LINES TOP nom3] [LINES BOTTOM nom4]] [CODE-SET nom-alphabet] [REPORT nom-état] 01 nom-enreg1. ... 6
  • 7. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol WORKING-STORAGE SECTION. 77 nom-element PIC description [VALUE valeur]. Il faut "littéral1" <= "littéral2". 88 nom-condition VALUE ARE littéral1 [THRU littéral2] "nom-donnée1" est le nom de la 01 à 49 nom-donnée1 [EXTERNAL] [GLOBAL] donnée ou FILLER (permet de définir une variable à laquelle on n'a pas accès). Redéfinit "nom2" avec la [REDEFINES nom-donnée2] structure de "nom1". [PIC description] ; Note : PIC peut être remplacé par PICTURE. DECLARATIVES. nom-section SECTION. 7
  • 8. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol Les commandes ACCEPT Définition Lecture au clavier Syntaxe 1 ACCEPT nom-donnée Description 1 Lit une donnée au clavier et la met dans "nom-donnée". Syntaxe 1 ACCEPT nom-donnée FROM nom-mnémonique Description 1 "nom-mnémonique" est défini dans SPECIAL-NAMES ou vaut CONSOLE (clavier), DATE (6 octets), DAY (5 octets), DAY-OF-WEEK, ou TIME (8 octets). Equivallence Pascal ACCEPT Zone <=> ReadLn (Zone); ADD Définition Addition Syntaxe Affectation de "nom-donnée2 ..." ADD nom-donnée1 ... TO nom-donnée2 à "nom-donnée1 ...", éventuellement avec arrondi. [ROUNDED] ... Exécute "ordre1" en cas de [ON SIZE ERROR ordre1] dépassement de capacité. Exécute "ordre2" en cas de non [NOT SIZE ERROR ordre2] dépassement de capacité. Indique la fin de l'ordre ADD. [END-ADD] Equivalence Pascal 9
  • 9. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol ADD a b TO c d. <=> c := c + a + b; d := d + a + b; ADD a b GIVING c; <=> c := a + b; CLOSE Définition Fermeture de fichier. Ferme le fichier "nom-fichier". Syntaxe CLOSE nom-fichier [type1 [FOR REMOVAL]] CLOSE nom-fichier [WITH type2] COMPUTE Définition Calcul Effectue des calculs. COMPUTE nom-donnée1 [ROUNDED] "nom-donnée1" reçoit la valeur = expression de "expression". Exécute "ordre1" en cas de [ON SIZE ERROR ordre1] dépassement de capacité. Exécute "ordre2" en cas de non [NOT SIZE ERROR ordre2] dépassement de capacité. Indique la fin de l'ordre [END-COMPUTE] COMPUTE. DISPLAY Définition Affichage à l'écran Affiche des données à l'écran. Syntaxe 1 10
  • 10. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol DISPLAY nom-donnée1 ... Syntaxe 2 DISPLAY nom-donnée1 ... UPON nom-mnémonique Description 1 Affiche "nom-donnée1 ..." à l'écran. Description 2 Idem mais dans un nom-mnémonique, sur l'écran (CONSOLE) ou sur le perforateur de carte (SYSPUNCH). DIVIDE Définition Division Syntaxe INTO peut être remplacé par BY. DIVIDE nom-donnée1 INTO nom-donnée2 "nom-donnée3" := "nom- [GIVING nom-donnée3 [ROUNDED] ... ] donnée1" / "nom-donnée2" Exécute "ordre1" en cas de [ON SIZE ERROR ordre1] dépassement de capacité. Exécute "ordre2" en cas de non [NOT SIZE ERROR ordre2] dépassement de capacité. Indique la fin de l'ordre [END-DIVIDIDE] DIVIDIDE. EXIT Définition Sortie Ne fait rien (utilisé dans les paragraphes vides). Syntaxe EXIT IF Définition Condition "Si" Exécution "instruction1" à la condition "condition". Syntaxe 11
  • 11. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol Si "condition1" est vrai, alors IF condition1 instruction1 "instruction1" est exécuté ou "instruction1" peut être NEXT SENTENCE (pointe sur l'instruction suivante, juste après le point). Sinon, "instruction2" est exécuté. [ELSE instruction2] Indique la fin de l'ordre. [END-IF] MULTIPLY Définition Multiplication Effectue une multiplication. Syntaxe "nom-donnée1" := "nom- MULTIPLY nom-donnée1 BY nom-donnée2 donnée1" * "nom-donnée2" "nom-donnée3" := "nom- [GIVING nom-donnée3] donnée1" * "nom-donnée2" [ROUNDED] Exécute "ordre1" en cas de [ON SIZE ERROR ordre1] dépassement de capacité. Exécute "ordre2" en cas de non [NOT SIZE ERROR ordre2] dépassement de capacité. Indique la fin de l'ordre [END-DIVIDE] MULTIPLY. OPEN Définition Ouverture de fichier Ouverture du fichier "nom-fichier" Syntaxe en lecture OPEN INPUT nom-fichier [REVERSED] OPEN INPUT nom-fichier [WITH NO REWIND] en écriture OPEN OUTPUT nom-fichier [WITH NO REWIND] OPEN I-O nom-fichier1 ... OPEN EXTEND nom-fichier1 ... PERFORM Définition 12
  • 12. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol Traitement de paragraphe Exécute une (ou des) procédure. Syntaxe THRU permet l'enchaînement de PERFORM [nom-procedure1 [THRU nom- l'exécution de plusieurs paragraphes avant de revenir à procedure2]] l'instruction qui suit PERFORM. Continue jusqu'à ce que UNTIL condition [TEST moment] "condition" soit vrai, le test se faisant au moment "moment" (BEFORE, AFTER). [ordre END-PERFORM] Equivalence Pascal PERFORM tâche UNTIL condition => condition à gauche, instruction à droite READ Définition Lecture de fichier Lit un enregistrement du fichier "nom-fichier". Syntaxe INTO permet de transférer la READ nom-fichier [NEXT] RECORD [INTO nom- valeur dans "nom-donnée". donnée] Exécute "ordre1" si arrivé en fin [AT END ordre1] de fichier. Exécute "ordre2" si pas arrivé en [NOT AT END ordre2] fin de fichier. Indique la fin de l'ordre "READ". [END-READ] SUBSTRACT Définition Soustraction Effectue une soustraction. Syntaxe "nom-donnée2" := "nom- SUBSTRACT nom-donnée1 ... FROM nom- donnée2" - "nom-donnée1 ..." donnée2 "nom-donnée3" := "nom- [GIVING nom-donnée3] donnée1" - "nom-donnée2" 13
  • 13. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol [ROUNDED] Exécute "ordre1" en cas de [ON SIZE ERROR ordre1] dépassement de capacité. Exécute "ordre2" en cas de non [NOT SIZE ERROR ordre2] dépassement de capacité. Indique la fin de l'ordre [END-SUBSTRACT SUBSTRACT. Equivalence Pascal SUBSTRACT a b FROM c GIVING d. <=> d := c - a b; WRITE Définition Ecriture d'enregistrement Ecrit l'enregistrement "nom-enreg1". Syntaxe FROM permet d'écrire "nom- WRITE nom-enreg1 [FROM nom-donnée1] donnée1" à la place de l'enregistrement "nom-enreg1". Fait sauter "nom-donnée2" lignes [moment ADVANCING nom-donnée2 LINE] au moment "moment" (AFTER, BEFORE). [moment ADVANCING nom-mnémonique] Fait sauter une page au moment [moment ADVANCING-PAGE] "moment" (AFTER, BEFORE). Exécute "ordre" si arrivé en fin [END-OF-PAGE ordre] de page (concerne l'imprimante). Exécute "ordre" si pas arrivé en [NOT END-OF-PAGE ordre] fin de page (concerne l'imprimante). Note : END-OF-PAGE <=> EOP. Indique la fin de l'ordre WRITE. [END-WRITE] > Définition Opérateur > Syntaxe 1 nom-donnée1 IS [NOT] GREATER nom-donnée2 [NOT] > nom-donnée1 > nom-donnée2 14
  • 14. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol < Définition Opérateur < Syntaxe nom-donnée1 IS [NOT] LESS nom-donnée2 [NOT] < nom-donnée1 < nom-donnée2 = Définition Opérateur = Syntaxe nom-donnée1 IS [NOT] EQUAL nom-donnée2 [NOT] = nom-donnée1 = nom-donnée2 >= Définition Opérateur >= Syntaxe nom-donnée1 IS [NOT] GREATER OR EQUAL nom-donnée2 [NOT] >= nom-donnée1 >= nom-donnée2 <= Définition Opérateur <= Syntaxe nom-donnée1 IS [NOT] LESS OR EQUAL nom-donnée2 [NOT] <= nom-donnée1 >= nom-donnée2 15
  • 15. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol IS Définition Retourne le signe Syntaxe expression IS [NOT] signe signe vaut (POSITIVE, NEGATIVE, ZERO). 16
  • 16. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol La programmation structurée Qu’est-ce qu’un programme ? C'est un ensemble de traitements conditionnels ou non conditionnels appliqués à des objets hiérarchisés. Quels sont les types de structure en arbre ? Qu’est-ce qu’un arbre ? Le COBOL structuré utilise les arbres pragmatiques (ou programmatiques). Un arbre est constitué de : • la structure répétitive : s'applique aux objets NOEUD F FEUILLE D OBJET • la structure alternative : s'applique aux traitements NOEUD F FEUILLE FEUILLE D OBJET OBJET Qu’est-ce qu’un rond ? Un rond représente un noeud donnant naissance à une structure de niveau inférieur. Qu’est-ce qu’un feuille ? Une feuille est un noeud en bout d'arbre. Elle peut toujours être transformée en noeuds. => extensibilité de l'arbre Qu’est-ce qu’un carré ? Le carré représente une feuille dépendant toujours d'un noeud. Un noeud donne toujours naissance à au moins deux feuilles carrées. Comment lire l’arbre ? Le sens de lecture est de la droite vers la gauche (sens des flèches). Qu’est-ce qu’une feuille « Début » ? D Début (toujours à droite de l'arbre) Qu’est-ce qu’une feuille « Fin » ? F Fin (toujours à gauche de l'arbre) Qu’est-ce qu’une feuille « Intermédiaire » ? 17
  • 17. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol In Feuille intermédiaire s Quel est le schéma de chargement de table ? CHARGEMENT D'UNE TABLE F ARRETER CLIENT D PROGRAMME En partant du NOEUD : • exécuter D-NOEUD • exécuter CLIENT • exécuter I • rien ou arrêter programme • exécuter F-NOEUD => Passer d'une feuille carrée à une autre d'un même niveau, c'est-à-dire issue du même noeud en passant par l'intermédiaire de feuilles rondes qui sont choisies en fonction de conditions. Quel est le schéma de recherche ? 18
  • 18. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol RECHERCHE RECHERCHE CLIENT EDITER F CLIENT CUMULER D => SEARCH (1) NON MONTANT => SEARCH ALL (2) TROUVE *********** * WORKING * *********** * WORKING-STORAGE SECTION. 77 NB-POSTE COMP VALUE 0. 88 DEPASSEMENT-TABLE VALUE 121. 77 INDIC-TROUVE COMP VALUE 0. 88 CLIENT-TROUVE VALUE 1. 01 TABLE. 05 POSTE-TABLE OCCURS 120 DEPENDING ON NB-POSTE ASCENDING CLIENT-TABLE (2) INDEXED BY IND-POSTE. 10 CLIENT-TABLE PIC XXXX. 10 MONTANT-TABLE PIC 59(5)V99 COMP-3. ************************** * CHARGEMENT D'UNE TABLE * ************************** * ************ * STRUCTURE ************ * CHARGEMENT-TABLE-CLIENT. PERFORM D-CHARGEMENT-TABLE-CLIENT. PERFORM CLIENT. UNTIL DERNIER-CLIENT OR DEPASSEMENT-DE-TABLE. PERFORM I-1-CHARGEMENT-TABLE-CLIENT. IF DEPASSEMENT-DE-TABLE-CLIENT. PERFORM ARRETER-PROGRAMME. PERFORM F-CHARGEMENT-TABLE-CLIENT. * ************* * TRAITEMENT ************* * D-CHARGEMENT-TABLE-CLIENT. SET IND-POSTE TO 1. CLIENT. ADD 1 TO NB-POSTE. MOVE CLIENT-FICHIER TO CLIENT-TABLE (IND-POSTE). MOVE ZERO TO MONTANT-TABLE (IND-POSTE). SET IND-POSTE UP BY 1. READ FICHIER-CLIENT AT END MOVE HIGH-VALUE TO ENR-CLIENT. I-1-CHARGEMENT-TABLE-CLIENT. CLOSE FICHIER-CLIENT. ARRETER-PROGRAMME. MOVE 'Plus de 120 clients dans la table. Arrêt du programme' TO LIBELLE-ANO. WRITE ENR-CR FROM LIGNE-ANO. WRITE ENR-CR FROM LIGNE-FIN-ANO. ENTER DUMPONS. F-CHARGEMENT-TABLE-CLIENT. EXIT. **************************** * RECHERCHE « SEARCH » * (1) * RECHERCHE « SEARCH ALL » * (2) **************************** * ************ * STRUCTURE ************ * RECHERCHE-CLIENT. PERFORM D-RECHERCHE-CLIENT. 19
  • 19. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol IF CLIENT-TROUVE PERFORM CUMULER-MONTANT ELSE PERFORM EDITER-CLIENT-NON-TROUVE. PERFORM F-RECHERCHE-CLIENT. * ************* * TRAITEMENT ************* * D-RECHERCHE-CLIENT. SET IND-POSTE TO 1. (1) SEARCH POSTE-TABLE AT END (1) SEARCH ALL POSTE-TABLE AT END (2) MOVE 0 TO INDIC-TROUVE WHEN CLIENT-F = CLIENT-TABLE (IND-POSTE) (1) MOVE 1 TO INDIC-TROUVE. (1) CUMULER-MONTANT. ADD MONTANT-F TO MONTANT-TABLE (IND-POSTE). EDITER-CLIENT-NON-TROUVE. MOVE CLIENT-F TO CLIENT-CR. MOVE 'Client non trouvé dans la table.' TO LIBELLE-CLIENT. WRITE ENR-CR FROM LIGNE-ANC-CLIENT. F-RECHERCHE-CLIENT. EXIT. 20
  • 20. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol De Pascal à Cobol Structure générale du programme Pascal Cobol PROGRAM nom_programme; IDENTIFICATION DIVISION. PROGRAM-ID. nom_programme. CONST ENVIRONMENT DIVISION. TYPE ... VAR DATA DIVISION. FILE SECTION. ... (fichiers) WORKING-STORAGE SECTION. ... (données) BEGIN PROCEDURE DIVISION. ... ... (divisé en sections et END. paragraphes WORKING-STORAGE SECTION. Pascal Cobol VAR ident1 : INTEGER; DATA DIVISION. ident2 : REAL; WORKING-STORAGE SECTION. 77 ident1 PIC longueur [USAGE] ncode [VALUE valeur] Scalaires non numériques Pascal Cobol VAR a : CHAR; PIC X (ou zones groupées) b : BOOLEAN; c : STRING; d : enumeration; e : intervalle; VAR C : CHAR; 77 C PIC X. VAR B : BOOLEAN; VAR S : STRING [40]; 77 S PIC X(40). VAR J : (lundi, mardi,..); (pas d'équivalent) VAR I : 1..31; (ne peut être que décimal) Enregistrements Pascal Cobol 21
  • 21. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol VAR WORKING-STORAGE SECTION. PERSONNE : RECORD 01 PERSONNE. NUM_SS : STRING [13]; 05 NUM-SS PIC X(13). IDENT : RECORD 05 IDENT. NOM : STRING [20]; 10 NOM PIC X(20). PRENOM : STRING [20]; 10 PRENOM PIC X(20). END; ETAT_CIVIL : CHAR; 05 ETAT-CIVIL PIC X(1). ADRESSE : RECORD 05 ADRESSE. NUM : STRING [5]; 10 NUM PIC X(5). RUE : STRING [40]; 10 RUE PIC X(40). VILLE : STRING [30]; 10 VILLE PIC X(30). CODE_POSTAL : RECORD 10 CODE-POSTAL. DEP : 1..95; 15 DEP PIC 9(2). BUREAU : 0..999; 15 BUREAU PIC 9(3). END; END; Zone groupée Une zone groupée est un champ non terminal. Elle est toujours considérée comme alphanumérique (donc en PIC X). Identification d'un champ Pascal Cobol personne.adresse.rue rue (ou) rue IN adresse (ou) rue IN adresse IN personne (à utiliser si l'on a plusieurs variables de même type) Types Pascal Cobol TYPE (pas de type en COBOL) pers = RECORD 01 p1. nom : STRING [15]; 05 nom PIC X(15). prenom : STRING [10]; 05 prenom PIC X(10). END; 02 p2. VAR 05 nom PIC X(15). p1, p2 : pers; 05 prenom PIC X(10). p1.nom nom IN p1. p2.pre prenom IN p2. Tableaux Pascal Cobol VAR (pas d'équivalent direct) t : ARRAY [1..100] OF STRING [10]; tab : RECORD 01 tab. 22
  • 22. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol t : ARRAY [1..100] OF STRING [10]; 05 t OCCURS 100 PIC X(10). Identification du tableau : TAB, TAB ou TAB.T Identification d'un élément de rang I : T (I) [IN TAB ] m : ARRAY [1..10, 1..5] OF STRING (pas en COBOL) [20]; tab_tab : RECORD 01 tab-tab. t : ARRAY [1..10] OF 05 t OCCURS 10. ARRAY [1..5] OF STRING [20]; 10 st OCCURS s PIC X(20). END; Identification des champs : tab-tab, tab-tab.t [i], t (i) ou t (i) IN tab-tab, tab-tab.t [i] [j], st (i, j) Affectation Pascal Cobol := MOVE TO VAR s1 : STRING [6]; 77 s1 PIC X(6). s2 : STRING [4]; s2 PIC X(4). s2 := s1; MOVE s1 TO s2. (=> erreur si¦(pas d'erreur) LENGTH (s2) > 4) (Zone émettrice > zone réceptrice => troncature (Zone émettrice < zone réceptrice => troncature Zones numériques : Pascal Cobol VAR (alignement sur la virgule, conversions) i : INTEGER; 77 i PIC S9(4) COMP. j : REAL; 77 j PIC COMP-1. 77 k PIC 9(4)V99 COMP-3. 77 l PIC S9V99. MOVE i TO j. (conversion dans le mode de représentation de j) MOVE k TO l. (k > 9,99 => erreur) Entrées sorties Pascal Cobol VAR 77 i PIC S9(4) COMP. (faux) i : INTEGER; ACCEPT i. READLN (i); 77 a PIC 9(4) [DISPLAY]. 77 i PIC S9(4) COMP. ACCEPT a. MOVE a TO i. WRITELN ('coucou', i); DISPLAY 'coucou', i Until Pascal Cobol WHILE condition DO PERFORM nom_paragraphe 23
  • 23. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol instructions; UNTIL condition nom-paragraphe-1. (instructions) nom-paragraphe-2. Fichier séquentiel Description : ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT nom-interne ASSIGN TO nom-externe ... DATA DIVISION. FILE SECTION. FD nom-interne LABEL RECORD IS STANDARD ... DATA RECORD IS nom-fenetre 01 nom-fenetre (idem que WORKING-STORAGE SECTION) Notes : • nom-externe entre guillemets • suffixe DAT pour données • suffixe LIS pour imprimante Utilisation : Pascal Cobol ASSIGN (nom-interne, nom-externe) SELECT (dans l'ENVIRONMENT DIVISION) REWRITE (nom-interne) OPEN OUTPUT nom-interne RESET (nom-interne) OPEN INPUT nom-interne READ (nom-interne, nom-fenetre) READ nom-interne AT END instruction WRITE (nom-interne, nom-fenetre) WRITE nom-fenetre CLOSE (nom-interne) CLOSE nom-interne IDENTIFICATION DIVISION La division IDENTIFICATION donne un nom au programme, afin de le différencier des autres. Elle donne des explications (sous forme de commentaires) sur le programme. ENVIRONMENT DIVISION 24
  • 24. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol La division ENVIRONMENT décrit physiquement les fichiers utilisés. DATA DIVISION La division DATA : • réserve la mémoire • décrit logiquement les données (description des enregistrements, ...) PROCEDURE DIVISION La division PROCEDURE décrit le traitement à effectuer, c'est-à-dire les ordres. Règles d'écriture Colonne début Colonne fin Description 1 6 Numéros de ligne. 7 7 "*" pour un commentaire. "-" pour continuer la ligne précédente. " " pour une ligne normale. 8 72 Noms de division, de section, de paragraphe. 12 72 Instructions. 73 80 Commentaire. Déclaration de fichier [SELECT] SELECT nom-fichier ASSIGN TO SYSn-classe-type-organisation nom-externe. SELECT associe un fichier sur disque (nom-externe) à un nom utilisé dans le programme (nom-fichier). Argument Description nom-fichier Nom du fichier utilisé dans le programme. 30 caractères au maximum. SYSn Unité logique affectée à ce fichier. n ∈ [0, 240] classe Classe du périphérique. "UR" (Unit Record) pour le lecteur de cartes ou l'imprimante. "UT" (Utility) pour les fichiers séquentiels. "AS" (Access Sequential) pour les fichiers ESDS. type Type du périphérique. "2501" pour le lecteur de cartes. "1403" pour l'imprimante. "2400" pour la bande. "3330" pour le disque. organisation Organisation du fichier. "S" pour les fichiers séquentiels. Rien pour les autres. nom-externe Nom du fichier utilisé par le JCL (donc sur disque). 7 caractères au maximum. 25
  • 25. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol Déclaration d'enregistrement [FD] FD (File Definition) décrit les fichiers. Nom du fichier utilisé dans le FD nom-fichier programme, définit avec SELECT. Type de longueur des [RECORD MODE IS mode] enregistrements : - "F" pour une longueur fixe. - "V" pour une longueur variable. - "U" pour une lonueur indéfinie. Note : "F" et "V" sont déterminés automatiquement. Longueur de l'enregistrement en [RECORD CONTAINS entier1 [TO entier2] caractères. CHARACTERS] Pour les enregistrements : - de longueur fixe, préciser entier1 - de longueur variable, préciser "entier1" (longueur du plus petit enregistrement) et "entier2" (longueur du plus grand enregistrement) Taille des blocs physiques, afin [BLOCK CONTAINS entier3 de grouper des enregistrements. Ne concerne pas les enregistrements de longueur indéfinie. Indique le nombre [TO entier4] CHARACTERS d'enregistrements par bloc. Cas particulier pour les enregistrements de longueur variable : prendre les enregistrements de longueur maximale. Longueur physique du bloc : ( (Longueur maximale de l'enregistrement) + 4 octets (comptage de l'enregistrement) ) = Longueur physique de l'enregistrement. x nombre d'enregistrements dans un bloc = Longueur logique du bloc + 4 octets (comptage du bloc) = Longueur physique du bloc Indique le nombre de caractères /RECORD] par bloc. Indique le type de labels. LABEL RECORD 26
  • 26. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol Indique que le label du fichier est IS STANDARD/ au format IBM. Le label est créé lors de l'écriture dans le fichier. Il est utilisé au niveau du JCL (carte DLBL pour les fichiers sur disque, carte TLBL pour les fichiers sur bande magnétique). Indique que le fichier n'a pas de OMITTED label. Indique le (ou les) nom(s) de la [DATA RECORD IS nom-enreg1 [nom- zone tampon. enreg2] ...]. Description d'enregistrement Le nom de l'enregistrement : • est au niveau 01 • se trouve dans la clause DATA RECORD de l'ordre FD Notes : la clause VALUE est interdite, sauf pour les niveaux 88. Ouverture [OPEN] OPEN : • ouvre un fichier • contrôle (cas de la lecture) ou crée (cas de l'écriture) le label OPEN Indique que le fichier est en INPUT/ lecture. Indique que le fichier est en OUTPUT écriture. Nom du fichier utilisé dans le nom-fichier-1 [nom-fichier2 ...] programme, défini avec SELECT Fermeture [CLOSE] CLOSE : • ferme un (ou des) fichier(s) • vérifie les labels de fin CLOSE C'est le nom du fichier utilisé nom-fichier1 dans le programme, défini avec SELECT. WITH LOCK s'applique aux fichier [WITH LOCK] [nom-fichier-2 ...] sur bande. Cette option permet de décharger et de libérer la bande. Lecture [READ] READ : 27
  • 27. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol • lit un enregistrement • le stocke dans la variable indiquée par DATA RECORD • indique quoi faire en fin de fichier READ nom-fichier Permet de stocker [ INTO nom-donnée ] l'enregistrement lu : • dans la variable indiquée par DATA RECORD et • dans la variable "nom-donnée" Exécuter les instructions AT END instructions. indiquées lorsque la fin de fichier est atteinte. Remarques : • L'enregistrement est accessible tant qu'un READ ou qu'un CLOSE n'a pas été exécuté. • Ne plus utiliser la variable stockant l'enregistrement après une fin de fichier. ECRITURE [WRITE] WRITE écrit un enregistrement dans un fichier. WRITE nom-enregistrement [ FROM nom-donnée ] [ INVALID KEY instructions ]. Remarque : On n'indique pas le nom du fichier, mais le nom de l'enregistrement. nom-enregistrement C'est le nom de la variable stockant l'enregistrement indiquée par DATA RECORD. FROM Permet de transférer le contenu de la variable indiquée, et non pas la variable indiquée par DATA RECORD, dans le fichier. INVALID KEY Si l'écriture fait déborder le fichier, alors exécuter les instructions indiquées. 28
  • 28. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol Fichier imprimante FICHIER LECTEUR DE CARTE Un lecteur de cartes est utilisé comme un fichier séquentiel. Toutefois, il y a quelques différences : • Les enregistrements contiennent 80 caractères, et sont donc fixes. • Le fichier ne contient pas de label. FICHIER IMPRIMANTE Une imprimante est utilisée comme un fichier séquentiel. Toutefois, il y a quelques différences : • Les enregistrements contiennent 133 caractères (y compris le caractère de saut de ligne), et sont donc fixes. • Le fichier ne contient pas de label. ECRITURE [WRITE] WRITE imprime un enregistrement. WRITE nom-enregistrement [ FROM nom-donnée ] AFTER POSITIONING nombre/caractere-saut [ LINES ] caractere-saut caractere-saut est est un caractère contenant un code de saut ASA. Nombre Indique le nombre de lignes à sauter. Si nombre = 0, alors effectue un saut de page. Note : Incompatible avec l'autre version (avec AFTER/BEFORE ADVANCING). ECRITURE V 2 [WRITE] WRITE imprime un enregistrement. WRITE nom-enregistrement [ FROM nom-donnée ] 29
  • 29. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol AFTER/BEFORE ADVANCING nombre/caractere-saut [ LINES ] Note : Incompatible avec l'autre version (avec POSITIONNING). Nombre Indique le nombre de lignes à sauter (maximum 100). AFTER ADVANCING L'impression de la ligne s'effectue après le saut précisé. BEFORE ADVANCING L'impression de la ligne s'effectue avant le saut précisé. CARACTERE DE SAUT On introduit ici la notion de caractère de saut "ASA". Il permet d'effectuer un saut de ligne, de page, ou encore de modifier l'espacement de ligne. Caractère de saut Description "" Espacement simple "0" Espacement double "-" Espacement triple "+" Pas d'espacement "1" Saut de page "2".."9" Saut indiqué par le canal correspondant de la bande pilote "A".."C" Saut au canal 10, 11, 12 Les sauts de canaux (1 à 9 et A, B, C) provoquent un saut à une ligne précise de la page. Cela dépend de la bande pilote utilisée. Par exemple, le canal 1 provoque un saut en première ligne de la page suivante. FICHIER VSAM/ESDS DECLARATION DE FICHIER [SELECT] Il est préférable d'utiliser la clause "FILE STATUS". Cette zone contient le code retour lors de l'ouverture et de la fermeture du fichier. Si le code retour est égal à : • 00 : la lecture ou l'écriture s'est bien déroulée • 10 : la fin du fichier a été atteinte 30
  • 30. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol OUVERTURE DE FICHIER [OPEN] OPEN option nom-fichier1 nom-fichier2 ... . OPEN ouvre un fichier VSAM. OPEN / ACCESS INPUT OUTPUT I-O EXTEND READ O N O N O : accès autorisé WRITE N O N O N : accès interdit REWRITE N N O N option Valeur de option Description INPUT Ouverture en mode lecture seulement. OUTPUT Ouverture en mode écriture seulement. I-O Ouverture en mode lecture et écriture. EXTEND Ouverture en mode ajout. FIN DE FICHIER Pour tester la fin du fichier (FF), on peut : • tester la valeur de la zone indiquée dans FILE STATUS : Elle sera égale à 10 s'il y a FF. • utiliser la clause AT END dans le READ. Cette clause est optionnelle. RE-ECRITURE DE FICHIER [REWRITE] REWRITE ré-écrit le dernier enregistrement lu. Le fichier doit être ouvert en mode "I-O". FICHIER VSAM/KSDS DECLARATION DE FICHIER [SELECT] SELECT nom-fichier ASSIGN TO SYSn-nomDLBL ORGANIZATION IS INDEXED [ ACCESS MODE IS ] type-accès 31
  • 31. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol RECORD KEY nom-zone-1 [ FILE STATUS IS nom-zone-2 ]. SELECT associe un fichier VSAM/KSDS sur disque (nom-externe) à un nom utilisé dans le programme (nom-fichier). nom-fichier Nom du fichier utilisé dans le programme. x 30 caractères au maximum. SYSn Unité logique affectée à ce fichier. X n _ [0, 240] nom-DLBL Nom de la DLBL. type-accès = SEQUENTIAL pour un accès séquentiel (par défaut) x = RANDOM pour un accès par clé x = DYNAMIC pour un accès séquentiel et par clé RECORD KEY RECORD KEY précise la zone qui contient la clé. La clé est une sous-zone de l'enregistrement du fichier, et doit être de longueur identique à celle définie dans le paramètre KEYS du DEFINE du fichier. RECORD CONTAINS Il est recommandé d'utiliser la clause RECORD CONTAINS afin que COBOL effectue le contrôle avec la description faite au momen du DEFINE. OUVERTURE DE FICHIER [OPEN] OPEN option nom-fichier1 nom-fichier2 ... . OPEN ouvre un fichier VSAM. +--------------------------------------------------------+ ¦Option¦Description¦ ¦-----------+--------------------------------------------¦ ¦INPUT¦Ouverture en mode lecture seulement,¦ ¦¦avec accès sur clé pour RANDOM et DYNAMIC.¦ ¦OUTPUT¦Ouverture en mode écriture seulement,¦ 32
  • 32. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol ¦¦création si inexistant en mode SEQUENTIAL.¦ ¦I-O¦Ouverture en mode lecture et écriture :¦ ¦¦. modification / suppression pour l'accès¦ ¦¦SEQUENTIAL/RANDOM/DYNAMIC¦ ¦¦. ajout pour l'accès RANDOM/DYNAMIC¦ ¦EXTEND¦Ouverture en mode ajout si :¦ ¦¦. accès SEQUENTIAL¦ ¦¦. le fichier est trié sur la clé¦ ¦¦. clés à ajouter plus grandes que les plus¦ ¦¦grandes du fichier¦ +--------------------------------------------------------+ POSITIONNEMENT DANS UN FICHIER [START] START nom-fichier [ KEY IS operateur nom-zone ] [ INVALID KEY instructions ]. START permet de se positionner sur un enregistrement dans un fichier. +-------------------------------------------+ ¦Opérateur¦Description¦ ¦---------------+---------------------------¦ ¦EQUAL TO¦= (égalité)¦ ¦GREATER THAN¦> (supérieur)¦ ¦NOT LESS THAN¦NOT < (supérieur ou égal)¦ +-------------------------------------------+ !KEY _ Si KEY IS est omis : Le positionnement est fait sur la clé indiquée dans le RECORD KEY du fichier. Si la clé est inexistante : - si INVALID KEY est présent, alors les instructions indiquées sont exécutées. - si INVALID KEY est omis : alors le code 23 est retourné dans le FILE STATUS. 33
  • 33. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol _ Si KEY IS est présent : - Le positionnement est fait sur une partie du groupe indiqué dans le RECORD KEY du fichier. - Si la clé est incomplète, elle est complétée à zéro à droite. LECTURE D'UN FICHIER [READ] READ nom-fichier [ NEXT ] RECORD [ INTO nom-donnée ] [ AT END instructions ]/[ INVALID KEY instructions ]. READ lit séquentiellement ou par clé un enregistrement d'un fichier. !NEXT La lecture se fait suivant le positionnement effectué par START. Cette option n'est possible qu'avec un accès DYNAMIC. Si elle est omise, la lecture est : - séquentielle pour un accès SEQUENTIAL - par clé pour un accès RANDOM ou DYNAMIC !AT END Cette option n'est possible qu'avec un accès SEQUENTIAL. Si elle est omise, le code retour 10 est retourné. !INVALID KEY Cette option n'est possible que pour un accès par clé. Si la clé n'est pas trouvée dans le fichier, les instructions indiquées sont exécutées. Si elle est omise, et si la clé est inconnue, un code retour 23 est retourné dans le FILE STATUS. ECRITURE DANS UN FICHIER [WRITE] 34
  • 34. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol WRITE nom-enregistrement [ FROM nom-donnée ] [ INVALID KEY instructions ]. WRITE écrit un enregistrement : • séquentiellement ou • par clé Notes : • L'ouverture en OUTPUT permet de créer un fichier et d'écrire des enregistrements. • L'ouverture en EXTEND permet d'ajouter des enregistrements à la fin du fichier. • L'ouverture en I-O permet d'ajouter des enregistrements de clés inexistantes dans le fichier. INVALID KEY Si une des conditions suivantes est réalisée, alors les instructions indiquées sont exécutées. dépassement de capacité du fichier • Pour l'ouverture en (OUTPUT ou EXTEND) et l'accès en SEQUENTIAL : Les clés du fichier ne sont pas triés dans l'ordre croissant. • Pour l'ouverture en (OUTPUT ou I-O) et l'accès DIRECT ou DYNAMIQUE : La clé de l'enregistrement à écrire existe déjà dans le fichier. RE-ECRITURE DANS UN FICHIER [REWRITE] REWRITE nom-enregistrement [ FROM nom-donnée ] [ INVALID KEY instructions ]. Cette commande n'est utilisable qu'en ouverture I-O. REWRITE permet de ré-écrire le dernier enregistrement lu. INVALID KEY Si une des conditions suivantes est réalisée, alors les instructions indiquées sont exécutées. Pour les accès SEQUENTIAL : La clé à ré-écrire est différente de celle déjà écrite. Pour les accès DIRECT : La clé à ré-écrire n'existe pas dans le fichier. SUPPRIMER UN ENREGISTREMENT [DELETE] DELETE nom-fichier RECORD [ INVALID KEY instructions ]. 35
  • 35. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol Cette commande n'est utilisable qu'avec les fichiers : • en ouverture I-O • en accès SEQUENTIAL ou DIRECT DELETE supprime logiquement un enregistrement dans un fichier. INVALID KEY Cette clause n'est pas utilisable en accès SEQUENTIAL. Si la clé indiquée dans RECORD KEY n'existe pas, alors les instructions indiquées sont exécutées. OUVERTURE POSSIBLE OPEN / INPUT OUTPUT I-O EXTEND ACCESS READ O N O N O : accès autorisé WRITE N O O O REWRITE N N O N N : accès interdit DELETE N N O N FICHIER VSAM CODE RETOUR VALEUR DESCRIPTION 00 Pas de problème. 10 Fin de fichier. 22 Clé inexistante. 23 Clé inconnue. 91 Ecriture sur un fichier non partagé. 92 Fichier déjà ouvert ou déjà fermé. 93 Fichier non disponible. 94 Fichier inconnu ou vide ou VSAM-KSDS utilisé comme un ESDS. 36
  • 36. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol 95 DLBL absente. 37
  • 37. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol E/S ARRET DE PROGRAMME [STOP] STOP RUN/littéral. STOP arrêt le programme. RUN Arrête l'exécution du programme et donne le contrôle au superviseur. Littéral Arrête le programme, affiche le littéral et donne le contrôleur au pupitreur. LECTURE INFORMATION [ACCEPT] ACCEPT nom-donnée [ FROM SYSIPT/nom-symbolique/CONSOLE ]. ACCEPT lit une information (80 caractères au maximum) à partir : • du lecteur si SYSIPT est indiqué (par défaut) • de la console si CONSOLE est indiqué • du périphérique nommé "nom-symbolique" dans la partie SPECIAL-NAMES et l'écrit dans "nom-donnée". ENVOI DE MESSAGE [DISPLAY] DISPLAY littéral1/nom-donnée1 littéral2/nom-donnée2 ... [ UPON SYSLST/SYSPCH/CONSOLE/nom-symbolique ]. DISPLAY envoie un message vers : • le périphérique nommé "nom-symbolique" dans la partie SPECIAL-NAMES • l'imprimante (120 caractères au maximum) si SYSLST est indiqué • la console (100 caractères au maximum) si CONSOLE est indiqué • la carte (80 caractères dont 72 utilisables au maximum) UPON Si UPON est utilisé, le périphérique pris 38
  • 38. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol par défaut est l'imprimante. DONNEE DEFINITION numéro-niveau nom-donnée image valeur-initiale. Exemple : 03 Libellé PIC X(7) VALUE 'TABLEAU' numéro-niveau Le numéro de niveau est composé de deux chiffres (de 01 à 49, et 77). Il indique le niveau dans la hiérarchie de la structure. Les niveaux 01 et 77 sont particuliers : • Le niveau 01 définit le sommet de la hiérarchie. Un cadrage à gauche est effectué. • Le niveau 77 définit une variable ne figurant dans aucun groupement. Attention : Les définitions de niveau 77 doivent précéder les définitions de variables. Conventions : • Commencer en marge B. • Décaler de 4 positions à chaque changement de niveau. nom-donnée C'est le nom de l'article. Il est préférable que le nom soit unique, mais il peut être tout de même répété s'il se trouve dans des branches différentes. Le nom FILLER peut être utilisé (entre les niveaux 02 et 49) chaque fois qu'il y a une zone constante faisant partie d'une zone à éditer. Mais aucune référence à cette zone ne pourra être faite. image On indique ici : • la taille de la variable • son type • ce qu'on en fera 39
  • 39. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol Cette définition doit tenir en 30 caractères au maximum. Il existe quatre types d'images : • image alphanumérique • image numérique • image numérique d'édition • image alphabétique image alphanumérique Cette zone peut contenir n'importe quel caractère. Exemple : PIC XXXXXXXXXX ou PICTURE IS XXXXXXXXXX définit une variable pouvant contenir jusqu'à 10 caractères. On pourra écrire plus simplement : PIC X(10) Si la zone de réception est plus grande que la zone d'origine, il y a cadrage à gauche, et des espaces sont ajoutés pour combler. Si la zone de réception est plus petite que la zone d'origine, il y a perte des caractères dépassant à droite. image numérique Cette zone ne peut contenir que des nombres signés ou non. Seuls les chiffres de 0 à 9 sont acceptés. Exemple : PIC 9999999999 définit une variable pouvant contenir jusqu'à 10 chiffres. On pourra écrit plus simplement : PIC 9(10). Autres exemples : • Si en mémoire on a 0123, alors PIC 99V99 stocke la valeur 01,23 • PIC 9999 stocke la valeur 0123 • PIC 999V9 stocke la valeur 012,3 • Si on transfère la valeur 265724 de PIC 9(4)V99 à 999V999, alors la valeur devient 657240. Les troncatures sont signalées par un message d'avertissement du style « ILA5011I-> HIGH ORDER TRUNCATION MIGHT OCCUR ». Mais il y a poursuite de la compilation. image numérique - EBCDIC • Pour les nombres positifs, le chiffre extrême droit est remplacé par : A pour +1, B pour +2, ... I pour +9. • Pour les nombres négatifs, le chiffre extrême droit est remplacé par : J pour -1, K pour -2, ... R pour -9. Donc le signe n'occupe pas de place en mémoire. 40
  • 40. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol Exemple : • +100,3 est représenté en mémoire par 000100C, • -100,3 par 000100L. En cas de troncature ou de remplissage avec des 0, Cobol gère correctement le signe. Attention : Penser à déclarer les variables avec signe lorsqu'elles sont susceptibles de recevoir des valeurs négatives. image numérique d'édition Les images numériques d'édition permettent la représentation de valeurs numériques sur les états. On distingue : • les caractères d'insertion ",", "B", "_", "/", "0", "F", "$", "+", "-", "CR", "DB" • Ils sont insérés dans la chaîne de caractères à imprimer. • Chacune occupe un caractère. • Exemple : • PIC 9(4)V99 (6 caractères) • PIC 9(4),99 (7 caractères) • la virgule "," • Ce caractère d'insertion permet aussi le centrage sur la virgule réelle. • Ne pas oublier d'indiquer "DECIMAL-POINT IS COMMA" dans le paragraphe • SPECIAL-NAMES. • Exemple : • 005862 5862,00 • PIC ------ ------> ------- • 9(6) 9(4),99 • Le caractère "F" (pour les Francs) ou "$" (pour les dollars) • Il insère un symbole de monnaie. • Il doit figurer à gauche de l'image. • Il faut indiquer CURRENCY SIGN IS 'F' dans le paragraphe SPECIAL-NAMES. • Exemple : PIC F99.999.999 • Le caractère "." • Il faut indiquer DECIMAL-POINT IS COMMA" dans le paragraphe SPECIAL-NAMES. • Les caractères '-', '+', 'DB', 'CR' • Les caractères 'DB' et 'CR' ne peuvent être placés qu'à droite. • Les caractères '+' et '-' peuvent être placés à gauche ou à droite. 41
  • 41. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol • Le '-' n'imprime le signe que s'il est négatif. • Le '+' imprime toujours le signe. • Les caractères "Z", "*" • Le "Z" supprime les zéros non significatifs. • Le "*" remplace les zéros non significatifs par des "*", afin de rendre difficile la falsification des documents. • Par convention, on ne cherche pas à supprimer les 0 de la partie décimale. • Lorsque la valeur à imprimer dépasse de la taille de la zone d'impression, les chiffres de gauche sont supprimés. • Afin de garantir une sortie correcte, on colle toutes les informations en ajoutant un chiffre significatif à l'image avec remplacement des zéros par un espace. • Les caractères "F", "$", "+", "-" • Ce sont des caractères de remplacement. • Les zéros non significatifs sont remplacés par des espaces, sauf celui le plus à droite, qui reçoit le symbole de monnaie (F, $) ou le signe (+, -). • Il faut toujours prévoir un caractère de plus par rapport au nombre de chiffres dans la zone émettrice. • Exemple avec perte de chiffre : • PIC S9(6) ----> PIC -(5)9 • 58625L -86253 • Lorsque la zone numérique est nulle, on peut n'imprimer que des espaces : • PIC ZZZ,99 BLANK WHEN ZERO image alphabétique Les images alphabétiques permettent la représentation de groupes de lettres (de 'A' à 'Z', plus l'espace). Tous les autres caractères sont exclus : "-", "_", "1", ... valeur initiale (optionnel) Si on ne précise pas la valeur que prendra les variables au début du programme, alors on ne peut connaître leur valeur. Certains compilateurs les remettent à zéro, d'autres pas ... Pour donner une valeur initiale, on utilise VALUE. Exemple : 02 COMPTEUR PIC 999 VALUE 0. 02 NOM PIC X(20) VALUE 'DUPONT LAURENT'. 02 INDICE PIC 999 VALUE ZERO. 02 ADRESSE PIC X(20) VALUE SPACE. 42
  • 42. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol Notes : • ZERO, ZEROS, ZEROES sont équivalent à 0. • SPACE, SPACES sont équivalents à des espaces. • La clause VALUE est possible au niveau du groupe. Mais un article ne peut pas recevoir deux VALUE. Ainsi, dans ce cas, aucun de ses articles élémentaires ne peut contenir elle-aussi la clause VALUE. • Il est également possible de mettre une clause VALUE avec une image d'édition : 01 TOTAL PIC ZZ9,99 VALUE '0,00'. Représentation des données : USAGE Valeur binaire : COMPUTATIONAL 01 MONTANT PIC S9(7)V99 COMP-3 VALUE ZERO. 01 CODE PIC 99 COMP VALUE 80. DE A TAILLE 9 9(4) 1/2 mot 2 octets 9(5) 9(9) 1 mot 4 octets 9(10) 9(18) 2 mots 8 octets Note : • COMP = COMPUTATIONAL • COMP-1 = COMPUTATIONAL-1 • COMP-2 = COMPUTATIONAL-2 • COMP-3 = COMPUTATIONAL-3 Le cadrage n'est pas automatique. Mais en cas d'alignement incorrect, chaque valeur est transférée vers une zone de travail pour les opérations arithmétiques. Les calculs sont alors corrects, mais il y ralentissement. La clause SYNC permet d'aligner correctement. 02 BOUCLE PIC 9(5) COMP SYNC. Réserve 4 octets alignés sur un mot. Exemple : • 02 A PIC 9(6) COMP SYNC. 4 octets, soit 1 mot. • 02 B PIC 9(3) COMP SYNC. 2 octets, soit 1/2 mot. • 02 C PIC 9(5) COMP SYNC. 4 octets, soit 1 mot. A B xxx C 2 octets sont donc rajoutés en "xxx" pour constituer 1 mot. La mention SYNC pour B n'est pas nécessaire dans ce cas. Mais elle le serait dans le cas d'éventuelles insertions. COMP Représentation binaire. 43
  • 43. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol COMP-1 Virgule flottante, simple précision. • 4 octets. • 6 chiffres significatifs. • Valeur absolue de 10^(-78) à 10^(+75). COMP-2 Virgule flottante, double précision. • 8 octets. • 16 chiffres significatifs. • Valeur absolue de 10^(-78) à 10^(+75). COMP-3 Décimal condensé. • 5 octets. • (9 1/2 octets pour les chiffres + 1/2 octets pour le signe) : 1 chiffre (1 octet) + 3 chiffres (2 octets) + 5 chiffres (3 octets) On peut éviter le problème des cadrage en mettant les réservations dans l'ordre suivant : • doubles mots • simples mots • demi-mots • valeurs EBCDIC • valeurs en décimal condensé WORKING STORAGE SECTION PRESENTATION La Working Storage Section contient toutes les zones utiles pour stocker des informations au cours même de l'exécution d'un programme (zones de travail). ZONE ELEMENTAIRE 44
  • 44. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol Une zone élémentaire est une zone qui ne peut pas être subdivisée. Exemple : la zone d'un compteur. Elle contient une clause PIC. GROUPEE Une zone groupée est un regroupement de plusieurs zones élémentaires. Exemple : la zone contenant plusieurs compteurs. Elle ne contient pas de clause PIC, mais peut contenir les clauses USAGE et/ou VALUE (par défaut PIC X et USAGE DISPLAY). Exemple : (PIC X) (PIC 9) Zone groupée = Zone élémentaire 1 + Zone élémentaire 2 (PIC 9) INDEPENDANTE Une zone indépendante est une zone ni groupée ni faisant partie d'une zone groupée. NOMBRE-NIVEAU Chaque niveau de description possède un nombre-niveau. Le plus haut niveau d'une zone groupée est '01'. Les nombre-niveaux ne se suivent pas forcément. Ils peuvent aller de '01' à '49'. Les nombre-niveaux '01' et '77' commencent en marge A. Seules les zones élémentaires ont une "picture". Une zone groupée est suivie d'un point (après la clause USAGE s'il y en a une). Par convention, on décale de quatre position pour chaque changement de niveau. On cherche à regrouper des informations de même domaine dans un groupe. 01 nom-groupe VALUE ZEROS. permet de remettre à zéro une zone EBCDIC, mais pas des zones en décimal condensé ou autre. Alignement mémoire Afin d'augmenter la rapidité d'exécution, le compilateur aligne les informations de niveau 01 sur la frontière suivante : Zone Alignement 2 octets, jusqu'à S9(4) Demi-mot 4 octets, jusqu'à S9(9) Mot 8 octets, au-delà de S9(9) Doubl-mot Exemple : 45
  • 45. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol • NUMERO sur 3 caractères 3 octets • NOM sur 7 caractères 7 octets • QUANTITE sur 4 octets (en binaire) 4 octets Numéro Nom xxxxx Quantité 0 2 3 9 10 11 12 15 1 2 3 4 Numéro du mot Redéfinition des zones La redéfinition des zones sert dans le cas où l'on veut que une même zone de travail contienne plusieurs types de renseignements. Note importante : Cette redéfinition ne réserve pas de place en mémoire. Voici les règles à respecter : • La zone redéfinie doit être de même niveau que la zone à redéfinir. • Dans le cas de plusieurs redéfinitions d'une même zone à redéfinir, les redéfinitions se rapportent toujours à la zone à redéfinir. • La zone redéfinie ne doit pas contenir de clause VALUE. • Les zones redéfinies doivent immédiatement suivre la zone à redéfinir. • La zone redéfinir doit avoir la même longueur que la zone à redéfinir. Exemples : • Une zone peut être décomposée deux plusieurs manières : • 01 ZONE • 02 ZONE-1 PIC X(10). • 02 ZONE-2 PIC X(20). • 01 ZONE-REDEF REDEFINES ZONE. • 02 ZONE-3 PIC X(30). • Une même zone peut avoir deux PIC différents : • 01 ZONE-1 PIC X(5). • 01 ZONE-2 PIC 9(5). • Où encore : • 01 ZONE. • 02 ZONE-1 PIC 9(5). • Car ZONE est définit en alphanumérique. • Une conversion de francs en centimes par exemple : • 77 FRANCS PIC 999V99. 46
  • 46. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol • 77 CENTIMES REDEFINES FRANCS PIC 9(5). Noms de condition Un nom-condition est vrai s'il appartient à un certain ensemble de valeurs. Ceci permet d'écrire des programmes plus parlants. 88 nom-condition VALUE littéral [ TROUGH/THRU littéral ] [ littéral [ TROUGH/THRU littéral ] ] Exemples : • Nationalité ... 77 NATIONALITE PIC 9. 88 FRANCAIS VALUE 1. 88 ETRANGER VALUE 2. On écrirait : IF NATIONALITE = 1 COMPUTE ... Mais on peut écrire : IF FRANCAIS COMPUTE ... • Age ... 01 AGE PIC 9(3). 88 ENFANT VALUE 1 THRU 17. 88 JEUNE VALUE 18 THRU 25. 88 ADULTE VALUE 25 THRU 65. 88 VIEILLARD VALUE 66 THRU 100. Les enfants ont de 1 à 17 ans. Les jeunes de 18 à 25 ans. Les adultes de 25 à 65 ans. Les vieillards de 66 à 100 ans. • Annuaire téléphonique ... 01 LETTRE PIC X. 88 VOYELLE VALUES 'A', 'E', 'I', 'O', 'U', 'Y'. Expression RENAMES RENAMES est très rarement utilisé et permet de redéfinir une zone à cheval sur deux autres zones. 01 DATE. 02 DATE-1. 03 DATE-JJ PIC 99. 47
  • 47. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol 03 DATE-MM PIC 99. 03 DATE-AA PIC 99. 02 DATE-MM2 PIC 99. 66 DATE-2 RENAMES DATE-AA THRU DATE-MM2. • DATE-2 contient donc les zones DATE-AA (l'année) et DATE-MM2 (le mois). • La zone renommée ne suit pas obligatoirement les zones à renommer. • Les zones à renommer ne peuvent pas être de niveau 01, 77 ni 88. PROCEDURE DIVISION INTRODUCTION ROUNDED renvoit un arrondi à l'unité supérieure du chiffre le moins significatif si > 4. 48