Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Programmer en COBOL
  3. Traitement des entrées
Extrait - Programmer en COBOL Développement et Maintenance de programmes
Extraits du livre
Programmer en COBOL Développement et Maintenance de programmes
5 avis
Revenir à la page d'achat du livre

Traitement des entrées-sorties

Paramètres en entrée

Pour passer des paramètres à un programme COBOL il y a deux possibilités :

  • la première, disponible dès les spécifications de 1960, est offerte par l’instruction ACCEPT pour des données peu volumineuses transmises via un périphérique, à l’origine lecteur de cartes perforées ou console.

    Aujourd’hui cartes perforées et console sont devenues :

    • fichier en environnement grand système IBM,

    • saisie à l’écran en environnement PC.

  • la deuxième possibilité a été implémentée plus récemment et est maintenant disponible avec tous les compilateurs : une extension de la clause USING de l’instruction PROCEDURE DIVISION.

    Dans ce cas les paramètres arrivent via :

    • l’instruction d’appel du programme en environnement grand système IBM,

    • une variable d’environnement en environnement PC.

Quelle que soit la solution mise en œuvre, ces paramètres sont uniquement en lecture.

1. Instruction ACCEPT

En environnement PC cette instruction provoque l’interruption momentanée du programme : il attend la saisie d’une donnée.

En environnement batch sur grand système IBM cette instruction permet de lire un fichier technique spécifique disponible pour tout programme COBOL.

Bref aparté sur les fichiers

À l’origine les fichiers étaient sur cartes perforées ou sur bandes magnétiques. Sur cartes perforées chaque carte correspondait à un enregistrement. Les enregistrements étaient lus l’un après l’autre, dans l’ordre dans lequel les cartes étaient disposées dans le lecteur. Cet usage des cartes est d’ailleurs resté assez longtemps en vigueur, jusque dans les années 80, mais pour les opérations plus "techniques" telles que la compilation des programmes : le développeur effectuait la saisie de son programme sur une perforatrice et insérait en début de paquet les cartes...

Compte rendu de traitement, Log, fichier trace : DISPLAY

1. Présentation

En environnement PC, le contenu de l’instruction DISPLAY s’affiche à l’écran : il est même possible de positionner les messages et de choisir des couleurs. Elle permet également de modifier des variables d’environnements. Dans ce cas elle doit être complétée de la condition ON EXCEPTION :

----+----1----+----2----+----3----+----4----+----5----+----6----+
           DISPLAY variable UPON variable-environnement
                  ON EXCEPTION
                     Instructions
           END-DISPLAY 

Par contre, en environnement batch/MVS, les messages sont écrits dans un fichier spécifique, obligatoire et toujours présent en sortie d’un programme COBOL, le pendant du fichier SYSIN pour les ACCEPT : le fichier de nom logique SYSOUT.

En environnement grand système IBM, ce nom logique SYSOUT est défini par une option de compilation : rien n’empêche donc que ce nom logique soit différent d’une application à l’autre ou d’un service informatique à un autre.

En environnement CICS sur IBM/MVS, ces messages sont autorisés et disponibles dans la log CICS depuis les dernières versions de compilateurs.

Tout comme le fichier SYSIN, ce fichier SYSOUT est un fichier séquentiel : chaque instruction DISPLAY correspond à une ligne en sortie. Il possède cependant une caractéristique fondamentalement différente des autres fichiers : si la longueur de l’information transmise dépasse la longueur du fichier, les données ne sont pas perdues mais éclatées sur plusieurs lignes.

Exemple :

En WORKING-STORAGE :

       01  citation-1  pic x(24) value "- J'ai vu tant de choses".
       01  citation-2  pic x(24) value " que vous humains ne ".
       01  citation-3  pic x(24) value "pourriez croire. De ".
       01  citation-4  pic x(24) value "grands navires en feu ". 
       01  citation-5  pic x(24) value "surgissant de l'épaule ".
       01  citation-6  pic x(24) value "d'orion". 

En PROCEDURE :

           display citation-1
                   citation-2
                   citation-3
                   citation-4
                   citation-5
                   citation_6 

Résultat en SYSOUT pour un fichier de 65 de long :

----+----1----+----2----+----3----+----4----+----5----+----6----5
J'ai vu tant de choses que vous humains ne pourriez croire. De gr
ands navires en feu surgissant de l'épaule...

Les fichiers : présentation

Pour l’instant seuls les fichiers SYSIN avec l’instruction ACCEPT et SYSOUT avec l’instruction DISPLAY ont été vus. Ces fichiers sont très particuliers et sont l’exception qui confirme la règle : il n’y a en effet pas besoin de les déclarer.

Ce sont les seuls fichiers ne nécessitant pas de déclaration pour être utilisés dans un programme COBOL.

Tous les autres fichiers doivent être déclarés afin d’indiquer :

  • leur organisation,

  • leur mode d’accès,

  • leur utilisation :

    • lecture,

    • écriture,

    • mise à jour.

  • leur format, ou description de leurs enregistrements.

Entre le besoin final exprimé dans les spécifications fonctionnelles ou détaillées et les contraintes techniques liées à l’environnement et au type de traitement, une réflexion doit être menée sur les performances attendues.

Pour un traitement interactif ou pseudo-interactif (TP) la performance attendue concerne le temps de réponse pour des demandes unitaires d’accès à des données. Pour un traitement batch, les volumétries étant généralement importantes : la performance attendue porte essentiellement sur la limitation du nombre d’entrées-sorties (I/O) qui restent coûteuses en temps machine.

C’est l’optimisation du programme qui permet la mise en concordance de ses performances avec les performances attendues. Cette optimisation dépend :

  • du type de traitement :

    • interactif,

    • transactionnel,

    • batch.

  • des traitements concomitants, en fonction du mode de déclenchement (planifié et/ou à la demande) :

    • TP,

    • chaîne de production quotidienne avec plage horaire définie.

  • de la volumétrie des informations à traiter.

La notion de volumétrie est toute relative et dépend directement de la puissance de calcul du système sur lequel tournent les traitements. Dans certains services informatiques les architectes peuvent orienter les développeurs vers des solutions spécifiques dépendant de paramétrages systèmes et/ou d’options de compilation qu’ils auront préalablement mis en place.

Plusieurs pistes sont à étudier pour effectuer une optimisation :

  • l’organisation...

Déclarations

La déclaration d’un fichier est différente en fonction de son organisation.

1. Division ENVIRONMENT : la FILE-CONTROL

Syntaxe :

----+----1----+----2----+----3----+----4----+----5----+----6---...
       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT Nom-interne ASSIGN TO Nom-externe
                  ORGANIZATION SEQUENTIAL/INDEXED/RELATIVE
                  ACCESS MODE IS SEQUENTIAL/RANDOM/DYNAMIC
                  RECORD/ALTERNATE RECORD/RELATIVE KEY IS Clé
                  FILE STATUS Status. 

Cette déclaration établit :

  • le lien entre le nom interne et le nom externe du fichier,

  • l’organisation du fichier,

  • le mode d’accès.

a. Clause SELECT

           SELECT Nom-interne ASSIGN TO Nom-externe 
Nom interne

C’est le nom logique du fichier connu dans le programme. Ce nom logique est associé à :

  • une description FD (File Description) en FILE SECTION,

  • des ordres d’ouverture et de fermeture,

  • des ordres de lecture et de suppression d’enregistrement.

Il doit respecter les contraintes habituelles des mots COBOL définis par le programmeur.

Ce nom doit être UNIQUE dans un programme.

Nom externe

Il n’apparaît que dans cette instruction et nulle part ailleurs dans le programme. En environnement grand système IBM/MVS, il ne correspond pas au nom physique du fichier mais à un nom logique intermédiaire tout comme SYSOUT et SYSIN.

Ce nom externe répond aux contraintes syntaxiques spécifiques à l’environnement matériel.

Dans le JCL, sur MVS, il s’agit du DDName : Data Definition Name. Il ne peut pas faire plus de 8 caractères de long.

Exemple :

Dans le programme COBOL NARJEANB :

           SELECT FPARAM ASSIGN TO FINPUT 

Dans le JCL d’appel du programme, ou job :

//STEP050 EXEC PGM= NARJEANB
//SYSOUT   DD SYSOUT=*
//FINPUT   DD DSN=IWZE.PME.CAROLE.STEP050,DISP=SHR 

Dans cet exemple FINPUT est le DDName associé :

  • au nom interne FPARAM dans le programme,

  • au nom réel du fichier IWZE.PME.CAROLE.STEP050 dans le job.

Nom interne et nom externe sont très souvent identiques et cette nuance est du coup moins flagrante et peut être facilement oubliée :

           SELECT FPARAM ASSIGN TO FPARAM 

En environnement PC avec Micro Focus, par contre, le nom externe correspond au nom physique réel :

           select facture-file assign "facture.it" 

Nom interne et nom externe sont alors obligatoirement et parfaitement distincts.

Un même fichier...

Fichier en entrée

1. Lecture séquentielle

Quelle que soit son organisation, tout fichier peut être lu séquentiellement.

a. Les déclarations

Seules les déclarations diffèrent légèrement selon que le fichier est un fichier séquentiel ou indexé.

En FILE-CONTROL
  • Fichier séquentiel :

Exemple :

      *    Fichier FMAITRE en entrée
           SELECT FMAITRE      ASSIGN FMAITRE
                  FILE STATUS  WS-STATUS-FMAITRE. 

L’organisation par défaut d’un fichier est l’organisation séquentielle.

  • Fichier indexé :

Pour un fichier indexé, la déclaration de son organisation et de sa clé est obligatoire.

Exemple :

      *    Fichier FMAITRE en entrée
           SELECT FMAITRE      ASSIGN FMAITRE
                  ORGANIZATION IS INDEXED
                  RECORD KEY   IS FMAITRE-CLE
                  FILE STATUS  WS-STATUS-FMAITRE. 

Par contre le mode d’accès (ACCESS MODE) par défaut reste l’accès séquentiel.

En FILE SECTION
  • Fichier séquentiel :

Exemple :

      *    FMAITRE en entrée  
       FD  FMAITRE.
       01  ENR-FMAITRE.
      *    Déclarations des zones de l'enregistrement 
  • Fichier indexé :

Comme expliqué précédemment, la clé définie dans la clause SELECT doit être déclarée en FILE SECTION.

Exemple :

      *    FMAITRE en entrée  
       FD  FMAITRE.
       01  ENR-FMAITRE.
           05  FMAITRE-CLE                 PIC X(10).
      *    Déclarations des zones de l'enregistrement 
Ce sont les seules différences entre un fichier séquentiel et un fichier indexé pour une lecture séquentielle : la totalité du code restant est compatible.
En WORKING-STORAGE

La zone réceptrice du FILE STATUS définie dans la clause SELECT doit être déclarée en WORKING-STORAGE :

       01  WS-STATUS-FMAITRE               PIC XX  VALUE SPACE. 

Hormis les commentaires, rien n’indique pour l’instant que ce fichier est en lecture, en écriture ou en mise à jour. Cette information est portée par l’instruction d’ouverture du fichier OPEN.

TOUT fichier doit être ouvert avant de pouvoir être traité.

C’est l’instruction d’ouverture OPEN qui indique quel traitement est effectué : lecture, écriture ou mise à jour.

b. Ouverture de fichier : OPEN

Syntaxe :

----+----1----+----2----+----3----+----4----+----5----+----6---...
           OPEN INPUT/OUTPUT/I-O/EXTEND Nom-interne 
Toute tentative d’utilisation...

Fichier en sortie

1. Accès séquentiel

Tout fichier, quelle que soit son organisation, peut être écrit séquentiellement.

a. Les déclarations

Seules les déclarations de la WORKING-STORAGE ne sont pas tout à fait les mêmes :

           05  WS-STATUS-FICOUT         PIC XX   VALUE SPACE.

           05                           PIC X    VALUE X"00".
               88 FICOUT-OUVERT         VALUE X"01" THRU X"FF".

           05  WS-NBENR-ECR-FICOUT      PIC S9(8) COMP VALUE ZERO. 

Les variables nécessaires sont :

  • la zone réceptrice du FILE STATUS,

  • l’indicateur d’ouverture du fichier,

  • le nombre d’enregistrements écrits.

Il n’y a pas besoin d’indicateur de fin de fichier puisque le fichier est en sortie.

b. Ouverture : OUTPUT ou EXTEND

L’ouverture en OUTPUT permet de créer un nouveau fichier.

L’ouverture en EXTEND permet d’ajouter des enregistrements en fin de fichier, qu’il contienne ou non déjà des données.

En environnement IBM/MVS un fichier peut être ouvert en OUTPUT mais être malgré tout en "EXTEND" : c’est la disposition DISP=MOD au niveau du JCL qui offre cette possibilité.

//FICOUT   DD  DISP=MOD,DSN=... 

Un fichier peut ainsi être maintes fois ouvert en OUTPUT : chaque écriture ajoutera un nouvel enregistrement tout en conservant ceux déjà existants.

Il n’est pas possible d’ouvrir un fichier indexé en EXTEND.
           OPEN  OUTPUT/EXTEND        FICOUT 

L’option choisie ici pour traiter les cas de problème à l’ouverture est la même que précédemment. Vous trouverez à la fin de ce paragraphe le tableau des codes retour des fichiers VSAM.

La fermeture du fichier se code comme toute fermeture de fichier quel que soit son format et son accès, avec l’instruction CLOSE.

c. Écriture : WRITE

Ce n’est pas le fichier qui est écrit, mais l’enregistrement.

Syntaxe :

----+----1----+----2----+----3----+----4----+----5----+----6---...
           WRITE Nom-enreg   FROM Nom-zone
                 INVALID KEY
                    [...]...

Fichier en mise à jour : modification et suppression

Seuls les fichiers indexés ou relatifs bénéficient de ces possibilités de mises à jour. Deux types de mise à jour sont possibles : la modification par réécriture d’un enregistrement, et la suppression d’un enregistrement.

Si le fichier est en accès séquentiel, il doit être lu avant d’être réécrit. En accès direct ou dynamique, la réécriture peut être directement effectuée sans lecture préalable.
Ouverture : OPEN I-O

Pour pouvoir être modifié, le fichier doit être ouvert en Input-Output :

           OPEN  I-O               FICMAJ 

Vous trouverez en fin de paragraphe le tableau des codes retour des fichiers VSAM.

Réécriture : REWRITE

Syntaxe :

----+----1----+----2----+----3----+----4----+----5----+----6---...
           REWRITE Nom-enreg   FROM Nom-zone
                   INVALID KEY
                      [...]
                   NOT INVALID KEY
                      [...]
           END-REWRITE 
Il n’est pas possible de modifier la clé.

Si la zone correspondant à la clé doit être modifiée (en partie ou complètement) il faut faire un DELETE puis un WRITE.

En cas d’accès direct, la condition INVALID KEY est activée si l’enregistrement à modifier n’est pas trouvé.

En cas d’accès séquentiel, il faut d’abord lire l’enregistrement à modifier (positionner...