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で処理する場合にはこの例にあるとおり桁合わせの上、実行しなければなりません。