| kolusu Site Admin
 
  
 
 Joined: 26 Nov 2002
 Posts: 12394
 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
 |  |