Découvrons le COBOL, Irremplaçable et irremplaçé.

Interaction avec les utilisateurs

Dans cette partie, nous allons voir les différentes sections et d’autres notions que je vais introduire. Ce n’est pas un vrai tutoriel mais plutôt un retour d’expérience sur ma découverte du COBOL.

Tout est (presque) DATA DIVISION

Et nous allons donc nous intéresser à la division des données. Celle-ci se compose de deux sections : WORKING-STORAGE et SCREEN.

DATA DIVISION.
  WORKING-STORAGE SECTION.
  *> Mes variables

  SCREEN SECTION.
  *> Mes affichages à l'utilisateur

C’est une vision personnelle mais c’est dans cette division que j’ai trouvé COBOL très bien pensé : on sépare la déclaration des variables de l’affichage. Cependant, paradoxalement, c’est aussi le lieu où je trouve COBOL le moins intuitif.

Déclarons des variables

Comme je l’ai dit précédemment, la déclaration des variables se fait dans la section WORKING-STORAGE. Déclarons quelques variables :

DATA DIVISION.
  WORKING-STORAGE SECTION.
    77 nom PIC x(30).
    77 prenom PIC x(30).
    77 age PIC 99.

On remarque une syntaxe récurrente :

[étiquette] {nom} PIC {type}

étiquette : une étiquette est une hiérarchie des phrases qui les suivent. Nous verrons plus en détail cette notion par la suite. 77 est une convention pour les variables. Les booléens font exception avec une étiquette conventionnelle 88.

nom : le nom de la variable déclarée

PIC : diminutif de PICTURE, permet de définir un type à la suite de cette déclaration.

type : c’est là que je trouve COBOL peu intuitif. Outre la forme de la déclaration, les types sont identifiés par des lettres. Voici la liste des types :

numérique9(x), S(x), V(x)
alphabétiqueA(x)
alphanumériqueX(x)
numérique éditéB(x)V Z(x) 9 0(x) / + – , .
alphanumérique éditéA X B 0 /
Difficile à comprendre…

Voici quelques exemples :

ExempleCorrespond à
99999Un nombre à 5 chiffres. S’écrit aussi 9(5).
X(30)Un mot contenant 30 n’importe quel caractère
A(10)Un mot contenant 10 lettres de l’alphabet
ZZ.ZZUn nombre à virgule sans l’affichage des zéros à deux
décimales
9V99Un chiffre avec une virgule et deux décimales
ABAAAUne lettre séparée à un mot de trois lettres par un espace
C’est plus clair ?

Vous pouvez donc comprendre mon exemple précédent :

DATA DIVISION.
  WORKING-STORAGE SECTION.
    *> Une variable nom de type alphanumérique de longueur 30
    77 nom PIC x(30).
    *> Une variable prénom de type alphanumérique de longueur 30
    77 prenom PIC x(30).
    *> Une variable age de type numérique contenant deux chiffres
    77 age PIC 99.

Demandons les valeurs à l’utilisateur

Intéressons nous à la section SCREEN. Cette section permet de déclarer l’affichage à l’utilisateur et elle est divisée en plages. Ces dernières permettent de définir les affichages aux utilisateurs. Une plage est comme un bloc qui définie ce qu’il doit afficher. Regardons de plus près :

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-WORLD.
DATA DIVISION.
  SCREEN SECTION.
    1 ma-plage.
      2 BLANK SCREEN.
      2 LINE 10 COL 5 VALUE 'Hello world !'.
PROCEDURE DIVISION.
DISPLAY ma-plage.
STOP RUN.

Il y a pas mal de notions à voir.

On peut voir que j’ai déclaré une plage dans la section SCREEN. C’est tout simple en réalité. On remarque aussi que l’étiquette de cette plage est 1 tandis que les instructions qui suivent sont étiquetées 2 : cela pour hiérarchiser comme je l’ai dit précédemment. Aussi, j’ai nommé la plage “ma-plage”, mais il est important en COBOL de définir des standards comme “apl-*” pour l’affichage et “spl-*” pour la saisie utilisateur.

Pour expliquer les lignes de code, il faut savoir que BLANK SCREEN permet d’effacer l’affichage entièrement. Dans la seconde ligne, il faut imaginer un curseur que l’on place pour indiquer que notre affichage comment à cette endroit. Ici, je place mon curseur à la ligne 10, à la colonne 5 avec pour valeur ‘Hello world !’. Puis dans la partie PROCEDURE, j’affiche ma plage avec l’instruction DISPLAY.

En restant dans cette logique, essayez de deviner ce que fait ce code :

IDENTIFICATION DIVISION.
PROGRAM-ID. IDENTITE.
DATA DIVISION.
  WORKING-STORAGE SECTION.
    77 age PIC 9(2).
  SCREEN SECTION.
    1 apl-titre.
      2 BLANK SCREEN.
      2 LINE 5 COL 5 VALUE 'Décliner son identité'.
    1 spl-age.
      2 LINE 8 COL 5 VALUE 'Quel est ton age ? '.
      2 PIC 9(2) TO age REQUIRED.
PROCEDURE DIVISION.
DISPLAY apl-titre.
DISPLAY spl-age.
ACCEPT spl-age.
DISPLAY age.
STOP RUN.

Si par déduction, vous avez trouvé que ces instructions permettent d’afficher ‘Décliner son identité’ puis de demander l’age de l’utilisateur, c’est exactement ça ! Par contre, il y a plusieurs éléments que vous ne connaissez pas :

1 spl-age.
  2 LINE 8 COL 5 VALUE 'Quel est ton age ? '.
  2 PIC 9(2) TO age REQUIRED.

C’est une plage qui permet d’afficher un texte puis de demander à l’utilisateur d’entrer une valeur numérique à 2 chiffres qui est ensuite stockée dans la variable age déclarée plus tôt. L’instruction REQUIRED permet d’obliger l’utilisateur à entrer une valeur. Testez !

DISPLAY apl-titre.
DISPLAY spl-age.
ACCEPT spl-age.

Permet d’afficher la plage “apl-titre” puis d’afficher la plage “spl-age”. L’instruction ACCEPT permet de valider les valeurs entrées dans la plage sol-plage et de faire le passage des valeurs dans les variables données.

Quelle belle interface qui ressemble fortement aux logiciels que l’on trouve dans nos magasins quand un vendeur cherche un élément en stock.

Amusez vous avec ces quelques manipulations pour bien les comprendre. La page suivante va décrire le principe d’initialisation des variables.

Laisser un commentaire