L’instruction CONDENSE sert à supprimer les espaces superflus d’un objet de données de type caractère (le plus souvent de type C - chaîne de longueur fixe). Elle modifie le contenu de la variable spécifiée directement en place (“in place”).
Concrètement, CONDENSE effectue les actions suivantes dans son comportement standard :
- Supprime tous les espaces de début.
- Remplace les séquences de plusieurs espaces internes (espaces entre les caractères visibles) par exactement un seul espace.
Important : Par défaut, CONDENSE ne supprime pas les espaces de fin à la fin de la chaîne !
Syntaxe
CONDENSE <variable> [NO-GAPS].<variable>: Le nom de la variable de type caractère (généralement typeC) dont le contenu doit être condensé.[NO-GAPS](Optionnel) : Un complément qui modifie le comportement : siNO-GAPSest spécifié, tous les espaces (de début, internes et de fin) sont complètement supprimés de la variable.
Fonctionnement en détail
Sans NO-GAPS (CONDENSE <variable>.)
" Bonjour Monde "devient"Bonjour Monde "(si<variable>est par ex.C(30). Les espaces de fin jusqu’à la longueur du champ restent.)" "devient" "(uniquement des espaces, est rempli d’espaces à gauche jusqu’à la longueur du champ)" ABC "devient"ABC ""A B C"devient"A B C "
Avec NO-GAPS (CONDENSE <variable> NO-GAPS.)
" Bonjour Monde "devient"BonjourMonde "(reste rempli d’espaces)" "devient" "(champ vide)" ABC "devient"ABC ""A B C"devient"ABC "
Applicabilité (Type C vs. STRING)
Type C (chaîne de longueur fixe) : C’est le cas d’utilisation principal de CONDENSE. Les champs de type C sont souvent remplis d’espaces à droite après les affectations ou peuvent contenir des espaces de début/multiples internes suite à des traitements.
Type STRING (chaîne de longueur variable) : CONDENSE peut aussi être appliqué aux strings.
- Le
CONDENSEstandard supprime les espaces de début et réduit les espaces internes multiples à un seul. Les espaces de fin qui font partie de la valeur du string sont conservés. CONDENSE ... NO-GAPSsupprime tous les espaces du string.- Pour les strings, il existe souvent des alternatives plus spécifiques et modernes comme
SHIFT ... DELETING LEADING/TRAILING space.,REPLACEou les String Templates/fonctions, qui offrent plus de contrôle.
Exemples
1. CONDENSE standard avec Type C
DATA text_c TYPE c LENGTH 40 VALUE ' Première partie deuxième partie '.
WRITE: / 'Type C avant :', |'{ text_c }'|.CONDENSE text_c.WRITE: / 'Type C après :', |'{ text_c }'|.Sortie :
Type C avant : '{ Première partie deuxième partie }"Type C après : '{Première partie deuxième partie }"(Espaces de début supprimés, internes réduits à 1, espaces de fin conservés jusqu’à la longueur 40).
2. CONDENSE avec NO-GAPS pour Type C
DATA text_c_ng TYPE c LENGTH 40 VALUE ' Première partie deuxième partie '.
WRITE: / 'Type C NG avant :', |'{ text_c_ng }'|.CONDENSE text_c_ng NO-GAPS.WRITE: / 'Type C NG après :', |'{ text_c_ng }'|.Sortie :
Type C NG avant : '{ Première partie deuxième partie }"Type C NG après : '{Premièrepartiedeuxièmepartie }"(Tous les espaces supprimés, le reste est aligné à gauche).
3. CONDENSE avec Type STRING
DATA text_s TYPE string VALUE ` String avec beaucoup d espace `.
WRITE: / 'String avant :', |'{ text_s }'|.CONDENSE text_s.WRITE: / 'String après :', |'{ text_s }'|. " Début supprimés, internes réduits, fin conservés
DATA text_s_ng TYPE string VALUE ` String avec beaucoup d espace `.CONDENSE text_s_ng NO-GAPS.WRITE: / 'String après NG :', |'{ text_s_ng }'|. " Tous les espaces supprimésSortie :
String avant : '{ String avec beaucoup d espace }"String après : '{String avec beaucoup d espace }"String après NG : '{Stringavecbeaucoupdespace}"Notes importantes / Bonnes pratiques
CONDENSEmodifie la variable passée directement. Sauvegardez la valeur originale avant si elle est encore nécessaire.- L’erreur la plus fréquente est de supposer que
CONDENSEsupprime les espaces de fin. C’est faux par défaut. SeulCONDENSE ... NO-GAPSsupprime tous les espaces. - Pour supprimer uniquement les espaces de fin, on utilise pour les strings
SHIFT <str> RIGHT DELETING TRAILING space.ou pour le type C par ex. l’affectation à un string et retour ou des modules fonction spéciaux. CONDENSEest utile pour nettoyer les champs de saisie ou les données de sources externes qui pourraient contenir des espaces indésirables.- Pour les manipulations de chaînes complexes, les fonctions de string modernes ou les opérateurs sont souvent un meilleur choix que
CONDENSE.