Extraire la fin d'une chaîne – Suffixe avec REFERENCE MODIFICATION
En COBOL, pour extraire les derniers caractères d'une chaîne (le suffixe), on utilise toujours la notation de référence de modification (position:longueur).
Le truc est de calculer la position de départ correctement : LONGUEUR - N + 1, où N est le nombre de caractères que l’on veut prendre. Cette méthode respecte les caractères multi-octets (accents, emoji, etc.) quand le programme est compilé en mode UTF-8.
Exemple de code
IDENTIFICATION DIVISION.
PROGRAM-ID. SUFFIXE-CHAINE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 CHAINE1 PIC X(44) VALUE "Bienvenue dans l'apprentissage COBOL moderne".
01 CHAINE2 PIC X(5) VALUE SPACES.
01 LONGUEUR PIC 9(3).
01 POSITION-DEBUT PIC 9(3).
PROCEDURE DIVISION.
MOVE FUNCTION LENGTH(CHAINE1) TO LONGUEUR
COMPUTE POSITION-DEBUT = LONGUEUR - 5 + 1
MOVE CHAINE1(POSITION-DEBUT:5) TO CHAINE2
DISPLAY "Chaîne originale :"
DISPLAY CHAINE1
DISPLAY " "
DISPLAY "5 derniers caractères :"
DISPLAY CHAINE2
STOP RUN.
Explication détaillée pour débutants
01 CHAINE1 PIC X(44) VALUE "Bienvenue dans l'apprentissage COBOL moderne".
Chaîne source (la phrase complète). On lui donne assez de place.01 CHAINE2 PIC X(5) VALUE SPACES.
Variable qui recevra uniquement les 5 derniers caractères. Initialisée avec des espaces.MOVE FUNCTION LENGTH(CHAINE1) TO LONGUEUR
On récupère la longueur réelle de la chaîne (ici 43 caractères, espaces inclus).COMPUTE POSITION-DEBUT = LONGUEUR - 5 + 1
Calcul très important !
Si la chaîne fait 43 caractères et qu’on veut les 5 derniers :
Position de départ = 43 − 5 + 1 = 39
On commence donc au 39ᵉ caractère pour prendre les 5 suivants.MOVE CHAINE1(POSITION-DEBUT:5) TO CHAINE2
On copie 5 caractères à partir de la position calculée.
La notation(début:longueur)est la même que pour le préfixe, mais avec un début calculé.DISPLAY CHAINE1etDISPLAY CHAINE2
On montre l’original (inchangé) et le résultat extrait.
Résultat attendu
Chaîne originale :
Bienvenue dans l'apprentissage COBOL moderne
5 derniers caractères :
derne
Points clés à retenir :
- La formule
LONGUEUR - N + 1est universelle pour extraire un suffixe de N caractères. FUNCTION LENGTHcompte les caractères, pas forcément les octets (selon le compilateur et le codage).- La chaîne source reste intacte.