Extraire le début d'une chaîne – Préfixe avec REFERENCE MODIFICATION
En COBOL, pour extraire les premiers caractères d'une chaîne (un préfixe), on utilise la notation de référence de modification (aussi appelée REFERENCE MODIFICATION).
Cette syntaxe est très pratique, lisible et gère correctement les caractères multi-octets (UTF-8, DBCS, etc.) tant que la variable est déclarée en PIC X.
Exemple de code
IDENTIFICATION DIVISION.
PROGRAM-ID. PREFIXE-CHAINE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 S PIC X(38) VALUE "Bonjour à tous les apprenants COBOL !".
01 T PIC X(5) VALUE SPACES.
PROCEDURE DIVISION.
MOVE S(1:5) TO T
DISPLAY "Chaîne originale :"
DISPLAY S
DISPLAY " "
DISPLAY "5 premiers caractères :"
DISPLAY T
STOP RUN.
Explication détaillée pour débutants
01 S PIC X(38) VALUE "Bonjour à tous les apprenants COBOL !".
Variable source contenant une phrase. On lui donne assez de place pour le texte + des espaces éventuels.01 T PIC X(5) VALUE SPACES.
Variable destination qui ne contiendra que 5 caractères. Initialisée avec des espaces pour être propre.MOVE S(1:5) TO T
C’est la ligne clé !
S(1:5)signifie : « de la variableS, à partir de la position 1, prendre 5 caractères ».
EnCOBOL, les positions commencent à 1 (pas à 0).
Cette notation copie exactement 5 caractères, même s’ils sont accentués ou multi-octets.DISPLAY SetDISPLAY T
On affiche les deux chaînes pour comparer avant/après.
La chaîne originaleSreste inchangée (important !).
Résultat attendu
Chaîne originale :
Bonjour à tous les apprenants COBOL !
5 premiers caractères :
Bonjo
Remarques importantes :
- La notation
(début:longueur)est très utilisée enCOBOLmoderne (COBOL 85 et plus). - Si vous voulez les 5 premiers caractères en comptant les vrais caractères Unicode (et non les octets), cette méthode fonctionne déjà correctement avec la plupart des compilateurs récents en mode UTF-8.
- Pour des extractions plus complexes, on peut combiner avec
FUNCTION TRIM,INSPECTou des boucles (à voir plus tard).