Answer
自動入力の場合、STARTプロシジャーが実行されるときは、まだファイルの入力が行われていません。そのためSTARTプロシジャーで入力エリアを参照すると「A010」エラーになります。1件目のレコ-ドに対する処理は、JOBアクティビィティでシステム定義フィールド RECORD-COUNT で判断して行います。RECORD-COUNTは、入出力されたレコード件数の情報を持つシステム定義フィールドです。
[レコード件数の参照]
[ファイル名 :] RECORD-COUNT
※RECORD-COUNTフィールドは、すべての入出力ファイルに対して、同じフィールド名で生成されます。複数ファイルを取り扱っている場合には、ファイル名で修飾して参照します。
記述例
(例) ファイルの1件目の制御レコードを判断して処理を進める
FILE FILEA
CNT-CODE 1 1 A
CNT-DATE 4 8 A
CNT-TIME 12 8 A
CODE 1 3 N
NO 4 5 N
NAME 9 15 A
SURYO 24 4 P 0
*
JOB
IF FILEA:RECORD-COUNT = 1 AND CNT-CODE = 'D'
STOP
ELSE
END-IF
*
REPORT
TITLE ‘注文一覧表' +5 CNT-DATE ‘現在'
LINE CODE NO NAME SURYO
※この例では、1件目のレコードのCNT-CODEの値が「D」であればその時点で処理を終了します。この場合、JOBアクティビティ内で扱っているファイルは1本なので、IF FILEA:RECORD-COUNT = 1 は、IF RECORD-COUNT = 1 と記述してもかまいません。
※ファイルの自動入力を行っている場合、1件目のレコ-ドに対する処理をSTARTプロシジャーで実行することはできません。STARTプロシジャーでは、まだファイルの入力は行われていないからです。
参考:
最後のレコードに対する処理をFINISHプロシジャーで実行することはできません。FINISHプロシジャーは自動入力ファイルのEOFを検出してから実行されますが、EOF時にはレコード・エリアは参照できないからです。この場合には、ファイル定義でWORKAREA パラメータを指定します。