This example is similar to Example 6 - Pull records from a master file in sorted order, except that we
want to keep the resulting MASTER records in their original order
instead of sorting them by the City Name field. We use DFSORT's SEQNUM
parameter to add a sequence number to each MASTER record before the
records are spliced, and we splice that sequence number along with
the data. After SPLICE sorts by the City Name, we SORT again by the
sequence number to get the resulting MASTER records back in their
original order.
//S7 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//PULL DD DSN=VAR.PULL.FILE,DISP=SHR
//MASTER DD DSN=FIXED.MASTER.FILE,DISP=SHR
//TEMP1 DD DSN=&&TEMP1,DISP=(MOD,PASS),SPACE=(TRK,(5,5)),UNIT=SYSDA
//TEMP2 DD DSN=&&TEMP2,DISP=(,PASS),SPACE=(TRK,(5,5)),UNIT=SYSDA
//OUT DD DSN=FIXED.OUTPUT.FILE,DISP=(NEW,CATLG,DELETE),
// SPACE=(TRK,(5,5)),UNIT=SYSDA
//TOOLIN DD *
* Convert PULL records from VB to FB and add 'P' identifier.
COPY FROM(PULL) USING(CTL1)
* Add sequence number and 'M' identifier to MASTER records.
COPY FROM(MASTER) TO(TEMP1) USING(CTL2)
* Splice PULL and MASTER records (splice sequence number, but
* do NOT splice identifier):
* Spliced MASTER records with matching PULL records have 'P' id.
* Spliced MASTER records without matching PULL records
* have 'M' id.
* Eliminate records with 'M' id.
SPLICE FROM(TEMP1) TO(TEMP2) ON(1,20,CH) WITHALL WITH(1,48) -
USING(CTL3)
* Sort resulting spliced records on original sequence number
* to get them back in their original order.
* Remove id and sequence number.
SORT FROM(TEMP2) TO(OUT) USING(CTL4)
/*
//CTL1CNTL DD *
* Convert PULL records from VB to FB and add 'P' identifier
OUTFIL FNAMES=TEMP1,VTOF,OUTREC=(5,20,49:C'P')
/*
//CTL2CNTL DD *
* Add sequence number and 'M' identifier to MASTER records.
OUTREC FIELDS=(1,40,41:SEQNUM,8,BI,49:C'M')
/*
//CTL3CNTL DD *
* Eliminate MASTER records without matching PULL records.
OUTFIL FNAMES=TEMP2,OMIT=(49,1,CH,EQ,C'M')
/*
//CTL4CNTL DD *
* Sort on sequence number and remove id and sequence number.
SORT FIELDS=(41,8,BI,A)
OUTREC FIELDS=(1,40)
/*
The resulting OUT data set (FIXED.OUTPUT.FILE) has the following
40-byte fixed-length records:
SAN JOSE 8630 SUSAN
LOS ANGELES 9203 MICHAEL
SAN JOSE 0052 VICKY
NEW YORK 5218 CARRIE
SAN JOSE 3896 FRANK
NEW YORK 6385 MICHAEL