EVAL-CORR (対応するサブフィールドの代入)
自由形式構文 |
EVAL-CORR{(HMR)} ターゲット = ソース; |
コード |
演算項目 1 |
拡張演算項目 2 |
EVAL-CORR |
|
ターゲット = ソース |
EVAL-CORR 命令は、ソースのデータ構造の対応するサブフィールドからターゲットのデータ構造のサブフィールドにデータおよびヌル標識を代入します。
代入されるサブフィールドは、両方のデータ構造に同じ名前および互換データ・タイプがあるサブフィールドです。
例えば、データ構造 DS1 に文字サブフィールド A、B、および C があり、データ構造 DS2 に文字サブフィールド B、C、および D がある場合、ステートメント
EVAL-CORR DS1 = DS2
は、サブフィールド DS2.B および DS2.C から DS1.B および DS1.C にデータを代入します。
EVAL-CORR 命令が反映されたターゲットのデータ構造内のヌル対応サブフィールドでは、ソースのデータ構造のサブフィールドのヌル標識からヌル標識が設定されるか、またはソースのサブフィールドがヌルに非対応である場合は *OFF に設定されます。
命令コード拡張 H が指定された場合、すべての数値代入に対して四捨五入
機能が適用されます。
EVAL-CORR の拡張は、自由形式演算にのみ指定できます。
命令コード拡張 M または R が指定された場合、ソースまたはターゲットの式の一部として指定された任意のプロシージャー呼び出しの引数に適用されます。
EVAL-CORR の拡張は、自由形式演算にのみ指定できます。
コンパイラー・リストの EVAL-CORR 要約セクション が以下の判別に使用できます。
- どのサブフィールドが選択され、EVAL-CORR 命令が反映されるか
- 選択されないサブフィールドの場合は、そのサブフィールドが選択されなかった理由
- 選択されたサブフィールドの場合は、ディメンションの違いやサブフィールドのヌル対応など、そのサブフィールドについての追加情報。
EVAL-CORR 要約セクションについて詳しくは、WebSphere Development Studio: ILE RPG プログラマーの手引きを参照してください。
EVAL-CORR 命令を使用する場合は、次のことに留意してください。
- 命令コード EVAL-CORR は、自由形式演算または固定形式演算のいずれかでコーディングされます。
固定形式演算でコーディングする場合、代入式は拡張演算項目 2 記入項目でコ
ーディングされ、演算項目 1 記入項目はブランクのままになります。
- ソースおよびターゲットのオペランドは、LIKEDS または LIKEREC で定義されたデータ構造サブフィールドも含め、両方ともデータ構造変数にする必要があります。
- オペランドには、修飾または非修飾のデータ構造を使用できます。
ただし、命令を正常に終了するには、少なくとも 1 つのオペランドは修飾データ構造にする必要があります。
そうしないと、2 つのデータ構造が同じ名前のサブフィールドを持つことができません。
- 代入に関連するサブフィールドは、両方のデータ構造に同じ名前があり、EVAL を使用した代入と互換性があるデータ・タイプのサブフィールドです。
- サブフィールド名を比較して対応するサブフィールドを検出する場合、使用される名前は内部プログラム名です。
その内部プログラム名は、外部記述ファイルまたはデータ構造からのフィールドの場合、外部名と異なることがあります。
外部で定義されたフィールドで名前変更または接頭部が付けられた場合、使用される名前は、名前変更または接頭部が付けられた後の名前です。
- 名前で照応するソースおよびターゲットのサブフィールドで、両方のデータ構造が LIKEDS または LIKEREC で定義されている場合、代入されるサブフィールドは、サブフィールド・データ構造の対応するサブフィールドです。
ソースおよびターゲットの 2 つのサブフィールドに同じ名前があっても、一方は LIKEDS または LIKEREC で定義されたデータ構造であるが、もう一方はデータ構造ではない場合、そのサブフィールドは EVAL-CORR 命令では代入されません。
- ソース・サブフィールドからターゲット・サブフィールドへのデータの代入は、命令コード EVAL と同じ規則に従います。
例えば、文字値の長さが等しくない場合は、切り捨てされるか、またはブランクが埋め込まれて、左寄せで代入されます。
- データは、サブフィールドごとに、ソース・データ構造内のサブフィールドの順番で代入されます。
開始/終了位置の重複、または OVERLAY キーワードのいずれかの理由により、ターゲット・データ構造でサブフィールドが重複している場合は、先に移動したデータが後の代入により上書きされます。
- ソースおよびターゲットのデータ構造、または対応するソースおよび
ターゲットのサブフィールドの両方のデータ構造が LIKEDS または LIKEREC と同じ方法で定義されている場合、つまり両方のデータ構造が同一のデータ構造であるかのように定義されている場合、コンパイラーは代入を最適化し、個々の一連のサブフィールドの代入ではなく、データ構造全体を代入します。
- ソースまたはターゲットのオペランドのいずれかが複数回繰り返しデータ構造である場合、現在のオカレンスが使用されます。
- 配列を使用する場合は、以下が適用されます。
- ソース・オペランドが索引なし配列データ構造である場合、ターゲット・データ構造も配列データ構造である必要があります。
- ターゲット・オペランドが索引なし配列データ構造である場合、配列の結果がある EVAL と同じ規則に従い、配列データ構造の各要素で命令が処理されます。
%SUBARR を使用して、ソースまたはターゲットのデータ構造配列のいずれかで使用される要素の数を制限できます。
- 一方のサブフィールドが配列である場合、もう一方のサブフィールドも配列である必要があります。
一方の配列サブフィールドのディメンションがもう一方のディメンションより小さい場合は、小さい方の数の配列の要素のみが代入されます。
ターゲット・サブフィールドの要素が多い場合、EVAL-CORR 命令では余計な要素が変更されません。
- ヌルに対応したサブフィールドの場合は、以下が適用されます。
- EVAL-CORR により、データ構造サブフィールドではないヌルに対応したサブフィールドのヌル標識の代入が自動的に処理されます。
- ソースおよびターゲットのサブフィールドの両方がヌル対応である場合、ソース・サブフィールドのヌル標識がターゲット・サブフィールドのヌル標識にコピーされます。
- ターゲット・サブフィールドがヌル対応であり、ソース・サブフィールドがヌルに非対応である場合、ターゲット・サブフィールドのヌル標識が *OFF に設定されます。
- ソース・サブフィールドがヌル対応であり、ターゲット・サブフィールドがヌルに非対応である場合、ソース・サブフィールドのヌル標識は無視されます。
- EVAL-CORR 命令は、スカラーおよび配列のサブフィールドに対してのみヌル標識を設定します。
ヌル対応サブフィールドがデータ構造である場合、EVAL-CORR 命令ではそのヌル標識を設定しません。
同様に、ターゲット・データ構造そのものがヌル対応である場合、EVAL-CORR 命令ではそのヌル標識を設定しません。
- サブフィールドがデータ構造であり、そのデータ構造そのものにヌル標識が代入された場合、EVAL-CORR 命令はそのヌル標識に影響を及ぼしません。
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.