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

book

Article ID: 185561

calendar_today

Updated On:

Products

EASYPROCLIB CA Easytrieve Report Generator CA Easytrieve Report Generator for Common Services

Issue/Introduction

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

Environment

z/OS, MSP, VOS3, IBM, FUJITSU, HITACHI

Resolution

Answer
Easytrieve Plusの移送処理は通常、イクエート・ステートメント(「=」による移送)を使用します。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                          <=※1
MOVE     '5'     TO     WK-P                          <=※2
MOVE     '00005'     TO     WK-N                 <=※3
MOVE     X'00005C'     TO     WK-P             <=※4
STOP

[移送結果]
X 'F540404040'                        <=※1結果  
X 'F54040'                                <=※2結果
X 'F0F0F0F0F5'                        <=※3結果
X '00005C'                                <=※4結果

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

Additional Information

Old Japanese Knowledge document ID: JTEC000997