データのコピー
デフォルトにより、DSC (データ・セット・コピー) 機能は、単に 1 つのデータ・セットの内容を別のデータ・セットに (使用可能であれば、DFSORT を使用して) コピーします。下記のバッチ・ジョブからの抜粋では、以下のことを行うように DSC 機能を拡張しています。
- 最初の 2 文字が「01」または「02」であるレコードのみを入力ストリームに組み込む。
- 「01」タイプのレコードの「salary」(位置 27 にある 4 バイトのパック 10 進数フィールド) および「month 1 payment」(位置 31 にある 4 バイトの 2 進数フィールド) フィールドの合計値を集計する 2 行を SYSPRINT に加える。
- それぞれの出力レコードで、最初に現れた「Grant Smith」を「Fred Bloggs」に変更する。
- 最初の 2 文字が「02」であるレコードのみをデフォルトの出力データ・セット (DDOUT) に書き込む。1 から 6 桁目にシーケンス・フィールドを追加して、残りのデータは桁移動する。
- 最初の 2 文字が「01」であるレコードのみを、変更せずに別のデータ・セット (OUT01) に書き込む。
- 最初の 10 個の出力レコードを 16 進形式で (SYSPRINT へ) 印刷する。
⋮
//DDIN DD DSN=FMNUSER.FMNAFDAT.SAMPMVS,DISP=SHR
//DDOUT DD DSN=FMNUSER.FMNAFDAT.SAMP02,DISP=SHR
//OUT01 DD DSN=FMNUSER.FMNAFDAT.SAMP01,DISP=SHR
//SYSIN DD *
$$FILEM DSC INPUT=DDIN,
$$FILEM PROC=*
*FASTPROC
INCLUDE COND=(1,2,CH,EQ,C'02',OR,1,2,CH,EQ,C'01')
OUTFIL FNAMES=DDOUT,INCLUDE=(1,2,CH,EQ,C'02')
OUTREC=(SEQNUM,6,ZD,1,74)
OUTFIL FNAMES=OUT01,INCLUDE=(1,2,CH,EQ,C'01')
*REXXPROC
outrec = change(outrec,'Grant Smith','Fred Bloggs')
/* Print the first 10 output records in hex */
if prtcount() < 10 then print(outrec,'hex')
if fld(1,2) == '01' then do
tally(27,4,'P','Salary Total')
tally(31,4,'B','Total Month 1 Payment')
end
/+
/*
⋮