%TRIM
Retirer les blancs de début et de fin
Renvoie la chaîne sans ses blancs de début et de fin, ou sans les caractères de votre choix.
Syntaxe
%TRIM(chaîne)
%TRIM(chaîne : caractères)
chaîne- La zone ou l'expression caractère à nettoyer.
caractères- Facultatif : la liste des caractères à retirer, à la place du blanc. Chaque caractère de la liste est retiré au début et à la fin, dans n'importe quel ordre.
- Résultat
- Une chaîne variable, plus courte ou de même longueur. Si la chaîne n'est faite que de caractères à retirer, le résultat est vide (longueur 0).
À quoi ça sert
Une zone alphanumérique fixe est toujours complétée de blancs : Dupont SA dans 20 caractères occupe 20 caractères. Dès qu'on la concatène ou qu'on la compare à autre chose, ces blancs gênent. %TRIM les enlève au moment de l'utilisation.
Le second paramètre sert aux nettoyages courants : zéros de tête, guillemets, tirets.
Exemple 1 : Nettoyer une saisie
**free
// %TRIM : retirer les blancs de debut et de fin d'une chaine.
ctl-opt dftactgrp(*no) actgrp(*new);
dcl-s nom char(20) inz('Dupont SA');
dcl-s saisie varchar(30) inz(' Martin et fils ');
dcl-s vide char(10) inz(' ');
dcl-s copie char(20);
snd-msg 'Sans trim : [' + nom + ']';
snd-msg 'Avec trim : [' + %trim(nom) + ']';
snd-msg 'Saisie : [' + %trim(saisie) + ']';
snd-msg 'Longueur : ' + %char(%len(saisie)) + ' -> ' + %char(%len(%trim(saisie)));
snd-msg 'Zone vide : [' + %trim(vide) + ']';
snd-msg 'Longueur vide : ' + %char(%len(%trim(vide)));
// Le 2e parametre liste les caracteres a retirer (a la place du blanc).
snd-msg 'Zeros et blanc: [' + %trim('00120400' : '0') + ']';
snd-msg 'Guillemets : [' + %trim('"Brest"' : '"') + ']';
// Piege : stocker le resultat dans une zone fixe remet les blancs.
copie = %trim(saisie);
snd-msg 'Zone fixe : [' + copie + ']';
snd-msg 'Sa longueur : ' + %char(%len(copie));
*inlr = *on;
Résultat réel, compilé et exécuté sur IBM i 7.5 :
Sans trim : [Dupont SA ]
Avec trim : [Dupont SA]
Saisie : [Martin et fils]
Longueur : 20 -> 14
Zone vide : []
Longueur vide : 0
Zeros et blanc: [1204]
Guillemets : [Brest]
Zone fixe : [Martin et fils ]
Sa longueur : 20
Sans %TRIM, la zone de 20 caractères traîne 11 blancs dans le message. Avec, le texte est propre. Une saisie variable passe de 20 à 14 caractères. Une zone entièrement blanche donne une chaîne vide, de longueur 0.
Avec un 2e paramètre, on retire des zéros (00120400 donne 1204 : les zéros du milieu restent, ceux des deux bouts partent) ou des guillemets.
Les deux dernières lignes montrent le piège décrit plus bas.
Le piège
Ranger le résultat dans une zone fixe remet les blancs. copie = %TRIM(saisie) avec copie en char(20) redonne Martin et fils suivi de 6 blancs, de longueur 20. Le nettoyage ne vaut que le temps de l'expression : on utilise %TRIM à l'endroit où on concatène ou compare, ou on stocke le résultat dans un varchar.
Avec un 2e paramètre, les blancs ne sont plus retirés (seuls les caractères listés le sont) : %TRIM(' ab ' : '0') garde ses blancs. Pour retirer les deux, on met un blanc dans la liste : %TRIM(texte : ' 0').