Inverser une chaîne – avec PERFORM VARYING

En COBOL, il n’existe pas d’instruction native pour inverser une chaîne comme REVERSE() dans d’autres langages. On doit donc construire manuellement la chaîne inversée en parcourant la chaîne source de la fin vers le début.

Cet exemple montre une méthode claire et pédagogique qui respecte deux règles importantes :
• la chaîne originale S reste intacte
• chaque caractère est traité individuellement (compatible avec les caractères multi-octets si on reste en PIC X)

Exemple de code

IDENTIFICATION DIVISION.
PROGRAM-ID. INVERSE-CHAINE.

DATA DIVISION.
WORKING-STORAGE SECTION.
01  S               PIC X(24) VALUE "Bonjour le monde COBOL".
01  T               PIC X(24) VALUE SPACES.
01  LONGUEUR        PIC 9(3).
01  I               PIC 9(3).
01  J               PIC 9(3).

PROCEDURE DIVISION.
    MOVE FUNCTION LENGTH(S) TO LONGUEUR

    PERFORM VARYING I FROM LONGUEUR BY -1
            UNTIL   I < 1
        ADD 1 TO J
        MOVE S(I:1) TO T(J:1)
    END-PERFORM

    DISPLAY "Original : " S
    DISPLAY "Inversée : " T

    STOP RUN.
        
Télécharger le code

Résultat attendu

Original : Bonjour le monde COBOL Inversée : LOBC monde el ruojnoB

Explication détaillée pour débutants

Note : les espaces finaux de S deviennent des espaces initiaux dans T. Si vous voulez une version sans espaces superflus, on peut utiliser FUNCTION TRIM avant ou après (à voir dans un prochain cours).