REPLACE 関数

構文

REPLACE (expression, field#, value#, subvalue# { , | ; } replacement)
REPLACE (expression [ ,field# [ ,value#] ] ; replacement)
variable < field# [ ,value# [ ,subvalue#] ] >

説明

REPLACE 関数を使用すると、フィールド、値、またはサブ値を新しいデータで置換した動的な配列のコピーを返すことができます。

expression には、動的配列を指定します。

field#value#、および subvalue# には、置換するエレメントのタイプと位置を指定します。これらの式は、区切り文字式と呼ばれます。

replacement には、与えられるエレメントの値を指定します。

value#subvalue# はオプションです。しかし、subvalue# または value#subvalue# のどちらかが省略された場合、第 2 の構文で示すように、セミコロン ( ; ) を replacement の前に置く必要があります。

不等号括弧を使用して、動的な配列のデータを置換することもできます。 代入演算子の左側の不等号括弧が、代入演算子に従って、動的配列内の指定されたデータを変更します。 代入文の右側の不等号括弧は、EXTRACT 関数が実行されることを示します (例については、EXTRACT 関数を参照してください)。

variable には、変更されるデータを含む動的配列を指定します。

区切り文字式の指定方法とその結果の違いを、ケース 1、ケース 2、およびケース 3 に分けて説明します。

ケース 1:
value#subvalue# の両方が省略されるか、0 が指定された場合。フィールドは、replacement の値によって置換されます。
  • field# が正の値で、動的配列内のフィールド数以下である場合、field# で指定されたフィールドが、replacement の値で置換されます。
  • field# が負の値である場合、フィールド・マークと replacement の値を、動的配列の最後のフィールドに付加することによって、新規フィールドが作成されます。
  • field# が正の値で、動的配列内のフィールド数より大きい場合、replacement の値の前に適切な数のフィールド・マークを付加することによって、新規フィールドが作成されます。したがって、field# の値が、新規フィールド数になります。
ケース 2:
subvalue# が省略されるか、0 が指定されて、value# がゼロ以外の場合。指定したフィールド内の値が、replacement の値で置換されます。
  • value# が正の値で、フィールド内の値の数以下である場合、value# で指定された値が、replacement の値で置換されます。
  • value# が負の値である場合、値マークと replacement の値を、フィールドの最後の値に付加することによって、新規値が作成されます。
  • value# が正の値で、フィールド内の値の数より大きい場合、replacement の値の前に適切な数の値マークを、フィールド内の最後の値に付加することによって、値が作成されます。したがって、value# の値が、指定したフィールド内の新規値の数になります。
ケース 3:
field#value#、および subvalue# がすべて指定されるかゼロ以外の場合。指定したフィールドの指定値内のサブ値が、replacement の値で置換されます。
  • subvalue# が正の値で、値内の従属値の数以下である場合、subvalue# で指定した従属値が、replacement の値で置換されます。
  • subvalue# が負の値である場合、サブ値マークと replacement の従属値を、値内の最後の従属値に付加することによって、新規従属値が作成されます。
  • subvalue# が正の値で、値内の従属値の数より大きい場合、replacement の値が続くサブ値マークの適切な数を、値内の最後の従属値に付加することによって、新規従属値が作成されます。したがって、式 subvalue# の値が、指定した値内の新規従属値の数になります。

IDEAL、PICK、PIOPEN、および REALITY フレーバー・アカウントでは、replacement が空白ストリングである場合、動的配列、フィールド、または値の末尾に新規エレメントを付加しようとしても、動的配列、フィールド、値は変更されないままで、追加の区切り文字も付加されません。$OPTIONS 文の EXTRA.DELIM オプションを使用すると、REPLACE 関数は動的な配列、フィールド、または値に区切り文字を付加します。

replacement が NULL 値である場合、保存表記 NULL (CHAR(128)) が dynamic.array に挿入されます。dynamic.array が NULL 値として評価される場合、置換によって変更なしのままとなります。REPLACE ステートメントで、値が NULL 値であるエレメントの従属エレメントが参照される場合、動的配列は変更されません。

INFORMATION および IN2 フレーバー

INFORMATION および IN2 フレーバー・アカウントでは、expression が空白ストリングで、新しいエレメントが動的な配列の末尾、フィールドの末尾、または値の末尾に追加された場合には、動的な配列、フィールド、または値に区切り文字が付加されます。 $OPTIONS ステートメントの -EXTRA.DELIM オプションを使用すると、REPLACE 関数は IDEAL、PICK、および REALITY フレーバー・アカウントの場合と同じように動作します。

次の例では、フィールド・マークが F、値マークが V、サブ値マークが S でそれぞれ示されます。

最初の例では、フィールド 1 を # に置換して、Q を #FAVBVDSEFDFFF に設定します。

R=@FM:"A":@VM:"B":@VM:"D":@SM:"E":@FM:"D":@FM:@FM:"F"
Q=R
Q=REPLACE(Q,1;"#")

次の例では、フィールド 2 の 3 番目の値の最初のサブ値を # に置換して、Q を FAVBV#SEFDFFF に設定します。

Q=R
Q<2,3,1>="#"

次の例では、フィールド 4 を # に置換して、Q を FAVBVDSEFDF#FF に設定します。

Q=R
Q=REPLACE(Q,4,0,0;"#")

次の例では、フィールド 1 から 4 の最初の値を # と置換して、Q を #F#VBVDSEF#F#FF に設定します。

Q=R
FOR X=1 TO 4
Q=REPLACE(Q,X,1,0;"#")
NEXT

次の例では、値マークと # をフィールド 2 の最後の値に付加して、Q を FAVBVDSEV#FDFFF に設定します。

Q=R
Q=REPLACE(Q,2,-1;"#")