レコード・データに基づいて入力ファイルを複数の出力ファイルに分割する
この例では、各入力レコードの内容に基づいて、入力ファイルを複数の出力ファイルに分割する方法を示します。
例
入力ファイルを、バイト 1 から 4 のパック値に基づいて複数の出力ファイルに分割します。値が 100 より大きい場合はレコードを DD OV100 に書き込み、10 より小さい場合はレコードを LT10 に書き込みます。値がその間にある場合は、レコードを MIDDLE に書き込みます。バイト 1 から 4 の値がパックされていない場合、レコードを DD ERROR に書き込みます。
注: REXX および FASTREXX ソリューションでは、エラーが発生する可能性があります。File Manager は、2 次出力 DD に対して WRITE コマンドが実行されるまで、どの DD も開きません。
例えば、ファイル ERROR に対して WRITE が出されることがなく、その ERROR が DD カードの NEW に割り振られており、DFSMS が判別するために BLKSIZE=0 が指定されているとします。DSC が下記の制御カードで実行した後、ERROR が開かれることはないため、BLKSIZE は DFSMS に受け入れられるように設定されず、ゼロのままになります。ERROR を読み取る試行はすべて、エラーを生成します。したがって、このユーティリティーを実行する前に、空の 2 次出力データ・セットを作成しておく必要があります。File Manager データ・セット生成 (DSG) を NLRECS=0 で使用できます。
この説明は、2 次 (WRITE) 出力データ・セットのみに適用されます。File Manager は、1 次 DSC 出力データ・セットを常に開きます。
FASTREXX:
$$FILEM DSG OUTPUT=ERROR,NLRECS=0
$$FILEM DSG OUTPUT=OV100,NLRECS=0
$$FILEM DSG OUTPUT=LT10,NLRECS=0
$$FILEM DSG OUTPUT=MIDDLE,NLRECS=0
$$FILEM DSC PROC=*
If \ FLD_TYPE(1,4,"P") Then WRITE( ERROR )
Else If FLD(1,4,"P") > 100 Then WRITE( OV100 )
Else If FLD(1,4,"P") < 10 Then WRITE( LT10 )
Else WRITE( MIDDLE )
RETURN DROP
REXX:
(FASTREXX と同じ)