%REPLACE (Replace Character String)
%REPLACE(replacement string: source string{:start position {:source
length to replace { : *NATURAL | *STDCHARSIZE}}})
%REPLACE renvoie la chaîne de caractères générée en insérant une chaîne de remplacement dans la chaîne source, en commençant à la position de début et en remplaçant le nombre de caractères spécifié.
Les premier et deuxième paramètres doivent être de type caractère, graphique ou UCS-2 et peuvent être de longueur fixe ou variable.
Si le premier paramètre n'a pas le même type ou CCSID que le second paramètre, le premier paramètre est converti dans le type et le CCSID du second paramètre.
Le troisième paramètre représente la position de départ, mesurée en caractères, de la chaîne de remplacement. S'il n'est pas spécifié, la position de début se trouve au début de la chaîne source. La valeur peut être comprise entre 1 et la longueur en cours de la chaîne source plus 1. Il peut s'agir d'une valeur numérique ou d'une expression numérique sans position décimale.
Le quatrième paramètre représente le nombre de caractères de la chaîne source à remplacer. Si la valeur zéro est indiquée, la chaîne de remplacement est insérée avant la position de début indiquée. Si le paramètre n'est pas spécifié, le nombre de caractères remplacés est identique à la longueur de la chaîne de remplacement. La valeur doit être supérieure ou égale à zéro et inférieure ou égale à la longueur en cours de la chaîne source. Il peut s'agir d'une valeur numérique ou d'une expression numérique sans position décimale.
- Indiquez *NATURAL pour indiquer que %REPLACE fonctionne en mode CHARCOUNT NATURAL . La position de début et la valeur de longueur sont mesurées en caractères plutôt qu'en octets ou en double octets. Par exemple, si la chaîne source est une chaîne UTF-8 avec la valeur'ábç12', avec le mode CHARCOUNT NATURAL , la position de début 3 fait référence à'ç'car il s'agit du troisième caractère de la chaîne.
- Indiquez *STDCHARSIZE pour indiquer que %REPLACE fonctionne en mode CHARCOUNT STDCHARSIZE . Dans l'exemple précédent, avec le mode CHARCOUNT STDCHARSIZE , la position de début 3 fait référence à'b'car il s'agit du troisième octet de la chaîne. Les caractères'á'et'ç'sont des caractères à 2 octets.
La valeur renvoyée est de longueur variable si la chaîne source ou la chaîne de remplacement sont de longueur variable, ou si la position de début ou la longueur de la source à remplacer sont des variables, ou si le mode CHARCOUNT NATURAL est activé. Sinon, le résultat est une longueur fixe.
Pour plus d'informations, voir String Operations ou Built-in Functions.
*..1....+....2....+....3....+....4....+....5....+....6....+....7...+....
D*Name++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++
D var1 S 30A INZ('Windsor') VARYING
D var2 S 30A INZ('Ontario') VARYING
D var3 S 30A INZ('Canada') VARYING
D fixed1 S 15A INZ('California')
D date S D INZ(D'1997-02-03')
D result S 100A VARYING
/FREE
result = var1 + ', ' + 'ON';
// result = 'Windsor, ON'
// %REPLACE with 2 parameters to replace text at begining of string:
result = %replace ('Toronto': result);
// result = 'Toronto, ON'
// %REPLACE with 3 parameters to replace text at specified position:
result = %replace (var3: result: %scan(',': result) + 2);
// result = 'Toronto, Canada'
// %REPLACE with 4 parameters to insert text:
result = %replace (', ' + var2: result: %scan (',': result): 0);
// result = 'Toronto, Ontario, Canada'
// %REPLACE with 4 parameters to replace strings with different length
result = %replace ('Scarborough': result:
1: %scan (',': result) - 1);
// result = 'Scarborough, Ontario, Canada'
// %REPLACE with 4 parameters to delete text:
result = %replace ('': result: 1: %scan (',': result) + 1);
// result = 'Ontario, Canada'
// %REPLACE with 4 parameters to add text to the end of the string:
result = %replace (', ' + %char(date): result:
%len (result) + 1: 0);
// result = 'Ontario, Canada, 1997-02-03'
// %REPLACE with 3 parameters to replace fixed-length text at
// specified position: (fixed1 has fixed-length of 15 chars)
result = %replace (fixed1: result: %scan (',': result) + 2);
// result = 'Ontario, California -03'
// %REPLACE with 4 parameters to prefix text at beginning:
result = %replace ('Somewhere else: ': result: 1: 0);
// result = 'Somewhere else: Ontario, California -03'
/END-FREE