Tuesday, November 23, 2010

Split a file

//***********************************************************

//SPLITFLS EXEC PGM=SORT

//***********************************************************

//SYSPRINT DD SYSOUT=*

//SYSOUT DD SYSOUT=*

//SYSUDUMP DD SYSOUT=*

//SORTIN DD DSN=FILE1......,DISP=SHR

//SORTOF01 DD DSN=OUTPUTFILE1.......,

// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,

// SPACE=(CYL,(1,1),RLSE),

// RECFM=FB,LRECL=20

//SORTOF02 DD DSN=OUTPUTFILE2..............,

// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,

// SPACE=(CYL,(1,1),RLSE),

// RECFM=FB,LRECL=20

//SORTOF03 DD DSN=OUTPUTFILE3..............,

// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,

// SPACE=(CYL,(1,1),RLSE),

// RECFM=FB,LRECL=20

//SYSIN DD *

SORT FIELDS=COPY

OUTFIL FILES=01,ENDREC=200

OUTFIL FILES=02,STARTREC=201,ENDREC=400

OUTFIL FILES=03,STARTREC=401,ENDREC=700

//*

Friday, October 22, 2010

COPY desired columns and no duplicates

 //STEP002 EXEC PGM=SORT                                            
//SYSOUT   DD SYSOUT=*                                             
//SORTIN  DD DISP=SHR,DSN=WESTLAW.PROD@B.SPIS.DAILY.LOGRECS.G7030V00
//SORTOUT DD DISP=(NEW,CATLG,DELETE),DSN=U123557.LOGRECS,          
//         DCB=WESTLAW.PROD@B.SPIS.DAILY.LOGRECS.G7030V00,         
//         SPACE=(CYL,(1,10),RLSE),UNIT=SYSDA                      
//SYSIN  DD *                                                      
  SORT FIELDS=(5,18,CH,A)                                          
  SUM FIELDS=NONE                                                  
  OUTREC FIELDS=(5,18)                                             
/*                                                                

Search for 2 strings (String 1 and String 2 in the same member)-not same line

//SEARCH   EXEC PGM=ISRSUPC,                                    
//       PARM=(SRCHCMP,'ANYC,FINDALL,XREF,NOPRTCC,NOSUMS')      
//NEWDD    DD  DSN=input pds,DISP=SHR                           
//OUTDD    DD  SYSOUT=*                                         
//SYSIN    DD  *                                                
 SRCHFOR  'string1'                                             
 SRCHFOR  'string2'                                             

Sort - Find Rep 3

//STEP003  EXEC  PGM=ICEMAN                                     
//SYSOUT    DD  SYSOUT=*                                        
//SORTIN    DD DSN=U123557.PA.D100610.VOL0010.HTML.BK,DISP=SHR  
//SORTOUT   DD DISP=SHR,DSN=U123557.PA.D100610.VOL0010.HTML.BK  
//SYSIN     DD    *                                             
  OPTION COPY                                                   
    INREC FINDREP=(IN=C'padding-top:6px;>&nbsp',                
              OUT=C'padding-top:6px;">&nbsp')                   
/*                                                              

SORT- Find Rep 2

//STEP003  EXEC  PGM=ICEMAN                                        
//SYSOUT    DD  SYSOUT=*                                           
//SORTIN    DD DSN=U123557.PA.D100610.VOL0010.HTML.BK,DISP=SHR     
//SORTOUT   DD DISP=SHR,DSN=U123557.PA.D100610.VOL0010.HTML.BK     
//SYSIN     DD    *                                                
  OPTION COPY                                                      
    INREC FINDREP=(IN=C'htm",OUT=C'tes'')                     
/*                                                                                                                                                            

To restore an archived dataset using IEBGENER

//IEBCMP1A EXEC PGM=IEBGENER                                     
//SYSUT1 DD DISP=SHR,DSN=KEYCITE.PROD@B.AUDIT.ADCIANV.ONLYWL.DN  
//*                                                              
//SYSPRINT DD  SYSOUT=*                                          
//SYSIN    DD  DUMMY                                             
//SYSUT2   DD  DUMMY                                             

GDG create

//STEP1   EXEC PGM=IDCAMS                             
//SYSPRINT DD SYSOUT=*                                
//SYSOUT DD SYSOUT=*                                  
//SYSIN   DD   *                                      
  DEFINE GDG(NAME(WLAWDB.PROD@B.CASE.NEJKAID2) -      
           LIMIT(10)               -                  
           NOEMPTY                 -                  
           SCRATCH)                                   
/*                                                    

The difference between empty and noempty is
EMPTY
specifies that all the generation data sets are to be uncataloged When the maximum is exceeded (each data set's non-VSAM entry is automatically deleted from the catalog).

NOEMPTY
specifies that only the oldest generation data set is to be uncataloged when the maximum is reached.

The difference between scratch and noscratch is

SCRATCH
specifies that the generation data set's DSCB is to be deleted from the volume's VTOC when the generation data set is uncataloged. Direct access device space management (DADSM) removes the data set's DSCB from the VTOC, erases the data set's space on the volume, and makes the space available to other system users. The generation data set ceases to exist. For SMS-managed GDSs, SCRATCH also specifies that the NVR is to be removed from the VVDS when the data set is uncataloged.

NOSCRATCH
specifies that the generation data set's DSCB is not to be removed from the volume's VTOC when the generation data set is uncataloged. The data set's DSCB in the volume's VTOC is left intact and can be used to locate the data set. Your program, however, can process the data set by using a JCL DD statement to describe and allocate the data set.

To check for an empty input file

//VERIFY   EXEC PGM=IEBCOMPR                                       
//SYSUT1   DD DSN=WDA.TC.PRFLR.RELOAD.SERNUMS(0),DISP=SHR          
//SYSUT2   DD DSN=WDA.TC.PRFLR.EMPTY.FILE,DISP=SHR                 
//SYSIN    DD DUMMY                                                
//SYSPRINT DD SYSOUT=*                                             
//*                                             

If full input file, RC=8 is received. If empty, RC=0 as compare condition is satisfied.      
Compare has some restrictions with the number of records in the input file.


The following utility is efficient to check for an input file
//VERIFY   EXEC PGM=IEBPTPCH                             
//SYSUT1   DD DSN=U123557.OUTPUT,DISP=SHR                
//SYSUT2   DD DUMMY                                      
//SYSIN    DD *                                          
  PRINT TYPORG=PS                                        
/*                                                       
//SYSPRINT DD SYSOUT=*                                   
It gives RC=4 when the file is empty and RC=0 when the file is full.       

Copy with IEBGENER and SORT

//STEP1    EXEC PGM=IEBGENER                                           
//SYSIN    DD   DUMMY                                                  
//SYSPRINT DD   SYSOUT=*                                               
//SYSUT1   DD   DISP=SHR,                                              
//         DSN=LEGSERV.PROD.EDC.CA.D100717.T0219.F279892               
//SYSUT2   DD   DISP=(,CATLG),DSN=U123557.TESTFILE1,                   
//         DCB=LEGSERV.PROD.EDC.CA.D100717.T0219.F279892,              
//         UNIT=SYSDA,                                                 
//         SPACE=(CYL,(1,10),RLSE)                                     
//*------------------------------------------------------------------  
//                                                                     
//FIRSTREC EXEC PGM=SORT                                               
//SORTIN   DD DSN=LEGSERV.PROD.EDC.CA.D100717.T0219.F279892.Z,DISP=SHR 
//SORTOUT DD DISP=(,CATLG),DSN=U123557.TESTFILE,UNIT=SYSDA,            
//       DCB=(LEGSERV.PROD.EDC.CA.D100717.T0219.F279892.Z),            
//       SPACE=(CYL,(1,10),RLSE)                                       
//SYSOUT   DD SYSOUT=*                                                 
//SYSIN    DD *                                                        
  SORT FIELDS=(COPY)                                                   

A simple Count

//STEP02  EXEC  PGM=ICETOOL                       
//TOOLMSG DD SYSOUT=*                             
//DFSMSG  DD SYSOUT=*                             
//IN1  DD DSN=U123557.ONLYDB.UUID,DISP=SHR        
//OUT DD SYSOUT=*                                 
//TOOLIN DD *                                     
COPY FROM(IN1) USING(CTL1)                        
/*                                                
//CTL1CNTL DD *                                   
  OUTFIL FNAMES=OUT,REMOVECC,NODETAIL,            
    TRAILER1=('FILE1',5X,COUNT)                   
/*                                                

We get the output in SPOOL
FILE1          537       

Capturing Duplicates in an output file


I was trying out XSUM to capture the duplicates in a separate output file but it was failing with normal SORT.

With ICETOOL ,it works.

Here is the sample I created.

//DOIT EXEC PGM=ICETOOL                                          
//TOOLMSG DD SYSOUT=*                                            
//DFSMSG DD SYSOUT=*                                             
//IN DD DSN=U123557.ONLYDB.UUID,DISP=SHR                         
//OUT DD DSN=U123557.TEST.OUTPUT,DISP=SHR                        
//SORTXSUM DD DSN=U123557.TEST.XSUM,DISP=SHR                     
//TOOLIN DD *                                                     
SELECT FROM(IN) TO(OUT) ON(1,6,CH) FIRST DISCARD(SORTXSUM)       
/*                                                               

                                            

Thursday, July 22, 2010

SORT - Findrep

If there is "40" at posistion 10 AND "09" at position 12 i need to replace the "09" to "90" and write the entire record

if the AND condition is not staisfied i need to write the entire record of the file unaltered to the output file.



//S1    EXEC  PGM=SORT
//SYSOUT    DD  SYSOUT=*
//SORTIN DD *
R01      4009
R02      4010
R03      4109
R04      4009
/*
//SORTOUT DD SYSOUT=*
//SYSIN    DD    *
   OPTION COPY
   INREC IFTHEN=(WHEN=(10,2,CH,EQ,C'40',AND,12,2,CH,EQ,C'09'),
      OVERLAY=(12:C'90'))
/*