MOVE(転記)文

MOVE(転記)文は、編集規則に従って、データをいくつかのデータ領域に移す。

一般形式

形式 1

形式 2

指令

  1. 予約語リストにフラグを付けたり修正したりするコンパイラ指令に加えて、下記の指令によって、この項に記述した構文または意味が影響を受ける可能性がある。

    • BYTE-MODE-MOVE - 送出し側項目と受取り側項目がその記憶領域を部分的に共有する(つまり、重複部分のある)MOVE文の動作に影響を与える。

    • DBCS (DBSPACE) - 2バイト文字の受取り側項目に埋める空白に使用する文字に影響を与える。

    • DE-EDIT - 数字編集送出し側フィールドの値をそのPICTURE句によって決定するか否かを制御する。

    • TRUNC - 受取り側のバイナリ値のサイズよりも大きい値が送出し側項目に含まれているときに、利用可能な記憶領域またはPICTURE句に基づいて、切捨てを行うかどうかを決定する。

構文規則

すべての形式
  1. 一意名-1および定数は送出し側を表わし、一意名-2は受取り側を表わす。

  2. 指標データ項目、

    オブジェクト参照データ項目、プログラムポインタ・データ項目、

    ポインタ・データ項目、手続きポインタ・データ項目

    入力ポインタ・データ項目、モニターポインタ・データ項目、ミューテックスポインタ・データ項目、セマフォポインタ・データ項目、およびスレッドポインタ・データ項目

    は、MOVE文の作用対象にすることはできない。

  3. 送出し側項目か受取り側項目のどちらか一方が2バイト文字(USAGE DISPLAY-1)である場合には、両方とも2バイト文字でなければならない。表意定数のSPACEは、2バイト文字の送出し側として使用できる。
形式 1
  1. 形式 1では、 送出し側項目か受取り側項目のどちらか一方が2バイト文字(USAGE DISPLAY-1)である場合には、両方とも2バイト文字でなければならない。表意定数のSPACEは、2バイト文字の送出し側として使用できる。

  2. 一意名-1には数字の関数一意名を指定できる。

  3. 一意名-1が、USAGE BINARY-CHAR、USAGE BINARY-SHORT、USAGE BINARY-LONG、またはUSAGE BINARY-DOUBLEを用いて記述されたデータ項目である場合は、一意名-2は数字または数字編集項目であるとする。そうでない場合にデータの移動が有効であるかどうかは、表 14-1 MOVE文のデータ項類の定義に従う。

形式 2
  1. CORRは、CORRESPONDINGの省略形である。

  2. CORRESPONDING指定を書くときは、すべての一意名は集団項目とする。

  3. MOVE CORRESPONDING文中の集団項目内に、以下の項目が含まれていてもよい。しかし、その転記はいっさい行われない。

    ポインタ・データ項目、手続きポインタ・データ項目、

    オブジェクト参照データ項目、プログラムポインタ・データ項目、

    イベントポインタ・データ項目、モニターポインタ・データ項目、ミューテックスポインタ・データ項目、セマフォポインタ・データ項目、およびスレッドポインタ・データ項目

一般規則

すべての形式
  1. 一意名-1が数字の関数一意名であるときは、一意名-2は数字項目か数字編集項目のどちらかでなければならない。

  2. 定数または一意名-1によって指定されるデータが、一意名-2によって指定される各データ項目に指定された順番で転記される。一意名-2に関する規則は、他の受取り側にも適用される。一意名-2が添字付けまたは指標付けされていると、そのデータ項目に転記が行われる直前に添字または指標が評価される。

    一意名-1が部分参照されているか、添字付けされているか、あるいは関数一意名である場合、その部分参照、添字、関数一意名の評価は、受取り側作用対象の最初のデータに転記が行われる直前に、1回だけ行われる。

    下記の文は

     MOVE a(b) TO b, c(b)

    下記の3つの文に相当する。

     MOVE a(b) TO temp MOVE temp TO b MOVE temp TO c(b)

    ここで、temp は中間結果を保持する項目であり、COBOLコンパイラによって用意される。

  3. 送出し側項目も受取り側項目も基本項目であるMOVEを、基本項目転記という。各基本項目は次の項類のどれかに属する。具体的には、数字、英字、英数字、数字編集、英数字編集、

    各国語、各国語編集、

    または浮動小数点数

    のどれかに属する。

    これらの項類はPICTURE句に説明してある。数字定数は、数字の項類に属する。文字定数は、英数字の項類に属する。表意定数のZEROは、数字項目または数字編集項目に転記される場合は数字の項類に属し、それ以外の場合には英数字の項類に属する。表意定数のSPACEは、英数字の項類に属する。その他の表意定数は、すべて英数字の項類に属する。

    これらの項類の間の基本項目転記に関して、下記の規則が適用される。

    1. 表意定数のSPACE、英数字編集、英字のデータ項目を、数字または数字編集のデータ項目に転記してはならない。.

    2. 数字編集のデータ項目を、数字または数字編集のデータ項目に転記してはならない。

      この制限は撤廃された。

    3. 数字定数、表意定数のZERO、数字データ項目、数字編集データ項目を、英数字データ項目に転記してはならない。

    4. 整数でない数字定数または整数でない数字データ項目を、英数字または英数字編集のデータ項目に転記してはならない。

    5. 上記以外の基本項目転記は文法的に正しく、下記の一般規則5に示す規則に従って実行される。

  4. 文法的に正しい基本項目転記が実行されるときには、ある形式の内部表現から別の形式の内部表現へのデータの変換が、必要に応じて行われる。また、受取り側データ項目に指定されている編集

    または暗黙的に示されている逆編集

    も併せて行われる。

    1. 受取り側が英数字編集または英数字のデータ項目である場合、COBOL言語の概念の章の標準桁寄せ規則節に定義されているように、桁寄せと必要な空白の穴埋めが行われる。送出し側の項目の大きさの方が、受取り側の項目の大きさよりも大きい場には、受取り側の項目がいっぱいになった後で、右側の過剰な文字が切り捨てられる。送出し側の項目が符号付きの数字である場合、演算符号は転記されない。演算符号が独立の文字位置を占める(データ部 - ファイルおよびデータ記述の章のSIGN(符号)句節を参照) 場合、演算符号は転記されず、送出し側の項目は実際の大きさよりも1文字小さいものとして扱われる(標準データ形式として)。

    2. 受取り側が数字または数字編集のデータ項目である場合、COBOL言語の概念の章の標準桁寄せ規則節に定義されているように、桁寄せと必要なゼロの穴埋めが行われる。ただし、ゼロを置き換える編集が行われている場合は例外である。

      送出し側の項目の項類が数字編集である場合、その項目の編集されていない値を取り出すために、暗黙の逆編集が行われる。逆編集された値には、符号が付くことがある。次いで、編集されていない値が受取り側の項目に転記される。逆編集の効果は、DE-EDIT指令の影響を受ける。

      受取り側の項目が符号付きの数字である場合、送出し側の符号は受取り側項目に転記される。(データ部 - ファイルおよびデータ記述の章のSIGN(符号)節を参照。) 必要に応じて、符号の表現形式の変換が行われる。送出し側の項目に符号が付いていない場合には、受取り側項目用に正符号が付加される。

      受取り側の項目が符号なしの数字である場合、送出し側の項目の絶対値が受取り側の項目に転記され、符号は付けられない。

      送出し側の項目の項類が英数字である場合、送出し側の項目が符号なしの整数として記述されているように、データが転記される。

      受取り側の項目が数字または数字編集であり送出し側の項目が英数字である場合、送出し側の項目の内容が整数でないと、結果はどうなるかわからない。送出し側の英数字項目が整数でない文字定数である場合は、エラーが報告されて、ゼロがその対象に転記される。(手続き部の章の矛盾するデータ節を参照。)

      送出し側の項目が数字である場合、転記し戻すと数字編集項目に同じ値が現れるように転記操作が行われる(ただし、切捨てが発生した場合は除く)。このデータ項目に編集文字列に適合しないデータが含まれる場合、受取り側にはゼロが転記される。

    3. 受取り側の項目が英字である場合、COBOL言語の概念の章の標準桁寄せ規則節に定義されているように、桁寄せと必要な空白の穴埋めが行われる。送出し側の項目の大きさの方が受取り側の項目の大きさよりも大きい場合には、受取り側の項目がいっぱいになった後で、右側の過剰な文字が切り捨てられる。

    4. 受取り側の項目が浮動小数点数である場合、送出し側の項目がまず最初に内部浮動小数点数に変換され、それから転記される。外部浮動小数点数項目へ、または外部浮動小数点数項目からデータを転記する場合は、該当データはいったん内部浮動小数点数に変換される。

    5. 受取り側の項目が2バイト文字である場合、送出し側の項目は2バイト文字または各国語でなければならない。送出し側の項目の大きさと受取り側の項目の大きさが異なる場合は、送出し側の項目の右側が切り捨てられるか、受取り側の項目の右側に2バイト文字の空白が埋められる。

      受取り側の項目が各国語である場合、送出し側の項目も2バイト文字または各国語でなければならない。送出し側の項目の大きさと受取り側の項目の大きさが異なる場合は、送出し側の項目の右側が切り捨てられるか、受取り側の項目の右側に各国語の空白が埋められる。

  5. 基本項目転記以外の転記は、英数字の基本項目同士の転記とまったく同じように扱われる。ただし、データの内部表現形式の変換は行われない。この形の転記においては、送出し側または受取り側の項目の下位に属する個々の基本項目または集団項目を考慮することなく、受取り側の項目にデータが詰め込まれる。ただし、OCCURS句の一般規則に述べたことは例外である。

  6. 表 14-1に、各種のMOVE文の適合性をまとめて示す。表の中に示した一般規則の参照番号は、該当事項を禁止または裏付けている規則を示す。
  7. ISO2002MF 受取り側の項目がブーリアンである場合、必要に応じてデータ表現の変換とゼロ補填が行われて送出し側の項目のブール値が転記される。 その詳細は、 標準桁寄せ規則 の項で説明されている。 送出し側の項目がブーリアンではない場合、送り出し側の項目と同じ用途と桁数を持つブーリアン項目として宣言されたかのように扱われる。 送出し側の項目の内容がブーリアン字類条件で偽となるような値である場合にはエラーが報告される。 その詳細は、 矛盾するデータ の項で説明されている。

形式 2
  1. CORRESPONDING指定を書くと、一意名-1に属する該当する項目が、一意名-2に属する対応する項目に転記される。これに適用される規則については、手続き部の章のCORRESPONDING指定節に説明してある。CORRESPONDING指定が含まれるMOVE文を実行することは、対応する一意名の間で個々に転記を行うMOVE文を実行することに等しい。

    この処理は、各宛先集団ごとに繰り返される。

    >表 14-1:MOVE文のデータ項類
    送出し側のデータ項目の項類 受取り側のデータ項目の項類1
    英字 英数字/英数字編集 数字(整数/非整数) 数字編集外部/内部浮動小数点数 各国語 非NCHAR DBCS NCHAR DBCS ブーリアン
    英字 Yes/4c Yes/4a No/3a No/3a Yes No/4e Yes No/3f
    英数字 Yes/4c Yes/4a Yes/4b2 Yes/4b Yes No/4e Yes Yes/3e
    英数字編集 Yes/4c Yes/4a No/3a No/3a Yes No/4e Yes No/3f
    数字:整数 No/3b Yes/4a Yes/4b Yes/4b No No/4e No No/3f
    数字:非整数 No/3b No/3c Yes/4b Yes/4b No No/4e No No/3f
    数字編集 No/3b Yes/4a Yes/4b Yes/4b Yes/4b No/4e Yes No/3f
    各国語 No No Yes Yes Yes Yes Yes No
    非NCHAR DBCS No/4e No/4e No/4e No/4e Yes Yes/4e Yes No/3f
    NCHAR DBCS Yes Yes Yes No No Yes Yes/4e No
    ブーリアン No/3c Yes/4a No/3b No/3b No No/3g No Yes/4f
    1 各欄に該当する一般規則の番号を示す。
    2 非整数の英数字定数が送出し側として使用された場合、エラーとなる。