INSERT 関数

構文

INSERT (dynamic.array, field#, value#, subvalue#, expression)
INSERT (dynamic.array, field# [ ,value# [ ,subvalue#] ] ; expression)

説明

INSERT 関数は、指定された動的な配列に新しいフィールド、値、またはサブ値が挿入された動的な配列を返します。

dynamic.array は、動的な配列として評価される式です。

field#value#、および subvalue# は、挿入される新しいエレメントのタイプと位置を指定し、区切り文字式と呼ばれます。 value#subvalue# はオプションですが、どちらかを省略するときは第 2 の構文で示すようにセミコロン (;) を expression の前に置く必要があります。

expression は、挿入される新しいエレメントの値を指定します。

INSERT 関数は、指定される区切り文字式に応じて 3 つの結果がもたらされます。

ケース 1:
value#subvalue# の両方を省略するか両方が 0 なら、INSERT は expression の値を持つ新しいフィールドを動的な配列に挿入します。
  • field# が正の値で、dynamic.array にあるフィールドの個数以下である場合、フィールド・マークの前にある expression の値は、field# で指定されているフィールドの前に挿入されます。
  • field# の値が -1 である場合は、expression の値の前にあるフィールド・マークが、dynamic.array の最後のフィールドに追加されます。
  • field# が正の値で、dynamic.array にあるフィールドの個数を超えている場合は、expression の値の前にある適切な個数のフィールド・マークが追加されて、field# の値が新しいフィールドの個数になるようにされます。
ケース 2:
value# が 0 以外で subvalue# が省略されるか 0 なら、INSERT は expression の値を持つ新しい数値を動的な配列に挿入します。
  • value# が正の値で、フィールドにある値以下の場合は、値マークの前にある expression の値が、value# で指定されている値の前に挿入されます。
  • value# が -1 の場合、expression の値の前にある値マークがフィールドの最後の値に付加されます。
  • value# が正の値で、フィールドにある値の個数よりも大きい場合、expression の値の前にある適切な個数の値マークが指定されたフィールドの最後の値に付加されて、フィールドの新しい値の個数が value# と等しくなるようにされます。
ケース 3:
field#value#、および subvalue# をすべて指定すると、INSERT は expression の値を持つ新しいサブ値を動的な配列に挿入します。
  • subvalue# が正の値で、値にあるサブ値の個数以下の場合、サブ値マークの前にある expression の値が、subvalue# で指定されているサブ値の前に挿入されます。
  • subvalue# が -1 の場合、expression の前にあるサブ値マークが、値の中の最後のサブ値に付加されます。
  • subvalue# が正の値で、値にあるサブ値の個数よりも大きい場合、expression の前にある適切な個数のサブ値マークが、指定された値の最後のサブ値に付加されて、値の中の新しいサブ値の個数が subvalue# と等しくなるようにされます。

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

expression が NULL 値として評価される場合、NULL が dynamic.array に挿入されます。 dynamic.array は、NULL 値として評価されても、挿入によって変更なしのままです。 区切り文字式が NULL 値なら、INSERT 関数は正しく実行されずプログラムはランタイム・エラー・メッセージを出力して終了します。

INFORMATION および IN2 フレーバー

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

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

最初の例では、最初のフィールドの前に文字 # を挿入して、Q を #FFF1V2V3S6F9F5F7V に設定します。

R=@FM:@FM:1:@VM:2:@VM:3:@SM:6:@FM:9:@FM:5:@FM:7:@VM:3
Q=INSERT(R,1,0,0,"#")

次の例では、フィールド 3 の 3 番目の値の前に # を挿入して、値 Q を FF1V2V#V3S6F9F5F7V3 に設定します。

Q=INSERT(R,3,3;"#")

次の例では、# が続く値マークをフィールドの最後の値の後に挿入して、Q を FF1V2V3S6F9V#F5F7V3 に設定します。

Q=INSERT(R,4,-1,0,"#")

次の例では、フィールド 3 の 2 番目の値の 2 番目のサブ値の前に # を挿入して、Q を FF1V2S#V3S6F9F5F7V3 に設定します。

Q=INSERT(R,3,2,2;"#")