Rational Developer for System z
COBOL for Windows バージョン 7.5 言語解説書


MOVE ステートメント

MOVE ステートメントは、データをあるストレージ域から別の 1 つまたは複数のストレージ域に転送します。

フォーマット 1
構文図を読む構文図をスキップする                             .------.  
                             V      |  
>>-MOVE--+-ID-1-------+--TO----ID-2-+--------------------------><
         '-リテラル-1-'                
 

フォーマット 2
構文図を読む構文図をスキップする>>-MOVE--+-CORRESPONDING-+--ID-1--TO--ID-2---------------------><
         '-CORR----------'                  
 

CORR は、CORRESPONDING の省略形で、意味は同じです。

ID-1リテラル-1
送り出し領域。
ID-2
受け取り領域。ID-2 は組み込み関数を参照してはなりません。

フォーマット 1 を指定する場合:

フォーマット 2 を指定する場合:

以下の種類の使用法を指定して記述されたデータ項目は、MOVE ステートメントに指定できません。

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) の移動が最後に実行された時とでは、 値が変わっています。

中間結果の詳細については、「COBOL for Windows プログラミング・ガイド」を参照してください。

MOVE ステートメントを実行した後も、送り出しフィールドには、実行前と同じデータが入っています。

注: MOVE ステートメント内にオーバーラップするオペランドがあると、 予測できない結果が生じる可能性があります。

基本移動

基本移動とは、受け取り項目が基本データ項目であり、送り出し項目が基本データ項目またはリテラルである移動のことです。

有効なオペランドは、以下のいずれかのカテゴリーに属します。

基本移動の規則

データをある 1 つの形式の内部表現のものから別の形式のものに変換する必要がある場合、その変換は、移動中に受け取り項目によって指定された編集またはそれに合わせて暗黙の編集解除を行います。 英数字文字へ、または英数字文字からの変換で 使用されるコード・ページは、実行時に特定のデータ項目に適用可能なコード・ページです。

次の規則は、有効な基本移動がどのように実行されるかを示します。受け取りフィールドは、以下のとおりです。

英字:

英数字または英数字編集:

DBCS:

外部浮動小数点:

内部浮動小数点:

国別 または国別編集:

数字または数字編集:

注:

  1. 受け取り項目のカテゴリーが英数字、英数字編集、数字編集、国別、または国別編集のときに、送り出しフィールドが数字の場合は、ピクチャー記号 P を指定して記述された送り出し項目内のすべての桁位置はゼロの値を持つとみなされます。 それぞれの P は、送り出し項目サイズの計算に入れられます。
  2. 受け取り項目が数字で、送り出しフィールドが英数字リテラル、国別リテラル、または ALL リテラルの場合は、そのリテラルのすべての文字は数字でなければなりません。

有効な基本移動と無効な基本移動

以下の表は、それぞれのカテゴリーごとに有効な基本移動と無効な基本移動を示したものです。この表では、「はい」と「いいえ」は次のような意味です。

表 46. 有効な基本移動と無効な基本移動
  英字 英数字 英数字編集 数字 数字編集 外部浮動小数点 内部浮動小数点 DBCS1 国別、国別編集
英字および SPACE 送り出し項目 はい はい はい いいえ いいえ いいえ いいえ いいえ はい
英数字 送り出し項目2 はい はい はい はい3 はい3 はい8 はい8 いいえ はい
英数字編集 送り出し項目 はい はい はい いいえ いいえ いいえ いいえ いいえ はい
数字整数と ZERO 送り出し項目4 いいえ はい はい はい はい はい はい いいえ はい
数字非整数 送り出し項目5 いいえ いいえ いいえ はい はい はい はい いいえ いいえ
数字編集 送り出し項目 いいえ はい はい はい はい はい はい いいえ はい
浮動小数点 送り出し項目6 いいえ いいえ いいえ はい はい はい はい いいえ いいえ
DBCS 送り出し項目7 いいえ いいえ いいえ いいえ いいえ いいえ いいえ はい はい
国別送り出し項目9 いいえ いいえ いいえ はい はい はい はい いいえ はい
国別編集送り出し項目 いいえ いいえ いいえ いいえ いいえ いいえ いいえ いいえ はい
  1. DBCS データ項目を含む。
  2. 英数字リテラルを含む。
  3. 表意定数と英数字リテラルは、数字だけで構成しなければならず、数字整数フィールドとして扱われる。
  4. 整数の数字リテラルを含む。
  5. 非整数の数字リテラルを含む。
  6. 浮動小数点リテラル、外部浮動小数点データ項目 (USAGE DISPLAY または USAGE NATIONAL)、 および内部浮動小数点データ項目 (USAGE COMP-1 または USAGE COMP-2) を含む。
  7. DBCS データ項目、DBCS リテラル、および表意定数 SPACE を含む。
  8. 表意定数と英数字リテラルは、数字だけで構成しなければならず、数字整数フィールドとして扱われる。リテラル ALL は、送り出し項目として使用することはできない。
  9. 国別データ項目、国別リテラル、国別関数、および表意定数 ZERO、SPACE、QUOTE、および ALL 国別リテラルを含む。

日付フィールドが関係する移動

送り出し項目を年末尾型日付フィールドとして指定した場合は、 受け取りフィールドもすべて年末尾型日付フィールドにし、その日付フォーマットを送り出し項目と同じにしなければなりません。 また、年末尾型日付フィールドを受け取り項目として指定した場合は、 送り出し項目を非日付データまたは年末尾型日付フィールドのいずれかにし、その日付フォーマットを受け取り項目と同じにしなければなりません。そのようにするなら、どちらの場合も移動が実行され、項目がすべて非日付データになっている場合と同じ結果になります。

『日付フィールドが関係する移動』(表 47) は、非年末尾型日付フィールドが関係する移動の動作を示しています。送り出し項目が日付フィールドである場合、受け取りフィールドは互換日付フィールドでなければなりません。送り出し項目と受け取り項目の両方が日付フィールドである場合は、 それらに互換性がなければなりません。すなわち、 ウィンドウ化西暦年でも拡張西暦年でも可能な年部分を除いて、同じ日付フォーマットにする必要があります。

この表では、移動を記述するのに以下の用語を使用しています。

通常
送り出し項目と受け取り項目の両方が非日付データであるかのように、 日付感知動作なしで移動が実行されます。
拡張
ウィンドウ化日付フィールドの送り出し項目は、ウィンドウ化日付フィールドのセマンティクスで説明されているように、 最初に拡張形式に変換されたかのように扱われます。
無効
移動は許可されません。

表 47. 日付フィールドが関係する移動

非日付データ受け取り項目 ウィンドウ化日付フィールド受け取り項目 拡張日付フィールド 受け取り項目
非日付データ送り出し項目 通常 通常 通常
ウィンドウ化日付フィールド 送り出し項目 無効 通常 拡張
拡張日付フィールド送り出し項目 無効 通常1 通常
  1. 拡張日付フィールドからウィンドウ化日付フィールドに移動すると、拡張日付フィールドの世紀部分が切り捨てられることになるため、それは実際には「ウィンドウ化」移動になります。移動が英数字の場合は、 受け取りウィンドウ化日付フィールドはそのデータ記述に JUSTIFIED RIGHT を指定した場合と同じ方法で処理されます。これは、 受け取りウィンドウ化日付フィールドがグループ項目 (JUSTIFIED 文節を指定できない) である場合も同様です。

ファイル・レコード域が関係する移動

あるファイルに対して OPEN ステートメントが正常に実行されると、そのファイルのレコード域が使用可能になります。 ファイルに関連したレコード記述項目との間でデータをやり取りできるのは、そのファイルがオープン状態になっている場合のみです。暗黙的または明示的な CLOSE ステートメントを実行すると、ファイルがオープン状態から除去され、レコード域が使用不可になります。

グループ移動

グループ移動とは、送り出し項目または受け取り項目、あるいはその両方が英数字グループ項目であるような移動のことです。 グループ移動には以下のものがあります。

グループ移動は、ある内部表現の形式から別の形式へのデータ変換を行わないことを除けば、英数字から英数字への基本移動と同じように扱われます。グループ移動では、 送り出し領域または受け取り領域に含まれている個々の基本項目には関係なく、受け取り領域にデータが満たされます。ただし、OCCURS 文節で注記されている場合を除きます (OCCURS 文節を参照)。


ご利用条件 | フィードバック

Copyright IBM Corporation 1996, 2008.
このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)