Monday, January 31, 2011

ICETOOL - Compare counts of two files and RETURN RC4 IF COUNTS ARE NOT EQUAL

//*-------------------------------------------------------------------*
//* COMPARE THE COUNTS OF FILE SENT TO DIALER AND RECEIVED FROM DIALER 
//* RETURN RC4 IF COUNTS ARE NOT EQUAL (SYNCSORT)                     
//*-------------------------------------------------------------------*                                                        

//STEP085  EXEC PGM=ICETOOL                                            
//DFSMSG   DD  SYSOUT=*                                                
//TOOLMSG  DD  SYSOUT=*                                                
//IN1      DD  DSN=&TYPE1.CCCN.CN2030WP.PREVWEEK.CTBL.BKUP(+1),        
//             DISP=SHR                                                
//IN2      DD  DSN=&TYPE1.CCCN.CN2030WP.CNSVDNLD.DATA(0),              
//             DISP=SHR                                                
//OUT      DD  DSN=&&T1,                                               
//             DISP=(MOD,DELETE),                                      
//             UNIT=SYSDA,                                             
//             SPACE=(CYL,(1,1),RLSE),                                 
//             DCB=(RECFM=FB,LRECL=9)                                  
//OUT1     DD  DSN=&&T2,                                               
//             DISP=(MOD,DELETE),                                      
//             UNIT=SYSDA,                                
//             SPACE=(CYL,(1,1),RLSE),                    
//             DCB=RECFM=FB                               
//TOOLIN   DD  DSN=TCCPU.DLPXV1.RDRLIB(CN233001),         
//             DISP=SHR                                   
//CTL1CNTL DD  DSN=TCCPU.DLPXV1.RDRLIB(CN233002),         
//             DISP=SHR                                   
------------------------

CN233001 -


COPY FROM(IN1) USING(CTL1)                      
COPY FROM(IN2) USING(CTL1)                      
SELECT FROM(OUT) TO(OUT1) ON(1,9,CH) NODUPS     
COUNT FROM(OUT1) NOTEMPTY RC4                   
------------------------

CN233002 -


OUTFIL FNAMES=OUT,NODETAIL,REMOVECC, 
 TRAILER1=(COUNT=(M11,LENGTH=9))     



OR


//*-------------------------------------------------------------------*
//* ELIMINATE THE DUPLICATES. DFSORT (NO LICENCE                       
//*-------------------------------------------------------------------*                                                        

//STEP020  EXEC PGM=ICETOOL                                            
//DFSMSG   DD  SYSOUT=*                                                
//TOOLMSG  DD  SYSOUT=*                                                
//IN1      DD  DSN=PCCCN.CN2030WP.CNSVDNLD.DATA(-1),                   
//             DISP=SHR                                                
//IN2      DD  DSN=PCCCN.CN2030WP.PREVWEEK.CTBL.BKUP(0),               
//             DISP=SHR                                                
//OUT      DD  DSN=&&T1,                                               
//             DISP=(MOD,PASS),                                        
//             UNIT=SYSDA,                                             
//             SPACE=(TRK,(1,1),RLSE)                                  
//*            DCB=(RECFM=FB,LRECL=80)                                 
//OUT1     DD  DSN=&&T2,                                               
//             DISP=(MOD,PASS),                                        
//             UNIT=SYSDA,                                             
//             SPACE=(TRK,(1,1),RLSE)                                  
//*                                                        
//TOOLIN   DD  DSN=TCCPU.DLPXV1.RDRLIB(CN200001),          
//             DISP=SHR                                    
//CTL1CNTL DD  DSN=TCCPU.DLPXV1.RDRLIB(CN200002),          
//             DISP=SHR                                    
//CTL2CNTL DD  DSN=TCCPU.DLPXV1.RDRLIB(CN200012),          
//             DISP=SHR                                    
//CTL3CNTL DD  DSN=TCCPU.DLPXV1.RDRLIB(CN200003),          
//             DISP=SHR                                    


TCCPU.DLPXV1.RDRLIB(CN200001):

COPY FROM(IN1) USING(CTL1)           
COPY FROM(IN2) USING(CTL2)           
COPY FROM(OUT) TO(OUT1) USING(CTL3)  


TCCPU.DLPXV1.RDRLIB(CN200002):

OUTFIL FNAMES=OUT,NODETAIL,REMOVECC, 
  TRAILER1=(1:COUNT=(TO=ZD,LENGTH=8))


TCCPU.DLPXV1.RDRLIB(CN200012):

OUTFIL FNAMES=OUT,NODETAIL,REMOVECC,           
  TRAILER1=(11:COUNT=(TO=ZD,LENGTH=8))    

     
TCCPU.DLPXV1.RDRLIB(CN200003):

INREC IFTHEN=(WHEN=GROUP,RECORDS=2,PUSH=(1:1,8)),                   
  IFTHEN=(WHEN=(11,8,CH,NE,C'       '),                             
    OVERLAY=(21:1,8,ZD,SUB,11,8,ZD,TO=ZD,LENGTH=8)                  
OUTFIL FNAMES=OUT1,NULLOFL=RC16,OMIT=(21,8,CH,EQ,C'       ',OR,     
 (21,8,CH,NE,C'       ',AND,21,8,ZD,GE,+10))                        

Sort - Insert field in between and copy records from input based on condition

//STEP030  EXEC  PGM=SORT                           
//SYSOUT   DD  SYSOUT=*                             
//SORTIN   DD  DSN=TCTPU.DLPXV1.ACTUAR.FOUND,       
//             DISP=SHR                             
//SORTOUT  DD  DSN=TCTPU.DLPXV1.ACTUAR.FOUND.FEB,   
//             DISP=(OLD,CATLG,DELETE),             
//             UNIT=SYSDA,                          
//             SPACE=(CYL,(50,5),RLSE)              
//SYSIN    DD  *                                    
  SORT FIELDS=COPY                                  
  INCLUDE COND=(8,4,CH,NE,C'2009') 

  OUTREC FIELDS=(1,7,C'~',8,8,C'~',17,8) 
//*                                                 
 INCLUDE COND=(8,4,CH,NE,C'2009')  (Copies records if in  position 8 and upto 4 chars NE 2009) 
OUTREC FIELDS=(1,7,C'~',8,8,C'~',17,8) (Copies records which has met above condition and output will be 1 to 7 from input with ~ in position 8 and 9 position will be from input's 8th position until 8 chars and ~ in 17 position and 18th position will be from input's 17 position)    


Output:

M065774~20100310~S0003765
M065771~20100310~T0059855
M065406~20100224~T0061059

Monday, January 24, 2011

ICETOOL - to copy the first duplicate record from input file to output file

//PARMTMP2 EXEC  PGM=PARMIN,                                        
//             PARM='SELECT FROM(IN) TO(OUT) ON(1,15,CH) FIRSTDUP'                                              

//SYSIN    DD  DSN=&&CTL02,                                         
//             DISP=(,PASS),                                        
//             UNIT=SYSDA,                                          
//             SPACE=(80,3)                                         
//*                                                                 
//STEP030  EXEC PGM=ICETOOL                                         
//DFSMSG   DD  SYSOUT=*                                             
//TOOLMSG  DD  SYSOUT=*                                             
//IN       DD  DSN=PCCCN.CN2125DP.RECYCLE.CHGO.HDRS,                
//             DISP=SHR                                             
//         DD  DSN=&&TEMP2,                                         
//             DISP=(OLD,DELETE)                                    
//OUT      DD  DSN=&&TEMP3,                                         
//             DISP=(,PASS),                                        
//             UNIT=SYSDA,                                          
//             SPACE=(CYL,(1,1),RLSE),                              
//             DCB=(RECFM=FB,LRECL=290)                             
//TOOLIN   DD  DSN=&&CTL02,                        
//             DISP=(OLD,PASS)                     
//*                                                
Based on the duplicates in field 1 to 15 characters, first occurrence is copied to output file

ICETOOL - to copy only first occurence of the record from one or many input files to output file

//PARMTMP1 EXEC  PGM=PARMIN,                                     
//             PARM='SELECT FROM(IN) TO(OUT) ON(1,15,CH) FIRST'  
//SYSIN    DD  DSN=&&CTL01,                                      
//             DISP=(,PASS),                                     
//             UNIT=SYSDA,                                       
//             SPACE=(80,3)                                      
//*                                                              
//STEP020  EXEC PGM=ICETOOL                       
//DFSMSG   DD  SYSOUT=*                           
//TOOLMSG  DD  SYSOUT=*                           
//IN       DD  DSN=&&TEMP1,                       
//             DISP=(OLD,DELETE)                  
//OUT      DD  DSN=&&TEMP2,                       
//             DISP=(,PASS),                      
//             UNIT=SYSDA,                        
//             SPACE=(CYL,(1,1),RLSE),            
//             DCB=(RECFM=FB,LRECL=290)           
//TOOLIN   DD  DSN=&&CTL01,                       
//             DISP=(OLD,PASS)                    



This copies first occurence of records from input to output based on the data in position 1 to 15 characters.


Ex:
I/P
1111aaaa
1111bbbb
2222cccc
2222aaaa
4444ssss
3333dddd
3333bbbb
5555dddd


O/P
1111aaaa
2222cccc
4444ssss
3333bbbb
5555dddd

File-aid to copy records based on condition



//PARMTMP0 EXEC  PGM=PARMIN,                                    
//             PARM='$$DD01 COPY IF=(195,GT,C''20090923'')'     
//SYSIN    DD  DSN=&&CTL00,                                     
//             DISP=(,PASS),                                    
//             UNIT=SYSDA,                                      
//             SPACE=(80,3)                                     
//*                                                             
//STEP010  EXEC PGM=FILEAID         
//SYSPRINT DD  SYSOUT=*                                              
//DD01     DD  DSN=PCCCN.CN2125DP.RECYCLE.CHGO.DTLS,                 
//             DISP=SHR                                              
//DD01O    DD  DSN=&&TEMP1,                                          
//             DISP=(,PASS),                                         
//             UNIT=SYSDA,                                           
//             SPACE=(CYL,(1,1),RLSE),                               
//             DCB=RECFM=FB                                          
//SYSIN    DD  DSN=&&CTL00,                                          
//             DISP=(OLD,PASS)                                   


This copies the data from input to output based on the condition in CTL00 parm, where temporary internal parmlib is used.
                            
                                       

To copy few fields from input file to output using Sort

//STEP030  EXEC  PGM=SORT                                              
//SYSOUT   DD  SYSOUT=*                                                
//SORTIN   DD  DSN=PCCUL.DC69.OFFLINE.ARCHIVE(0),                      
//             DISP=SHR                                                
//SORTOUT  DD  DSN=TCCPU.DC69.OFFLINE.SORTED.NEW,                      
//             DISP=(,CATLG,DELETE),                                   
//             UNIT=SYSDA,                                             
//             SPACE=(CYL,(300,150),RLSE)                              
//SYSIN    DD  *                                                       
  SORT FIELDS=(2,10,CH,A,12,3,PD,A,15,2,PD,A,17,4,CH,A)                
  INCLUDE COND=(2,10,CH,EQ,C'ELELA01158',OR,2,10,CH,EQ,C'ELELA01167',  
               OR,2,10,CH,EQ,C'ELELA01169',OR,2,10,CH,EQ,C'ELELA01271',
               OR,2,10,CH,EQ,C'ELELA01272',OR,2,10,CH,EQ,C'ELELA01274',
               OR,2,10,CH,EQ,C'ELELA01275',OR,2,10,CH,EQ,C'ELELA01281',
               OR,2,10,CH,EQ,C'ELELA01293',OR,2,10,CH,EQ,C'ELELA01368',
               OR,2,10,CH,EQ,C'ELELA01370',OR,2,10,CH,EQ,C'ELELA01390')
  OUTREC FIELDS=(2,19,50,1)                                            
//*


This sorts the input file based on the condition
and copies the data to output if the criteria is met in position 2,10 and copies only 19 characters starting from position 2 and 1 character from position 50. So output length will be 20characters