Le mot-clé FILLER
En COBOL, le mot-clé FILLER permet de réserver de l’espace dans une structure de données sans lui donner de nom utilisable dans le programme.
C’est très utile quand on reçoit ou envoie des données structurées (fichiers, appels de fonctions, zones mémoire) dont on n’a pas besoin de toutes les parties. On « saute » simplement les octets inutiles.
Exemple concret : ignorer une partie de FUNCTION CURRENT-DATE
IDENTIFICATION DIVISION.
PROGRAM-ID. UTILISATION-FILLER.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 D.
03 ANNEE PIC 9(4).
03 MOIS PIC 9(2).
03 JOUR PIC 9(2).
03 FILLER PIC X(13). *> pour ignorer heure + offset
01 DATE-FORMATTEE PIC X(10) VALUE SPACES.
PROCEDURE DIVISION.
MOVE FUNCTION CURRENT-DATE TO D
STRING ANNEE "-" MOIS "-" JOUR
DELIMITED BY SIZE
INTO DATE-FORMATTEE
END-STRING
DISPLAY "Date du jour (AAAA-MM-JJ) : " DATE-FORMATTEE
STOP RUN.
Sortie attendue (exemple)
Date du jour
(AAAA-MM-JJ) : 2026-01-28
Explication détaillée : pourquoi utiliser FILLER ici ?
FUNCTION CURRENT-DATErenvoie toujours 21 caractères :
AAAAMMJJHHMMSSsss+HHMM
→ 4 (année) + 2 (mois) + 2 (jour) + 2 (h) + 2 (min) + 2 (sec) + 3 (ms) + 1 (signe) + 2 (h offset) + 2 (min offset) = 21- On ne s’intéresse qu’aux 8 premiers caractères (AAAA + MM + JJ)
ANNEE PIC 9(4),MOIS PIC 9(2),JOUR PIC 9(2)
Ces trois champs occupent exactement les 8 premiers octets.03 FILLER PIC X(13).
Les 13 caractères restants (heure + millisecondes + offset) ne nous intéressent pas.
On les déclare avecFILLERpour dire au compilateur :
« Réserve-moi 13 octets ici, mais je ne leur donnerai jamais de nom, je ne les utiliserai jamais. »- Quand on fait
MOVE FUNCTION CURRENT-DATE TO D
Les 21 caractères sont copiés dans la structureD.
Les 8 premiers vont dansANNEE,MOIS,JOUR.
Les 13 derniers vont dans leFILLER(et sont ignorés).
Pourquoi ne pas déclarer seulement
Parce que
PIC X(8) ?Parce que
FUNCTION CURRENT-DATE renvoie 21 caractères. Si on déclare une variable de 8 caractères seulement, le MOVE tronquerait la donnée et pourrait causer des erreurs ou des comportements imprévisibles selon le compilateur. Le FILLER permet de recevoir la donnée complète sans risque.
Règle d’or : Utilisez FILLER dès que vous avez une zone de données entrante ou sortante dont vous n’utilisez qu’une partie. C’est propre, sûr et très courant en COBOL (fichiers séquentiels, VSAM, COPY de COPYBOOK, appels CICS, etc.).