Apprenez les bases du COBOL et développez vos compétences en programmation legacy avec une approche moderne.
En cobol, les champs texte sont généralement à longueur fixe : ils sont souvent complétés par des espaces à droite.
La manipulation de chaînes consiste donc presque toujours à nettoyer, assembler et découper ces champs
pour obtenir des sorties lisibles et des traitements fiables. Dans cette leçon, vous allez voir les outils les plus
utiles en pratique : FUNCTION TRIM ,
STRING et UNSTRING .
Pour comprendre les chaînes en cobol, il faut retenir une idée simple : un champ texte a une taille fixe. Si vous stockez “Paul” dans un champ de 20 caractères, la mémoire contient “Paul” + des espaces. Ces espaces ne se voient pas toujours, mais ils influencent les comparaisons, les concaténations et la présentation.
FUNCTION TRIM STRING UNSTRING [ et ]
pendant l’apprentissage.
Le programme ci-dessous montre un “cycle complet” de manipulation :
vous saisissez un prénom et une ville, vous nettoyez les espaces, vous assemblez une phrase,
puis vous découpez une autre chaîne au format “prenom;ville” avec UNSTRING .
>>SOURCE FORMAT FREE
IDENTIFICATION DIVISION.
PROGRAM-ID. DEMO-CHAINES.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-PRENOM PIC X(20) VALUE SPACES.
01 WS-VILLE PIC X(20) VALUE SPACES.
01 WS-PHRASE PIC X(80) VALUE SPACES.
01 WS-LIGNE PIC X(50) VALUE SPACES.
01 WS-P1 PIC X(20) VALUE SPACES.
01 WS-P2 PIC X(20) VALUE SPACES.
PROCEDURE DIVISION.
DISPLAY "Prenom : " WITH NO ADVANCING
ACCEPT WS-PRENOM
DISPLAY "Ville : " WITH NO ADVANCING
ACCEPT WS-VILLE
STRING
"Bonjour " DELIMITED BY SIZE
FUNCTION TRIM(WS-PRENOM) DELIMITED BY SIZE
", vous etes a " DELIMITED BY SIZE
FUNCTION TRIM(WS-VILLE) DELIMITED BY SIZE
"." DELIMITED BY SIZE
INTO WS-PHRASE
END-STRING
DISPLAY "Phrase = [" WS-PHRASE "]"
MOVE "Paul;Lyon" TO WS-LIGNE
UNSTRING WS-LIGNE
DELIMITED BY ";"
INTO WS-P1 WS-P2
END-UNSTRING
DISPLAY "Decoupe : prenom=[" WS-P1 "] ville=[" WS-P2 "]"
STOP RUN.
STRING
L’idée : vous empilez des morceaux (texte fixe + champs nettoyés) dans une destination
WS-PHRASE . Le mot-clé DELIMITED BY SIZE
signifie : “prendre toute la longueur du morceau”.
STRING
"Bonjour " DELIMITED BY SIZE
FUNCTION TRIM(WS-PRENOM) DELIMITED BY SIZE
", vous etes a " DELIMITED BY SIZE
FUNCTION TRIM(WS-VILLE) DELIMITED BY SIZE
"." DELIMITED BY SIZE
INTO WS-PHRASE
END-STRING
UNSTRING
L’idée : vous partez d’une ligne “composée” (souvent issue d’un fichier ou d’un flux),
et vous la découpez dans plusieurs champs. Le séparateur est défini par
DELIMITED BY .
MOVE "Paul;Lyon" TO WS-LIGNE
UNSTRING WS-LIGNE
DELIMITED BY ";"
INTO WS-P1 WS-P2
END-UNSTRING
WS-PHRASE est trop court, le résultat est coupé.
Solution : augmentez la taille (ex. X(120) ) ou produisez une phrase plus courte.
FUNCTION TRIM sur les champs.
UNSTRING ne remplit pas comme prévu.
Solution : testez le format d’entrée, ou prévoyez un cas “format invalide”.
UNSTRING . STRING (uniquement avec DISPLAY et plusieurs morceaux), puis comparez la lisibilité du code.