1. ASSIGNステートメント
代入ステートメントは、式を計算し、その結果を複数のターゲット変数に割り当てます。このとき、ターゲット変数または疑似変数の属性がソースの属性と異なる場合があるので、データ変換が必要になる場合があります。
| 項目 | 説明 |
|---|---|
reference |
ターゲット変数または疑似変数を記述します。 |
expression |
ソースの式です。 |
BY NAME |
構造体割り当てに使用されるオプションです。詳細については、割り当ての実行を参照してください。 |
複合代入ステートメント
複合代入ステートメントは、複合代入演算子を使用して割り当てを行います。
| 項目 | 説明 |
|---|---|
reference |
ターゲット変数または疑似変数を記述します。 |
compound operator |
割り当てが行われる前に、ソースとターゲットに適用する演算子を記述します。 複合代入ステートメントに使用可能な複合代入演算子は以下のとおりです。
|
expression |
ソースの式です。 |
以下は、複合代入ステートメントの実行例です。
X += 5; ==> X = X + 5; X *= Y - 1; ==> X = X * (Y - 1);
ターゲット変数
ターゲット変数は、要素変数、配列変数、構造体変数または疑似変数にすることができます。
-
配列ターゲット
-
ターゲットは、スカラーまたは構造体の配列である必要があります。ソースは、スカラー式であるか、そのターゲットと同じ次元数と境界を持つ式でなければなりません。
-
-
構造体ターゲット
-
BY NAMEが記述されている場合、各ターゲットは構造体である必要があり、ソースも構造体でなければなりません。
-
BY NAMEが記述されていない場合、各ターゲットは構造体であり、ソースはスカラーまたはターゲットと同じ構造の構造体でなければなりません。
-
BY NAMEが記述されていない場合、ソースをNULL文字列("")にすると、以下のように処理されます。
-
すべてのターゲットは、'00’Xで埋められます。
-
すべての数値ターゲットは0に設定されます。
-
すべての文字およびグラフィック・ターゲットは空白で埋められます。
-
-
割り当ての実行
-
配列割り当て
-
すべての配列演算子(ソースとターゲット)は、同じ次元数と境界を持つ必要があります。
-
配列の割り当ては、以下のようにループに展開されます。
DO I1 = LBOUND( target-variable, 1 ) to HBOUND( target-variable, 1 ); DO I2 = LBOUND( target-variable, 2 ) to HBOUND( target-variable, 2 ); ... DO IN = LBOUND( target-variable, N ) to HBOUND( target-variable, N ); generated element assignment ; END;
-
Nは、ターゲットの次元数です。生成された代入ステートメントでは、I1からINを添え字として使用します。ソースがスカラーである場合は、添え字は適用されません。
-
-
構造体割り当て
-
BY NAMEが記述されてない場合、以下のように処理されます。
-
すべての演算子は配列であってはならず、同じ構造を持つ構造体である必要があります。メンバーとして配列を含むことはできます。
-
それぞれのメンバー別に割り当てで拡張します。メンバーがn個であれば、n個の割り当てが実行されます。
-
メンバー割り当てが、再び集合割り当てである場合は、拡張されて処理されます。
-
-
BY NAMEが記述されている場合、以下のように処理されます。
-
ターゲット構造体の最初から、メンバー名と同じ名前をソース・メンバーから検索します。このときメンバーは、構造体のすぐ下のレベル(チャイルド)のみを探します。チャイルドのチャイルドは検索しません。
-
見つからなかった場合は、2番目のメンバー、3番目のメンバーなど、見つかるまで繰り返します。
-
見つかったメンバーが構造体または構造体の配列の割り当てである場合は、BY NAMEオプションが付けられます。
-
見つかったメンバーがスカラーまたはスカラーの配列の場合は、エレメント割り当てを実行します。
-
他のメンバーに上記の操作を同様に適用します。
-
-
以下は、BY NAMEを使用した構造体割り当ての例です。
DCL 1 ONE, DCL 1 TWO, DCL 1 THREE 2 PART1, 2 PART1, 2 PART1, 3 RED, 3 BLUE, 3 RED, 3 ORANGE, 3 GREEN, 3 BLUE, 2 PART2, 3 RED, 3 BROWN, 3 YELLOW, 2 PART2, 2 PART2, 3 BLUE, 3 BROWN, 3 YELLOW, 3 GREEN; 3 YELLOW; 3 GREEN;
-