Exemples concrets de programmes COBOL
À quoi ressemble vraiment un programme COBOL ? Quand on a compris ce qu’est le langage — son histoire, son rôle dans les systèmes bancaires et administratifs — reste à voir du code concret. Car COBOL a une syntaxe très particulière, verbeuse et structurée, qui déroute souvent au premier abord mais devient limpide une fois qu’on en saisit la logique.
Cet article présente une série d’exemples COBOL commentés, du plus simple au plus complet : le squelette d’un programme, l’affichage, les variables, un calcul, une condition, une boucle, un tableau, puis la lecture d’un fichier. Chaque exemple est expliqué pour comprendre ce que fait le code. Si vous cherchez d’abord une présentation générale du langage, notre article sur le langage COBOL pose les bases utiles.
La structure d’un programme COBOL
Tout programme COBOL s’organise en quatre divisions, toujours dans le même ordre. C’est le squelette incontournable :
IDENTIFICATION DIVISION.
PROGRAM-ID. EXEMPLE.
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.
DISPLAY "Programme termine".
STOP RUN.
Décryptons ces quatre divisions :
- IDENTIFICATION DIVISION identifie le programme ;
PROGRAM-IDlui donne son nom ; - ENVIRONMENT DIVISION décrit l’environnement matériel, notamment les fichiers utilisés (souvent vide pour les programmes simples) ;
- DATA DIVISION déclare toutes les données (variables, structures) ;
- PROCEDURE DIVISION contient les instructions, le cœur logique du programme.
Notez les points (.) qui terminent les instructions, et STOP RUN qui met fin à l’exécution. Cette rigueur structurelle est une marque de fabrique du COBOL.
Une particularité : le format en colonnes
Avant d’aller plus loin, un point historique qui a une conséquence pratique. Le COBOL traditionnel obéit à un format de colonnes hérité des cartes perforées : les colonnes 1 à 6 sont réservées aux numéros de ligne, la colonne 7 sert aux indicateurs (un * y marque un commentaire), et le code lui-même s’écrit à partir de la colonne 8.
Les compilateurs modernes (comme GnuCOBOL) acceptent un format libre plus souple, mais on croise encore très souvent le format à colonnes dans les programmes existants. Un commentaire se présente ainsi :
* Ceci est un commentaire (etoile en colonne 7)
DISPLAY "Bonjour".
Exemple 1 : afficher un message (Hello World)
Le classique premier programme, qui affiche un texte à l’écran :
IDENTIFICATION DIVISION.
PROGRAM-ID. BONJOUR.
PROCEDURE DIVISION.
DISPLAY "Bonjour le monde".
STOP RUN.
Le verbe DISPLAY affiche le texte entre guillemets. C’est aussi simple que ça : un programme COBOL minimal tient en quelques lignes, une fois les divisions posées.
Exemple 2 : déclarer et utiliser des variables
Les variables se déclarent dans la DATA DIVISION, au sein de la section WORKING-STORAGE. Chaque variable a un niveau (souvent 01 ou 77) et une image (PIC) qui définit son type et sa taille :
IDENTIFICATION DIVISION.
PROGRAM-ID. VARIABLES.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NOM PIC X(20).
01 AGE PIC 9(3).
PROCEDURE DIVISION.
MOVE "Dupont" TO NOM.
MOVE 42 TO AGE.
DISPLAY "Nom : " NOM.
DISPLAY "Age : " AGE.
STOP RUN.
Points clés de cet exemple :
PIC X(20)déclare une chaîne de 20 caractères (X = alphanumérique) ;PIC 9(3)déclare un nombre de 3 chiffres (9 = numérique) ;MOVEaffecte une valeur à une variable — c’est le verbe d’affectation du COBOL ;DISPLAYpeut enchaîner texte et variables.
Exemple 3 : effectuer un calcul
Le COBOL propose des verbes de calcul explicites (ADD, SUBTRACT, MULTIPLY, DIVIDE) et un verbe général COMPUTE. Voici une addition et une multiplication :
IDENTIFICATION DIVISION.
PROGRAM-ID. CALCUL.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 PRIX-UNITAIRE PIC 9(4)V99 VALUE 12.50.
01 QUANTITE PIC 9(3) VALUE 4.
01 TOTAL PIC 9(6)V99.
PROCEDURE DIVISION.
COMPUTE TOTAL = PRIX-UNITAIRE * QUANTITE.
DISPLAY "Total : " TOTAL.
STOP RUN.
Ici, COMPUTE réalise le calcul comme une formule mathématique. Notez le V dans PIC 9(4)V99 : il marque la position de la virgule décimale (4 chiffres avant, 2 après). La clause VALUE donne une valeur initiale à la déclaration. Cette gestion précise des décimales explique en partie pourquoi le COBOL reste apprécié pour les calculs financiers.
Exemple 4 : une condition (IF)
Les tests conditionnels utilisent IF / ELSE / END-IF :
IDENTIFICATION DIVISION.
PROGRAM-ID. CONDITION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NOTE PIC 9(3) VALUE 12.
PROCEDURE DIVISION.
IF NOTE >= 10
DISPLAY "Admis"
ELSE
DISPLAY "Recale"
END-IF.
STOP RUN.
La logique est lisible presque comme une phrase en anglais — c’était justement l’ambition du COBOL à sa création : un code compréhensible par des non-informaticiens. END-IF clôt proprement le bloc conditionnel.
Exemple 5 : une boucle (PERFORM)
La répétition s’exprime avec le verbe PERFORM, très caractéristique du COBOL. Voici une boucle qui compte de 1 à 5 :
IDENTIFICATION DIVISION.
PROGRAM-ID. BOUCLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 I PIC 9(2).
PROCEDURE DIVISION.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 5
DISPLAY "Compteur : " I
END-PERFORM.
STOP RUN.
La construction PERFORM VARYING ... FROM ... BY ... UNTIL ... est l’équivalent COBOL d’une boucle « pour ». Ici : I part de 1, augmente de 1 à chaque tour, et la boucle s’arrête dès que I dépasse 5. PERFORM sert aussi à appeler des paragraphes (sous-programmes), ce qui en fait un verbe central du langage.
Exemple 6 : un tableau (OCCURS)
Le COBOL gère les tableaux avec la clause OCCURS, qui indique combien de fois une donnée se répète :
IDENTIFICATION DIVISION.
PROGRAM-ID. TABLEAU.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 JOURS.
05 JOUR PIC X(8) OCCURS 3 TIMES.
01 I PIC 9(1).
PROCEDURE DIVISION.
MOVE "Lundi" TO JOUR(1).
MOVE "Mardi" TO JOUR(2).
MOVE "Mercredi" TO JOUR(3).
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 3
DISPLAY JOUR(I)
END-PERFORM.
STOP RUN.
La clause OCCURS 3 TIMES crée un tableau de 3 éléments, accessibles par un indice entre parenthèses : JOUR(1), JOUR(2), JOUR(3). On combine ici tableau et boucle pour parcourir les éléments — un motif très courant. Notez la notion de niveaux (01, 05) qui structure hiérarchiquement les données.
Exemple 7 : lire un fichier
C’est l’un des usages phares du COBOL : le traitement de fichiers, souvent volumineux. L’exemple ci-dessous lit un fichier séquentiel ligne par ligne jusqu’à la fin. C’est plus verbeux, car il faut décrire le fichier dans l’ENVIRONMENT et la DATA DIVISION :
IDENTIFICATION DIVISION.
PROGRAM-ID. LIRE-FICHIER.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT F-CLIENTS ASSIGN TO "clients.dat"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD F-CLIENTS.
01 ENR-CLIENT PIC X(50).
WORKING-STORAGE SECTION.
01 FIN-FICHIER PIC X VALUE "N".
PROCEDURE DIVISION.
OPEN INPUT F-CLIENTS.
PERFORM UNTIL FIN-FICHIER = "O"
READ F-CLIENTS
AT END MOVE "O" TO FIN-FICHIER
NOT AT END DISPLAY ENR-CLIENT
END-READ
END-PERFORM.
CLOSE F-CLIENTS.
STOP RUN.
Cet exemple rassemble plusieurs concepts :
SELECT ... ASSIGN TOassocie un nom logique (F-CLIENTS) à un fichier physique ;FD(File Description) décrit la structure d’un enregistrement ;OPEN INPUTouvre le fichier en lecture,CLOSEle referme ;READ ... AT ENDlit un enregistrement et détecte la fin de fichier ;- l’indicateur
FIN-FICHIERpilote la boucle jusqu’au dernier enregistrement.
Ce schéma « ouvrir – lire en boucle jusqu’à la fin – fermer » est le squelette de la plupart des traitements par lots (batch) en COBOL, ceux qui font tourner la paie, la facturation ou les relevés bancaires.
En résumé
À travers ces exemples, la logique du COBOL se dessine :
- tout programme suit les quatre divisions (IDENTIFICATION, ENVIRONMENT, DATA, PROCEDURE) ;
- les données se déclarent avec un niveau et une image
PIC(X pour le texte, 9 pour les nombres) ; MOVEaffecte,COMPUTEcalcule,IFteste,PERFORMrépète,OCCURScrée des tableaux ;- le traitement de fichiers (OPEN / READ / CLOSE) est au cœur des usages réels.
Le style verbeux du COBOL, qui peut sembler daté, a une contrepartie : le code est explicite et lisible, ce qui facilite sa maintenance sur la durée — un atout quand des programmes tournent depuis des décennies. Pour aller plus loin, un compilateur libre comme GnuCOBOL permet de tester soi-même ces exemples et d’expérimenter. La meilleure façon d’apprivoiser ce langage reste, comme toujours, d’écrire et d’exécuter son propre code.
Ces exemples vous ont donné un aperçu concret du COBOL ? C’est en manipulant ces briques de base — variables, calculs, boucles, fichiers — qu’on comprend pourquoi ce langage, malgré son âge, continue de faire tourner une partie du monde.