Page 1 of 1

File Comparison -Urgent

Posted: Mon Apr 09, 2007 7:33 pm
by sivaraman
can anyone help me...

There are 2 files. Account nos followed by amount.

1. If the account number is present in both the files and the amount is different in both the files, take the account number from 1st or 2nd file and write the account number ONLY to the first output file.

2. If the account number is present in both the files and the amount is same in both the files, please take the account number from 1st or 2nd file and write the account number AND amount to the second output file.

3. If an account number is present in 1st and not in 2nd write ONLY the account number to the first output file.
4. If an account number is present in 2ndand not in 1st, please write ONLY the account number to the first output file.

Thanks,
Siva

File Comparison- Urgent

Posted: Mon Apr 09, 2007 7:41 pm
by sivaraman
For this

RECFM=FB, length is 80 ....

acct no starts at 1 and lenght is 16

amount is starts at 18 and length is 12


thanks.

Posted: Mon Apr 09, 2007 9:24 pm
by Frank Yaeger
You didn't show an example of your input records, so it's not clear if you have duplicate account numbers within either file (e.g. the same account number appears twice in input file1) and what you want to do in that case. Assuming you don't have duplicates within either file, here's a DFSORT/ICETOOL job that will do what you asked for. I made up some sample data and used the rules you stated.

Code: Select all

//S1    EXEC  PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG  DD SYSOUT=*
//IN1 DD *
0000000000000001 000000000010
0000000000000002 000000000010
0000000000000003 000000000010
/*
//IN2 DD *
0000000000000001 000000000012
0000000000000002 000000000010
0000000000000004 000000000010
/*
//T1 DD DSN=&&T1,UNIT=SYSDA,SPACE=(CYL,(5,5)),DISP=(MOD,PASS)
//OUT1 DD SYSOUT=*
//OUT2 DD SYSOUT=*
//TOOLIN   DD    *
COPY FROM(IN1) TO(T1) USING(CTL1)
COPY FROM(IN2) TO(T1) USING(CTL2)
SPLICE FROM(T1) TO(OUT2) ON(1,16,ZD) KEEPNODUPS -
  WITH(31,12) USING(CTL3)
/*
//CTL1CNTL DD *
  INREC OVERLAY=(42:X)
/*
//CTL2CNTL DD *
  INREC BUILD=(1,16,31:18,12)
/*
//CTL3CNTL DD *
  OUTFIL FNAMES=OUT2,INCLUDE=(18,12,ZD,EQ,31,12,ZD),
    BUILD=(1,29)
  OUTFIL FNAMES=OUT1,SAVE,
    BUILD=(1,16)
/*
OUT1 would have:

Code: Select all

0000000000000001 
0000000000000003 
0000000000000004 
OUT2 would have:

Code: Select all

0000000000000002 000000000010   

Posted: Tue Apr 10, 2007 4:36 am
by Veera
Siva,

As Frank said you have not mentioned anything regarding the duplicates within each file. And also as per your layout you said

1-16 -> accn no

18-12 ->Amount

What is present in 17 postion, are you expecting that in the outfile or
only the ACCTNO/AMOUNTS. I have exluded the postion 17 while
writign the outfile.

FRANK SOLUTION IS THE OPTIMAL the BEST, since i tried i am posting the code just as info.

Code: Select all


       
//JS010    EXEC PGM=ICETOOL                                                     
//TOOLMSG   DD SYSOUT=*                                                         
//DFSMSG    DD SYSOUT=*                                                         
//*                                                                             
//IN1      DD *                                                                 
1111111111111111 1000000000000                                                  
2222222222222222 2000000000000                                                  
3333333333333333                                                                
//IN2      DD *                                                                 
1111111111111111 1000000000000                                          
2222222222222222 3000000000000                                          
4444444444444444                                                        
//TMP1     DD DSN=ACS0228.TEST.TMP1,                   /* OUTPUT                
//          DISP=(MOD,PASS),                                                    
//          UNIT=SYSDA,                                                         
//          SPACE=(CYL,(1,2),RLSE)                                              
//*                                                                             
//TMP2     DD DSN=ACS0228.TEST.TMP2,                   /* OUTPUT                
//          DISP=(MOD,PASS),                                                    
//          UNIT=SYSDA,                                                         
//          SPACE=(CYL,(1,2),RLSE)                                              
//*                                                                             
//FILE1    DD DSN=ACS0228.TEST.FILE1,                  /* OUTPUT                
//          DISP=(,CATLG,DELETE),                                               
//          UNIT=SYSDA,                                                         
//          SPACE=(CYL,(1,2),RLSE)                                              
//*                                                                             
//FILE2    DD DSN=ACS0228.TEST.FILE2,                  /* OUTPUT                
//          DISP=(,CATLG,DELETE),                                               
//          UNIT=SYSDA,                                                         
//          SPACE=(CYL,(1,2),RLSE)                                              
//*                                                                             
//LIST1     DD SYSOUT=*                                                         
//TOOLIN DD *                                                                   
COPY FROM(IN1) TO(TMP1) USING(CTL1)                                            
COPY FROM(IN2) TO(TMP1) USING(CTL2)                                            
SPLICE FROM(TMP1) TO(FILE1) ON(1,16,CH) ON(18,12,CH) WITH(82,1) -
   USING(CTL3) KEEPNODUPS 
SORT FROM(TMP2) TO(FILE2) USING(CTL4)                                          
//CTL1CNTL DD *                                                                 
  INREC OVERLAY=(81:C'11')                                                       
//CTL2CNTL DD *                                                                 
  INREC OVERLAY=(81:C'22')                                                       
//CTL3CNTL DD *                                                                 
  OUTFIL FNAMES=FILE1,INCLUDE=(81,2,CH,EQ,C'12'),BUILD=(1,16,18,12)              
  OUTFIL FNAMES=TMP2,SAVE,BUILD=(1,16)                                           
//CTL4CNTL DD *                                                                 
  SORT FIELDS=(1,16,ZD,A)                                                        
  SUM FIELDS=NONE                                                                


Output File1
************

1111111111111111100000000000


Output File2
************

2222222222222222
3333333333333333
4444444444444444


Note : If there is a posibilty of the dups in the I/P file code has to be
changed accordingly.

Thanks
Veera.