Bienvenue dans la formation COBOL

Apprenez les bases du COBOL et développez vos compétences en programmation legacy avec une approche moderne.

Info : Ce module vous permet d’accéder rapidement aux contenus essentiels de la formation COBOL.
Retour au plan général

Instruction unstring : découper une chaîne en plusieurs sous-chaînes

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.

Découpage Format Traitement

Conceptualiser

Principes

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 .

Délimiteur : votre règle de découpage
Exemple :  DELIMITED  BY  ; coupe à chaque point-virgule.
Destinations : des champs à longueur fixe
Les champs cibles sont souvent des  PIC  X(n) . S’ils sont trop courts, le contenu est tronqué.
Contrôle : format attendu vs format reçu
Une ligne peut être incomplète (pas assez de séparateurs) ou trop riche (trop de valeurs). Vous devez prévoir un cas “format invalide” dans vos affichages ou dans votre logique métier.
Piège classique
Croire que le découpage “nettoie” les espaces. En réalité, les champs destination sont fixes : vous verrez souvent des espaces de fin. Pendant l’apprentissage, encadrez l’affichage avec [ et ] pour visualiser.

Opérer

Exemple exécutable

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.

Fichier : demo-unstring.cbl
Cobol (format libre)

 >>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.
Le cœur de la découpe

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
Jeux de test conseillés
Pour comprendre réellement  UNSTRING , testez plusieurs formats d’entrée et observez les champs affichés entre crochets.
Cas normal
Entrée : Durand;Paris;42
Champ manquant
Entrée : Durand;Paris; (âge vide)
Séparateur absent
Entrée : Durand Paris 42 (tout va au premier champ, selon l’environnement)
Âge non numérique
Entrée : Durand;Paris;AB (déclenche le message d’erreur)
Conseil pédagogique
Tant que vous apprenez, affichez toujours les champs encadrés : [champ]. Vous repérez immédiatement les espaces et les zones non remplies.

Destinations trop courtes
Si  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.
Séparateur inattendu
Si la ligne vient d’un fichier CSV, le séparateur peut être , plutôt que ;. Solution : adaptez  DELIMITED  BY  au format réel.
Champ numérique non validé
Un âge “AB” ne doit pas être copié vers un champ numérique. Solution : lire en texte, tester IS NUMERIC, puis convertir.
Expliquer
 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.
Explorer : exercices
1) Passez au format prenom|ville|code en changeant le délimiteur.
2) Ajoutez un quatrième champ “pays” et testez une ligne complète.
3) Si la ville est vide, affichez “Attention : ville manquante”.
4) Découpez une chaîne “produit;quantite;prix” et validez que quantité et prix sont numériques.

↑ Haut