Apprenez les bases du COBOL et développez vos compétences en programmation legacy avec une approche moderne.
L’instruction UNSTRING sert à découper une chaîne “source” en plusieurs champs “cibles”.
C’est l’outil classique pour analyser une ligne issue d’un fichier, d’un flux, ou d’une saisie, quand les données sont séparées
par un caractère (ex. ;, ,, |) ou par des espaces. En gestion, c’est une base très fréquente :
lire une ligne, extraire des valeurs, puis les traiter.
Pensez à UNSTRING comme à une opération “je prends une ligne, et je la répartis”.
Vous indiquez :
la source, le séparateur, et les champs destination.
Le séparateur est défini avec DELIMITED BY .
DELIMITED BY ;
coupe à chaque point-virgule.
PIC X(n) .
S’ils sont trop courts, le contenu est tronqué.
[ et ]
pour visualiser.
Cet exemple demande une ligne au format nom;ville;age, puis la découpe dans trois champs.
Il gère aussi un cas simple : l’âge doit être numérique. Vous pouvez facilement adapter le séparateur.
>>SOURCE FORMAT FREE
IDENTIFICATION DIVISION.
PROGRAM-ID. DEMO-UNSTRING.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-LIGNE PIC X(60) VALUE SPACES.
01 WS-NOM PIC X(20) VALUE SPACES.
01 WS-VILLE PIC X(20) VALUE SPACES.
01 WS-AGE-TXT PIC X(3) VALUE SPACES.
01 WS-AGE PIC 9(3) VALUE 0.
PROCEDURE DIVISION.
DISPLAY "Entrez une ligne au format nom;ville;age : " WITH NO ADVANCING
ACCEPT WS-LIGNE
UNSTRING WS-LIGNE
DELIMITED BY ";"
INTO WS-NOM WS-VILLE WS-AGE-TXT
END-UNSTRING
IF WS-AGE-TXT IS NUMERIC
MOVE WS-AGE-TXT TO WS-AGE
ELSE
MOVE 0 TO WS-AGE
DISPLAY "Erreur : age non numerique (" WS-AGE-TXT ")"
END-IF
DISPLAY "--- Resultat decoupe ---"
DISPLAY "Nom = [" WS-NOM "]"
DISPLAY "Ville = [" WS-VILLE "]"
DISPLAY "Age = " WS-AGE
STOP RUN.
Ici, vous indiquez : “je coupe la ligne sur le point-virgule, et je remplis trois champs”. Si la ligne contient moins de séparateurs, certains champs restent partiellement vides (souvent des espaces). Si la ligne contient plus d’informations, l’excédent n’est pas stocké dans ces trois champs.
UNSTRING WS-LIGNE
DELIMITED BY ";"
INTO WS-NOM WS-VILLE WS-AGE-TXT
END-UNSTRING
UNSTRING , testez plusieurs formats d’entrée et observez
les champs affichés entre crochets.
Durand;Paris;42Durand;Paris; (âge vide)Durand Paris 42 (tout va au premier champ, selon l’environnement)Durand;Paris;AB (déclenche le message d’erreur)[champ].
Vous repérez immédiatement les espaces et les zones non remplies.
WS-NOM fait 10 caractères et que vous recevez un nom de 20 caractères,
il sera tronqué. Solution : agrandir les champs ou imposer une règle de format.
, plutôt que ;.
Solution : adaptez DELIMITED BY au format réel.
IS NUMERIC, puis convertir.
UNSTRING sert à transformer une donnée “plate” (une ligne) en champs exploitables.
C’est une étape de base en batch : lire une ligne, extraire des valeurs, appliquer des règles, produire une sortie.
prenom|ville|code en changeant le délimiteur.