%REPLACE (文字ストリングの置換)

%REPLACE(replacement string: source string{:start position {:source
length to replace}})

%REPLACE は、開始位置から開始し、指定された文字数を置換して、 置換ストリングをソース・ストリングに挿入することによって 生成される文字ストリングを戻します。

最初と 2 番目のパラメーターのタイプは文字、図形、また は UCS-2 でなければなりません。これらのパラメーターは 固定長または可変長のいずれの形式でもかまいません。2 番目のパラメーターは、1 番目のパラメーターと同じタイプでなければなりません。

3 番目のパラメーターは置換ストリングの開始位置を、文字数で示します。 開始位置を指定しない場合、開始位置はソース・ストリングの先頭になります。 この値の範囲は、1 から ソース・ストリングの現在の長さ + 1 までです。

4 番目のパラメーターは、置換するソース・ストリング内の文字数を示します。 ゼロを指定した場合、置換ストリングは、指定した開始位置の前に挿入されます。 このパラメーターを指定しない場合、置換される文字数は、置換ストリングの長さと 同じになります。 このパラメーターの値は、ゼロ以上で、ソース・ストリングの 現在の長さ以下でなければなりません。

開始位置および長さは、小数点以下の桁数のない任意の数値または数値式とする ことができます。

ソース・ストリングまたは置換ストリングが可変長である場合、あるいは開始位置 または置換するソースの長さが変数である場合、戻り値は可変長になります。 他の場合、結果は固定長になります。

詳細については、ストリング命令または 組み込み関数を参照してください。

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