%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.

Le troisième, quatrième ou cinquième paramètre peut être *NATURAL ou *STDCHARSIZE pour remplacer le mode CHARCOUNT en cours pour l'instruction. Si ce paramètre est spécifié, il doit s'agir du dernier paramètre.
  • 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.
Voir Traitement des données de chaîne par taille naturelle de chaque caractère et Type de données de caractère.
Remarque: %REPLACE peut également fonctionner en mode CHARCOUNT NATURAL en raison de la directive de compilation /CHARCOUNT ou du mot clé de contrôle CHARCOUNT .

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.

Figure 1. Exemple %REPLACE
 *..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