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

Introduction à la manipulation de chaînes de caractères en cobol

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 .

Texte Nettoyage Assemblage

Conceptualiser

Idées clés

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.

Nettoyer :  FUNCTION  TRIM 
Retire les espaces (souvent de fin) pour obtenir une valeur “propre” dans une phrase ou une comparaison.
Assembler :  STRING 
Concatène plusieurs éléments dans un champ destination : utile pour produire des libellés, des lignes de sortie, des messages, ou des enregistrements.
Découper :  UNSTRING 
Sépare une chaîne en plusieurs champs en s’appuyant sur un séparateur (espace, virgule, point-virgule, etc.).
Piège classique
Comparer deux champs texte sans les nettoyer peut produire des résultats surprenants (espaces invisibles). Une habitude simple : encadrez vos affichages avec [ et ] pendant l’apprentissage.

Opérer

Exemple complet

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 .

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

 >>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.
Focus : assembler une phrase avec  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
Focus : découper une chaîne avec  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

Phrase tronquée
Si  WS-PHRASE  est trop court, le résultat est coupé. Solution : augmentez la taille (ex.  X(120) ) ou produisez une phrase plus courte.
Concaténation “bizarre”
Si vous assemblez des champs non nettoyés, les espaces envahissent la phrase. Solution : utilisez  FUNCTION  TRIM  sur les champs.
Découpage incomplet
Si la chaîne ne contient pas le séparateur,  UNSTRING  ne remplit pas comme prévu. Solution : testez le format d’entrée, ou prévoyez un cas “format invalide”.
Explorer : exercices
1) Ajoutez un champ “pays” et produisez la phrase : “Bonjour X, vous êtes à Ville, Pays.”
2) Remplacez le séparateur “;” par “,” dans l’exemple  UNSTRING .
3) Testez un prénom court (“Li”) et vérifiez l’intérêt de l’affichage encadré.
4) Produisez une phrase plus courte sans  STRING  (uniquement avec  DISPLAY  et plusieurs morceaux), puis comparez la lisibilité du code.

↑ Haut