レコード・データに基づいて入力ファイルを複数の出力ファイルに分割する

この例では、各入力レコードの内容に基づいて、入力ファイルを複数の出力ファイルに分割する方法を示します。

入力ファイルを、バイト 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 と同じ)