MOVE ステートメントは、データをあるストレージ域から別の 1 つまたは 複数のストレージ域に転送します。
フォーマット 1: MOVE ステートメント .------. V | >>-MOVE--+-ID-1---+--TO----ID-2-+------------------------------>< '-リテラル-1-'
フォーマット 2: CORRESPONDING 句を含む MOVE ステートメント >>-MOVE--+-CORRESPONDING-+--ID-1--TO--ID-2--------------------->< '-CORR----------'
CORR は、CORRESPONDING の省略形で、意味は同じです。
フォーマット 1 を指定する場合:
フォーマット 2 を指定する場合:
以下のタイプの USAGE で記述されたデータ項目は、MOVE ステートメントに指定できません。
USAGE INDEX、POINTER、FUNCTION-POINTER、PROCEDURE-POINTER、または OBJECT REFERENCE で定義されたデータ項目は、MOVE CORRESPONDING ステートメント内で参照される英数字グループ項目に含めることができます。ただし、これらのデ ータ項目からデータが移動されることはありません。
送り出し領域または受け取り領域の長さの評価は、OCCURS 節の DEPENDING ON 句の影響を受けます (OCCURS 節を参照)。
送り出しフィールド (ID-1) が参照による変更、添え字付き、もしくは英数字、または 国別関数 ID の場合、参照修飾子、添え字、または関数は、データが受け取りオペランドの 先頭に移動される直前に一度だけ評価されます。
受け取りフィールド (ID-2) に関連する長さの計算、添え字付け、または参照による修正は、 データがその受け取りフィールドに移動される直前に評価されます。
例えば、
MOVE A(B) TO B, C(B).
のステートメントは、次のステートメントと同じ結果になります。
MOVE A(B) TO TEMP. MOVE TEMP TO B. MOVE TEMP TO C(B).
ここで TEMP は、中間結果項目として定義されています。添え字 B は、 最初の移動が行われた時と C(B) の移動が最後に実行された時とでは、 値が変わっています。
中間結果の詳細については、「Enterprise COBOL プログラミング・ガイド」を参照してください。
MOVE ステートメントを実行した後も、送り出しフィールドには、実行前と同じデータが入っています。
使用上の注意: MOVE ステートメント内にオーバーラップ・オペランドがあると、 予測できない結果が生じる可能性があります。
基本移動とは、受け取り項目が基本データ項目であり、送り出し項目が基本データ項目またはリテラルである移動のことです。
有効なオペランドは、以下のいずれかのカテゴリーに属します。
データをある 1 つの形式の内部表現のものから別の形式のものに変換する必要がある場合、 その変換は、移動中に受け取り項目によって指定された編集またはそれに合わせて暗黙の編集解除を行います。 英数字文字へ、または英数字文字からの変換で使用されるコード・ページは、ソース・コードのコンパイル時に CODEPAGE コンパイラー・オプションに対して有効なものです。
次の規則は、有効な基本移動がどのように実行されるかを示します。 受け取りフィールドは、以下のとおりです。
英字:
英数字または英数字編集:
DBCS:
外部浮動小数点:
内部浮動小数点:
国別 または 国別編集:
数字または数字編集:
使用上の注意:
以下の表は、それぞれのカテゴリーごとに有効な基本移動と無効な基本移動を 示したものです。この表では、「はい」と「いいえ」は次のような意味です。
| 英字 | 英数字 | 英数字編集 | 数字 | 数字編集 | 外部浮動小数点 | 内部浮動小数点 | DBCS1 | 国別、国別編集 | |
|---|---|---|---|---|---|---|---|---|---|
| 英字および SPACE 送り出し項目 | はい | はい | はい | いいえ | いいえ | いいえ | いいえ | いいえ | はい |
| 英数字送り出し項目2 | はい | はい | はい | はい3 | はい3 | はい8 | はい8 | いいえ | はい |
| 英数字編集送り出し項目 | はい | はい | はい | いいえ | いいえ | いいえ | いいえ | いいえ | はい |
| 数字整数と ZERO 送り出し項目4 | いいえ | はい | はい | はい | はい | はい | はい | いいえ | はい |
| 数字非整数送り出し項目5 | いいえ | いいえ | いいえ | はい | はい | はい | はい | いいえ | いいえ |
| 数字編集送り出し項目 | いいえ | はい | はい | はい | はい | はい | はい | いいえ | はい |
| 浮動小数点送り出し項目6 | いいえ | いいえ | いいえ | はい | はい | はい | はい | いいえ | いいえ |
| DBCS 送り出し項目7 | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ | はい | はい |
| 国別送り出し項目9 | いいえ | いいえ | いいえ | はい | はい | はい | はい | いいえ | はい |
| 国別編集送り出し項目 | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ | はい |
|
|||||||||
送り出し項目を年末尾型日付フィールドとして指定した場合は、 受け取りフィールドもすべて年末尾型日付フィールドにし、 その日付フォーマットを送り出し項目と同じにしなければなりません。また、年末尾型日付フィールドを受け取り項目として指定した場合は、 送り出し項目を非日付データまたは年末尾型日付フィールドのいずれかにし、 その日付フォーマットを受け取り項目と同じにしなければなりません。そのようにするなら、どちらの場合も移動が実行され、 項目がすべて非日付データになっている場合と同じ結果になります。
表 2 は、非年末尾型日付フィールドが関係する移動の動作を示しています。送り出し項目が日付フィールドである場合、受け取りフィールドは互換日付フィールドでなければなりません。送り出し項目と受け取り項目の両方が日付フィールドである場合は、 それらに互換性がなければなりません。すなわち、 ウィンドウ表示西暦年でも拡張西暦年でも可能な年部分を除いて、同じ日付フォーマットにする必要があります。
この表では、移動を記述するのに以下の用語を使用しています。
| 非日付データ受け取り項目 | ウィンドウ表示日付フィールド受け取り項目 | 拡張日付フィールド受け取り項目 | |
| 非日付データ送り出し項目 | 通常 | 通常 | 通常 |
| ウィンドウ表示日付フィールド送り出し項目 | 無効 | 通常 | 拡張 |
| 拡張日付フィールド送り出し項目 | 無効 | 通常1 | 通常 |
|
|||
あるファイルに対して OPEN ステートメントが正常に実行されると、そのファイルのレコード域が使用可能になります。ファイルに関連したレコード記述項目との間でデータをやり取りできるのは、そのファイルがオープン状態になっている場合のみです。暗黙的または明示的な CLOSE ステートメントを実行すると、ファイルがオープン状態から除去され、レコード域が使用不可になります。
グループ移動とは、送り出し項目または受け取り項目、あるいはその両方が英数字グループ項目であるような移動のことです。グループ移動には以下のものがあります。
グループ移動は、ある内部表現の形式から別の形式へのデータ変換を行わないことを除けば、英数字から英数字への基本移動と同じように扱われます。グループ移動では、 送り出し領域または受け取り領域に含まれている個々の基本項目には関係なく、 受け取り領域にデータが満たされます。 ただし、OCCURS 節で注記されている場合を除きます (OCCURS 節を参照してください。)