ファイルの終わりに実行されるプロシージャーをコーディングする
ファイルの終わりに実行されるプロシージャーをコーディングするには、次に示したように、*EOFPROC ステートメントを使用する必要があります。
- *EOFPROC
- このステートメントがコーディングされる場合、後続の REXX ステートメントはすべて、関数処理の正常完了時に 1 回実行されるプロシージャー・ステートメントとして扱われます。これは、ファイルの終わりであるか、処理限界に達したか、または REXX プロシージャーから STOP 条件が発行された後である可能性があります。入力レコードおよび出力レコードは、関数によって処理された最終レコードに配置されます。このファイルの終わりのプロシージャーは、関数 DSC、DSP、DSU、および DSEB のみに対して実行されます。その他の関数では、そのプロシージャーは無視されます。以前に *FASTREXX ON ステートメントをコーディングした場合、構文エラーを回避するには、下記の例で説明するように、このプロシージャーが FASTREXX 処理に適格でなければなりません。内部 FASTREXX 処理が必要でない場合、File Manager は、ファイルの終わりのプロシージャーとして内部処理または REXX 処理のいずれかを選択します。したがって、1 つのプロシージャーを REXX で実行でき、もう 1 つのプロシージャーを FASTREXX にすることができます。使用法のシナリオについては、以下の例を参照してください。
- 例 1
- レコード処理の REXX プロシージャーとファイルの終わりのプロシージャーを使って、コピーを実行します。
$$FILEM DSC PROC=* SAY 'NORMAL PROCESS RECORD NUMBER' SUBSTR(INREC,5,2) *EOFPROC SAY 'END OF FILE PROC INREC' SUBSTR(INREC,8)
- 例 2.
- ファイルの終わりに実行されるプロシージャー (FASTREXX) を使用してコピーを実行します。
$$FILEM DSC PROC=* *EOFPROC SETC(PRTVAR,' ') /* CLEAR IT */ SETC(INSUB,'&ZINREC(8)') /* SUBSTR */ OVLY_VAR(PRTVAR,'END OF FILE PROC INREC ',1) /* LITERAL */ OVLY_VAR(PRTVAR,'&INSUB',0) /* EOF VALUE*/ PRT_VAR(PRTVAR) /* PRINT IT */
- 例 3.
- *FASTPROC、*REXXPROC、および *EOFPROC ステートメントを使用し、コピーを実行します。
$$FILEM DSC PROC=* *FASTPROC OMIT COND=(68,2,CH,EQ,C'XX') *REXXPROC SAY 'NORMAL PROCESS RECORD NUMBER' SUBSTR(INREC,5,2) *EOFPROC SAY 'END OF FILE PROC INREC' SUBSTR(INREC,8)