Exercice 15-A : string

Micro-exercice

Objectif : utiliser STRING pour assembler plusieurs morceaux de texte dans une variable. C’est très utile pour fabriquer un message clair, un libellé de rapport, ou une ligne à écrire dans un fichier. Vous allez concaténer un texte fixe, puis des données saisies, en contrôlant les espaces et la fin de chaque morceau.

Ce que vous pratiquez

  • Saisir des champs texte avec ACCEPT.
  • Comprendre DELIMITED BY (où s’arrête un morceau).
  • Construire une phrase finale dans une destination avec INTO.

Repère sur les colonnes

  • Zone A : colonnes 8 à 11 (7 espaces pour divisions et déclarations).
  • Zone B : colonnes 12 à 72 (11 espaces pour instructions).

Le bloc <pre> conserve les espaces : rendu réaliste et lisible sur mobile.

Exemple minimal COBOL Format fixe
Télécharger le code
       IDENTIFICATION DIVISION.
       PROGRAM-ID. EXO-STRING-21.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  WS-PRENOM            PIC X(15) VALUE SPACES.
       01  WS-NOM               PIC X(15) VALUE SPACES.
       01  WS-VILLE             PIC X(15) VALUE SPACES.
       01  WS-MESSAGE           PIC X(80) VALUE SPACES.

       PROCEDURE DIVISION.
           DISPLAY "Entrez le prenom : "
           ACCEPT WS-PRENOM
           DISPLAY "Entrez le nom : "
           ACCEPT WS-NOM
           DISPLAY "Entrez la ville : "
           ACCEPT WS-VILLE

           MOVE SPACES TO WS-MESSAGE

           STRING
               "Bonjour "          DELIMITED BY SIZE
               WS-PRENOM           DELIMITED BY SPACE
               " "                 DELIMITED BY SIZE
               WS-NOM              DELIMITED BY SPACE
               ", ville : "        DELIMITED BY SIZE
               WS-VILLE            DELIMITED BY SPACE
               "."                 DELIMITED BY SIZE
               INTO WS-MESSAGE
           END-STRING

           DISPLAY WS-MESSAGE
           STOP RUN.

Lecture simple

STRING ajoute les morceaux dans l’ordre. Le point clé est DELIMITED BY : il indique “jusqu’où prendre” le contenu de chaque morceau.

  • DELIMITED BY SIZE : on prend toute la longueur (pratique pour les textes fixes).
  • DELIMITED BY SPACE : on s’arrête au premier espace (utile après une saisie, car les champs ont souvent des blancs à droite).
  • INTO WS-MESSAGE : la destination reçoit le résultat complet.
À retenir : la variable destination doit être assez grande. Ici, PIC X(80) laisse de la marge pour un message confortable.

Votre micro-exercice

Faites ces 3 modifications :

  1. Ajoutez une variable WS-PAYS et demandez-la à l’utilisateur.
  2. Fabriquez un message : “Bonjour PRENOM NOM, ville : VILLE, pays : PAYS.”
  3. Testez avec une ville et un pays longs : si ça coupe, augmentez la taille de WS-MESSAGE.

Erreur fréquente à éviter

Oublier les séparateurs. Si vous concaténez “Bonjour” et un prénom sans espace, vous obtiendrez un texte collé (“BonjourPaul”). Le bon réflexe : intégrer les espaces dans les littéraux, ou ajouter un littéral " " entre deux champs.

Autre piège : utiliser DELIMITED BY SIZE sur un champ saisi. Cela copie aussi les espaces de fin, et le message peut avoir des blancs au milieu. Pour une saisie, DELIMITED BY SPACE donne souvent un résultat plus propre.

Conseil : pour apprendre vite, affichez le message final, puis affichez aussi chaque champ saisi séparément. Vous verrez immédiatement si un champ contient des espaces inattendus.