File Comparison -Urgent

In this Mainframe Forum - You can post your queries on DFSORT, ICETOOL , SyncSort & JCL Utilities

Moderators: Frank Yaeger, Moderator Group

Post Reply
sivaraman
Member
Posts: 6
Joined: Tue Feb 20, 2007 11:52 am
Location: chennai

File Comparison -Urgent

Post by sivaraman » Mon Apr 09, 2007 7:33 pm

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

sivaraman
Member
Posts: 6
Joined: Tue Feb 20, 2007 11:52 am
Location: chennai

File Comparison- Urgent

Post by sivaraman » Mon Apr 09, 2007 7:41 pm

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.

User avatar
Frank Yaeger
Moderator
Posts: 812
Joined: Sat Feb 18, 2006 5:45 am
Location: San Jose, CA
Contact:

Post by Frank Yaeger » Mon Apr 09, 2007 9:24 pm

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   
Frank Yaeger - DFSORT Development Team (IBM) - yaeger@us.ibm.com
Specialties: JOINKEYS, FINDREP, WHEN=GROUP, ICETOOL, Symbols, Migration
=> DFSORT/MVS is on the Web at http://www.ibm.com/storage/dfsort

Veera
Moderator
Posts: 111
Joined: Wed Feb 22, 2006 2:59 pm

Post by Veera » Tue Apr 10, 2007 4:36 am

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.

Post Reply

FREE TUTORIALS

Tutorials
Free tutorials from mainframegurukul
  • JCL Tutorial
    Covers all important JCL concepts.
  • Cobol Tutorial
    This tutorials covers all Cobol Topics from STRING to COMP-3.
  • DB2 Tutorial
    DB2 Tutorial focuses on DB2 COBOL Programming.
  • SORT Tutorial
    This Tutorial covers all important aspects of DFSORT with examples
  • CICS Tutorial
    This CICS tutorial covers CICS concepts and CICS Basics, CICS COBOL Programming.
Interview
Mainframe Interview questions



Other References
Mainframe Tools and others