■ 入力ファイルの一部を置き換えてCOPY/SORTする方法
▲その1
//SORT1 EXEC SORT //SORTIN DD DSN=…,DISP=SHR //SORTOUT DD DSN=…,DISP=(,KEEP),… //SYSIN DD * SORT FIELD=COPY ←OPTION COPYと同じ OUTFIL FNAMES=SORTOUT, OUTREC=(1,39,C'T') /* ↑ このサンプルは、INPUTの1~39
バイト目をOUTPUTの1~39バイトにセット、
「T」をOUTPUTの40バイト目にセットする
▲その2
//SORT1 EXEC SORT //SORTIN DD DSN=…,DISP=SHR //SORTOUT DD DSN=…,DISP=(,KEEP),… //SYSIN DD * OPTION COPY OUTFIL FNAMES=SORTOUT, OUTREC=(1,10,11,1,CHANGE=(1,X'00',X'F0',C' ',C'X'),20,40) /* ↑ INPUTの1バイト目から10バイトをそのままセット
INPUTの11バイト目から1バイトを変更 (X'00'はX'F0'へ、C' 'はC'X'へ変更)
INPUTの20バイト目から40バイトをセット
注意) 既に他のビットが立っている場合はU-212でアベンドします。
↓ メッセージ
MATCH NOT FOUND FOR SORTOUT CHANGE FIELD AT POSITION 11
↓
この場合は、「NOMATCH=(11,1)を指定します」
▲その3
//SORT1 EXEC SORT //SORTIN DD * AAAAA67890 BBBBB67890 CCCCC67890 //SORTOUT DD DSN=…,DISP=(,KEEP),… //SYSIN DD * OPTION COPY OUTFIL FNAMES=SORTOUT, OUTREC=(1,5,CHANGE=(5,C'AAAAA',C'XXXXX',C'BBBBB',C'ZZZZZ', NOMATCH=(1,5), 6,75) /* ↑ INPUTの1バイト目から5バイトをセットするがその5バイトが、AAAAAだった場合はXXXXXに変換、BBBBBだった場合はZZZZZに変換してセット
AAAAAでもBBBBBでもない場合はそのままセット
その次にINPUTの6バイト目から75バイトをそのままセット
▲その4 -z/OS Ver2Rel4以上-
//SORT1 EXEC SORT //SORTIN DD * Z1234567890 Y1234567890 X1234567890 //SORTOUT DD DSN=…,DISP=(,KEEP),… //SYSIN DD * SORT FIELDS=(1,1,CH,A) OUTREC FINDREP=(IN=X'E7',OUT=C'@') /* ↑ 入力にZ(=X'E7')があったら、@に変換して出力
OUTRECのかわりにINRECを使うとSORT前に置き換えてからSORTできます