Bonjour,
Je recherche une astuce, en RPG, pour pouvoir remplacer dans une chaine de caractère un caractère par une suite de caractère.
Par exemple, je souhaite remplacer le caractère ' par deux fois le caractère '.
concraitement la chaine : Vive l'été ! deviendrait Vive l''été !
J'aimerai bien faire cela sans être obligé de parcourir toute ma chaine, m'arrêter quand je trouve mon caractère à remplacer, remplacer le caractère par ma suite de caractères et concaténer ma nouvelle chaine avec la fin de mon ancienne chaine....
Existe t'il une fonction style %REPLACE pour faire cela ?
Merci de vos réponses.
Recherche astuce manipulation de chaine
(sans texte)
Pour le %replace je ne sais pas par contre tu peux essayer avec
%Scan qui te permet de savoir si ton ' est présent et à partir de quel position x
ensuite avec le %Subst tu recompose ta zone libelle (
lib = %subst(lib:1: x-1) + '"' + %subst(lib:x+6:y-x-10)
ou y est la longueur de ton lib
le probleme est que tu remplace une zone de (1 C) par une zone de (2C) donc tu risque de perdre une partie de ton libelle ...
%Scan qui te permet de savoir si ton ' est présent et à partir de quel position x
ensuite avec le %Subst tu recompose ta zone libelle (
lib = %subst(lib:1: x-1) + '"' + %subst(lib:x+6:y-x-10)
ou y est la longueur de ton lib
le probleme est que tu remplace une zone de (1 C) par une zone de (2C) donc tu risque de perdre une partie de ton libelle ...
-
- Site Admin
- Messages : 813
- Enregistré le : mer. 14 févr. 2007, 18:00:03
- Localisation : Nantes
- Contact :
%replace
la fonction %replace existe sous la forme
En effet on fournit la position (et non la valeur) de la chaîne remplacée.
par exemple
Code : Tout sélectionner
%REPLACE('nouvelle-chaine' : variable : position-actuelle: nb-de-car-remplacés)
par exemple
Code : Tout sélectionner
debut = 1;
dou pos = 0 or debut > %size(variable);
pos = %scan('''' : variable : debut);
if pos > 0;
variable = %replace('''''' : variable : pos : 1);
debut = pos + 2;
endif;
enddo;
Christian Massé (Volubis.fr)