Assembler des chaînes – Instruction STRING
L’instruction STRING en COBOL permet de concaténer (assembler) plusieurs morceaux de texte dans une seule variable, de façon contrôlée et lisible.
C’est l’équivalent de l’opération « + » ou de la concaténation dans les autres langages, mais avec plus de contrôle (délimiteurs, gestion des espaces, troncature si nécessaire).
Exemple de code
IDENTIFICATION DIVISION.
PROGRAM-ID. ASSEMBLAGE-CHAINE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 CHAINE1 PIC X(25) VALUE SPACES.
01 CHAINE2 PIC X(5) VALUE 'COBOL'.
01 CHAINE3 PIC X(5) VALUE 'RULE'.
01 CHAINE4 PIC X(3) VALUE 'THE'.
01 CHAINE5 PIC X(5) VALUE 'WORLD'.
PROCEDURE DIVISION.
STRING CHAINE2 ' ' CHAINE3 ' ' CHAINE4 ' ' CHAINE5
DELIMITED BY SIZE
INTO CHAINE1
END-STRING
DISPLAY "Résultat assemblé :"
DISPLAY CHAINE1
STOP RUN.
Résultat attendu
Résultat assemblé :
COBOL RULE THE WORLD
Explication détaillée pour débutants
01 CHAINE1 PIC X(25) VALUE SPACES.
C’est la variable destination qui va recevoir le texte assemblé. On la remplit d’espaces au départ pour être sûr qu’elle est propre.01 CHAINE2 PIC X(5) VALUE 'COBOL'.
Premier morceau de texte (5 caractères). Note : même si on écrit 'COBOL', la variable fait 5 caractères (pas d’espace ajouté automatiquement).- Les autres
CHAINE3,CHAINE4,CHAINE5
Petits morceaux à assembler. On les déclare séparément pour bien montrer queSTRINGpeut prendre plusieurs éléments. STRING CHAINE2 ' ' CHAINE3 ' ' CHAINE4 ' ' CHAINE5
Début de l’instruction. On liste dans l’ordre ce qu’on veut coller :
•CHAINE2→"COBOL"
• un espace littéral' '
•CHAINE3→"RULE"
• un espace
•CHAINE4→"THE"
• un espace
•CHAINE5→"WORLD"DELIMITED BY SIZE
Clause très importante ici.
SIZEsignifie : « prends exactement la taille définie de chaque élément » (pas de troncature sur les espaces finaux, on copie tout).INTO CHAINE1
Indique où aller mettre le résultat : dansCHAINE1.END-STRING
Marque la fin de l’instructionSTRING(obligatoire quand on écrit l’instruction sur plusieurs lignes).
Remarques :
- Le résultat fait 25 caractères :
END-STRING"COBOL RULE THE WORLD" + un espace final (carCHAINE1est déclarée sur 25 positions). - Si on veut supprimer les espaces superflus, on peut utiliser
FUNCTION TRIMaprès (à voir dans un prochain cours). STRINGest très utilisé pour construire des messages, des lignes de fichiers, des en-têtes, etc.