Aller au contenu

%TRIML

Retirer les blancs de début

Renvoie la chaîne sans ses blancs de début, ou sans les caractères de votre choix en tête.

Syntaxe

%TRIML(chaîne)
%TRIML(chaîne : caractères)
chaîne
La zone ou l'expression caractère à nettoyer.
caractères
Facultatif : les caractères à retirer au début, à la place du blanc.
Résultat
Une chaîne variable. La fin de la chaîne n'est jamais modifiée : ses blancs restent.

À quoi ça sert

Pour du texte saisi avec des espaces devant (un numéro cadré à droite, un libellé décalé), on veut supprimer la tête sans toucher à la fin. Avec la liste de caractères, %TRIML(numero : '0') supprime les zéros de tête d'un numéro tout en gardant ceux de la fin, ce qui serait faux avec %TRIM.

Exemple 1 : Début seulement

**free
// %TRIML : retirer les blancs (ou des caracteres choisis) au DEBUT d'une chaine.
ctl-opt dftactgrp(*no) actgrp(*new);

dcl-s ligne  varchar(30) inz('   Montpellier   ');
dcl-s numero varchar(10) inz('0000417');

snd-msg 'TRIML         : [' + %triml(ligne) + ']';
snd-msg 'TRIM          : [' + %trim(ligne) + ']';
snd-msg 'Longueur      : ' + %char(%len(ligne)) + ' -> ' + %char(%len(%triml(ligne)));
// Zeros de tete retires : la fin n'est pas touchee.
snd-msg 'Sans zeros    : [' + %triml(numero : '0') + ']';
snd-msg 'Zeros de fin  : [' + %triml('12000' : '0') + ']';
// Plusieurs caracteres possibles dans le 2e parametre.
snd-msg 'Tirets et _   : [' + %triml('--_-ABC-' : '-_') + ']';

*inlr = *on;

Résultat réel, compilé et exécuté sur IBM i 7.5 :

TRIML         : [Montpellier   ]
TRIM          : [Montpellier]
Longueur      : 17 -> 14
Sans zeros    : [417]
Zeros de fin  : [12000]
Tirets et _   : [ABC-]

%TRIML laisse les blancs de fin (visibles avant le crochet fermant) alors que %TRIM les retire. La longueur passe de 17 à 14, puisqu'on enlève les trois blancs de tête.

Avec '0', 0000417 devient 417, mais 12000 reste 12000 : les zéros de fin ne bougent pas. La liste peut contenir plusieurs caractères : --_-ABC- donne ABC-.

Le piège

Les blancs de fin restent. On utilise %TRIML pour ne toucher qu'au début, mais dans un message ou une concaténation, les blancs de fin d'une zone fixe apparaissent toujours. Si vous voulez les deux côtés propres, prenez %TRIM.

Et ranger le résultat dans une zone fixe redonne un remplissage de blancs à droite, sans changer la longueur de la zone.