kolusu Site Admin
Joined: 26 Nov 2002 Posts: 12375 Topics: 75 Location: San Jose
|
Posted: Tue Jul 27, 2004 10:06 am Post subject: |
|
|
Ravi,
The first part of question of splitting the input file when colb matches colc can be done in many ways. In sort you can use the following 2 methods
Method1: We compare the contents of colb to colc and if matched we write to temp file t1, else we write to file T2. Next we concatenate these 2 temp files and sort on the first 3 bytes to have the records in sorted order so that we can use it against matching vsam file.
Code: |
//STEP0100 EXEC PGM=ICETOOL
//DFSMSG DD SYSOUT=*
//TOOLMSG DD SYSOUT=*
//IN DD *
A1010
B2030
C4040
D5050
//T1 DD DSN=&T1,DISP=(,PASS),SPACE=(CYL,(X,Y),RLSE)
//T2 DD DSN=&T2,DISP=(,PASS),SPACE=(CYL,(X,Y),RLSE)
//CON DD DSN=&T1,DISP=OLD,VOL=REF=*.T1
// DD DSN=&T2,DISP=OLD,VOL=REF=*.T2
//OUT DD SYSOUT=*
//TOOLIN DD *
COPY FROM(IN) USING(CTL1)
SORT FROM(CON) USING(CTL2)
//CTL1CNTL DD *
OUTFIL FNAMES=T1,INCLUDE=(2,2,CH,EQ,4,2,CH),OUTREC=(1,3)
OUTFIL FNAMES=T2,SAVE,OUTREC=(1,3,/,1,1,4,2)
//CTL2CNTL DD *
SORT FIELDS=(1,3,CH,A)
OUTFIL FNAMES=OUT
/*
|
Method2: Here we split each record into 2. The first record will the first 3 bytes and the second record will have the firs byte and byte 4 & 5.
Now if colb matches with colc the second record will become a duplicate. So sort on the first 3 bytes and eliminate the dups, which will give us the desired results.
Code: |
//STEP0100 EXEC PGM=ICETOOL
//DFSMSG DD SYSOUT=*
//TOOLMSG DD SYSOUT=*
//IN DD *
A1010
B2030
C4040
D5050
//T1 DD DSN=&T1,DISP=(,CATLG),SPACE=(CYL,(X,Y),RLSE)
//OUT DD SYSOUT=*
//TOOLIN DD *
COPY FROM(IN) USING(CTL1)
SORT FROM(T1) USING(CTL2)
//CTL1CNTL DD *
OUTFIL FNAMES=T1,OUTREC=(1,3,/,
1,1,4,2)
//CTL2CNTL DD *
SORT FIELDS=(1,3,CH,A)
SUM FIELDS=NONE
OUTFIL FNAMES=OUT
/*
|
Both the above codes produce the following results.
Code: |
A10
B20
B30
C40
D50
|
Now if you want match this flat file against a vsam file with a partial key, then I easytrieve is a very good option. The code is simple and it can be used for any file layouts. since your matching key is only partial , just define the partial key for the vsam file.
ex:
Code: |
//STEP0100 EXEC PGM=EZTPA00
//STEPLIB DD DSN=EASYTREV.LOADLIB,
// DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSSNAP DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//INFILE DD *
A10
B20
B30
C40
D50
//INVSAM DD DSN=YOUR VSAM FILE,
// DISP=SHR
//OUTPUT DD DSN=YOUR OUTPUT MATCH FILE,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(CYL,(X,Y),RLSE),
// DCB=(LRECL=ZZZ,RECFM=FB,BLKSIZE=0)
//*
//* ZZZ is the LRECL of vsam file
//*
//SYSIN DD *
FILE INFILE
IN-KEY 01 003 A
FILE INVSAM VS
VSAM-KEY 01 003 A
FILE OUTPUT FB(0 0)
*************************************************
* MAINLINE *
*************************************************
JOB INPUT (INFILE KEY (IN-KEY) +
INVSAM KEY (VSAM-KEY))
IF MATCHED
PUT OUTPUT FROM INVSAM
END-IF
/*
|
Now you would get all the records from the vsam file which are matching with input flat file.
For the second vsam file , all you need is change the input vsam file name & LRECL=ZZZ of the output file in thejcl, and you can use the same program to get the matching records from other vsam file.
Hope this helps...
Cheers
Kolusu _________________ Kolusu
www.linkedin.com/in/kolusu |
|