■ INCLUDE/OMITの指定方法
INCLUDE/OMIT制御ステートメントを使うとデータの抽出をすることができます。
・INCLUDEは「特定のレコードだけを出力データ・セットに入れたい場合」
・OMITは「特定のレコードだけを含みたくない場合」
です。
比較演算子は下記のとおりです。比較する長さの最大長さは、ソートの制限事項をご覧ください。
EQ 等しい NE 等しくない GT より大きい GE 以上 LT より小さい LE 以下
▲その1 (INCLUDE/OMIT COND指定/リテラル比較)
//SYSIN DD * SORT FIELDS=… INCLUDE COND=(1,3,CH,EQ,C'ABC',AND, 4,3,PD,EQ,123) ←パックの時、クォーテーションなし /*
▲その1の変形 (INCLUDE/OMIT COND指定/データ比較)
//SYSIN DD * SORT FIELDS=… INCLUDE COND=(1,3,CH,EQ, 4,3,CH) ←1~3バイトと4~6バイトが等しいレコード /*
▲その2(OUTFILE指定)
//SYSIN DD * SORT FIELDS=… OUTFIL FNAMES=SORTOUT, INCLUDE=(1,3,CH,EQ,C'ABC') /* ※この方法ではビットによる抜出しも可能です。 ex)INCLUDE=(1,1,BI,BO,X'80') ↑ 1バイト目のビットX'80'がONのもの
どちらも結果は同じですが、SYSPRINTの内容がちょっと違います。
<その1>では、
INSERT nnn,DELETE nnn
RECORDS - IN : 0 , OUT : 0
と表示されますが、
<その2>では、
INSERT 0,DELETE 0
RECORDS - IN : nnn , OUT : nnn
と表示されます。
※その1では「INCLUDE COND=」、その2 では、「INCLUDE=」であることに注意!
※INCLUDEの逆は、OMITです!(EXCLUDEじゃないないですよー)
▲その3~ANDとORを混在させる方法
//SORT1 EXEC SORT //SORTIN DD * FIRST 1 AAAAA 2 DDDDD 3 EEEEE 4 AAAAA ###END //SORTOUT DD SYSOUT=* //SYSIN DD * OPTION COPY INCLUDE COND=((1,1,CH,EQ,C' ',OR,1,80,SS,NE,C'AAA'),AND, 1,3,CH,NE,C'###') /* ※この例は、1バイト目がブランクまたは80桁以内にAAAを含まなく、 かつ、1~3バイト目が###でないデータを抜き出す例です。 ANDとORを混在させるにはこのように明示的にカッコで括ります。
(出力例)
********************************* データの始め ****** FIRST 2 DDDDD 3 EEEEE ********************************* データの終り ******