STARTプロシジャーで入力レコードを参照したら「A010 無効なファイルの参照」エラーが発生した。最初の1件目のレコードかどうかの判断は簡単にできるか?

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

文書番号: JTEC001000

製品名: CA-Easytrieve Plus

バージョン: ALL

OS: z/OS, MSP, VOS3

 

Question

STARTプロシジャーで入力レコードを参照したら「A010 無効なファイルの参照」エラーが発生した。最初の1件目のレコードかどうかの判断は簡単にできるか? 

 

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

      PRINT

  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 パラメータを指定します。

Attachments

    Outcomes