MOVEステートメントによる移送処理の規則は?  MOVEステートメントとイクエート・ステートメント(「=」による移送)との違いは?

Document created by Masaaki_Iyama Employee on Jun 19, 2015Last modified by Masaaki_Iyama Employee on Jun 19, 2015
Version 1Show Document
  • View in full screen mode

文書番号: JTEC000997

製品名: CA-Easytrieve Plus

バージョン: ALL

OS: z/OS, MSP, VOS3

 

Question

MOVEステートメントによる移送処理の規則は?

MOVEステートメントとイクエート・ステートメント(「=」による移送)との違いは? 

 

Answer

EASYPLUSの移送処理は通常、イクエート・ステートメント(「=」による移送)を使用します。MOVEステートメントを使用するとデータの属性に関係なく、すべて英数字タイプのデ-タとして移送が実行されます。

 

MOVEステートメントとイクエート・ステートメントはどちらもデータの移送を行いますが、属性の違うデータを移送する場合は必ずイクエート・ステートメントを使用します。MOVEステートメントで移送すると、すべてAタイプ(英数字)扱いになりますので、属性の変換(漢字コード変換等)が行われません。また数値データも左詰めの移送が行われますので注意が必要です。

 

[MOVEステートメントによる移送処理を行う場合]

● エリアの1あるいは2バイト・データによるパディング

MOVE/FILL

MOVE/FILLステートメント記述]

MOVE   リテラル-1   TO   フィールド名   FILL   リテラル-2

リテラル-1 : 移送するデータ

 フィールド名 : 移送先エリア

 リテラル-2 : パディングする1あるいは2バイト・データ

 

MOVE/FILLでは、リテラル-1とリテラル-2とに同一の1バイトあるいは2バイトのデータを指定することでエリアを指定したデータでパディングすることができます。この機能はおもに、エリアのゼロ、スペース・データ以外での初期化に使用します。レポートに出力する ラインもMOVE/FILLでセットすれば簡単です。

 

 

● ゼロあるいはスペースによるエリアの初期化

MOVE/ZERO・SPACE

[MOVE/ZERO・SPACEステートメント記述]

MOVE   SPACE            TO    フィールド名-1    フィールド名-2 .....   フィールド名-n

           SPACES

           ZERO

           ZEROS

           ZEROES

フィールド名-1  ~ n  :  移送先エリア

 

このフォーマットを指定した場合は受取り側の属性に合わせて初期化されます。受取り側フィールドは複数指定が可能です。(SPACE、SPACESは受取側には英数字タイプのみ指定できます。) 任意のタイミングでのエリアの初期化や、テスト・データ・ファイルの作成などに有効です。

 

 

● 同一フィールド名のデータをファイル間で一括移送する。

MOVE  LIKE

[MOVE LIKEステートメントの記述]

MOVE   LIKE    ファイル名-1    TO    ファイル名-2

ファイル名-1 : 移送元ファイル名

   ファイル名-2 : 移送先ファイル名

 

MOVE LIKEステートメントはファイル名-1とファイル名-2とで同一名で定義したフィールド間のデータを一括して移送処理します。レコード・レイアウトの変更や、レコードの中から必要な情報のみを抽出してテスト・データ・ファイルを作成する場合に有効です。

 

 

記述例

(例1) レポートの合計行の直前にラインを出力する

MOVE/FILL の場合

   WK-LINE      S      132      A

  *

  JOB   START   INIT-PROC

     ~

  INIT-PROC.   PROC

    MOVE   '-'   TO   WK-LINE   FILL   '-'

  END-PROC

  *

  REPORT

    ~

  BEFORE-BREAK. PROC

    DISPLAY  WK-LINE

  END-PROC

 

MOVEステートメントの実行でWK-LINEには「-」が132バイトセットされます。

 


(例2) ワーク・フィールドを属性に合わせてゼロ・クリアする

MOVE/ZERO・SPACE の場合

  FILE    TESTDATA

    FLD-N     *      4   N

    FLD-P     *      4   P

    FLD-U     *      4   U

    FLD-B     *      4   B

    FLD-A     *    100   A

     I           W      3   N

  *

  JOB   INPUT   NULL

    IF   I   >   100

        STOP

    END-IF

    I  =  I  +  1

    MOVE    ZERO   TO   FLD-N   FLD-P   FLD-U   FLD-B

    MOVE    SPACE  TO   FLD-A

    PUT  TESTDATA

 

MOVEステートメントの実行でFLD-N、FLD-P、FLD-U、FLD-Bはそれぞれの属性でゼロ・クリアされます。FLD-Aはスペース・データで初期化されます。

 

 

(例3) ファイルのレイアウトを変更する

MOVE LIKEの場合

FILE    INFILE

    DATE      10     6   N

    CODE     51      7   N

    SURYO     *     4    P 0

    TANKA     *      6   P 0

  FILE  OUTFILE

    CODE      *     7   N

    TANKA     *    6   P 0

    SURYO    *     4   P 0

  *

  JOB

    MOVE    LIKE    INFILE    TO    OUTFILE

    PUT  OUTFILE

 

※MOVE LIKEステートメントの実行でCODE、SURYO、TANKAの各フィールドのデータがINFILEからOUTFILEへ一括移送されます。この例では、INFILEから必要なデータのみ抽出し、レイアウトを変更してOUTFILEを作成しています。

 

 

(例4) MOVEステートメントでの数値データの移送

  DEFINE     WK-N      W      5    N  0

  DEFINE     WK-P      W      3    P  0

  *

  JOB   INPUT  NULL

         MOVE    '5'                   TO  WK-N    ・

         MOVE    '5'                   TO  WK-P    ・

         MOVE    '00005'             TO  WK-N    ・

         MOVE    X'00005C'         TO  WK-P    ・

        STOP

                                           

[移送結果]

X 'F540404040'

X 'F54040'

X 'F0F0F0F0F5'

X '00005C'

※MOVEステートメントでは上の移送結果のとおり文字列移送(左詰めの移送、データ変換処理なし)が実行されます。通常数値データの移送はイクエート・ステートメント(「=」による移送)で処理しますが、MOVEで処理する場合にはこの例にあるとおり桁合わせの上、実行します。

Attachments

    Outcomes