Page 1 of 1

Help required in generating the footer in a specific format

PostPosted: Tue Dec 15, 2009 12:43 pm
by siva219734
Hi All,

I have a requirement in which I need to prepare footer in a specific format mentioned below.

Sample Input dataset(FB,LRECL=537):
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8....
ABC ABC ABC ABC ABC  2009-12-14-01.00.00.000000ABC 123 123 123 123 123 123 123 1....
ABC ABC ABC ABC ABC  2009-12-14-02.00.00.000000ABC 123 123 123 123 123 123 123 1....
ABC ABC ABC ABC ABC  2009-12-14-03.00.00.000000ABC 123 123 123 123 123 123 123 1....
ABC ABC ABC ABC ABC  2009-12-14-04.00.00.000000ABC 123 123 123 123 123 123 123 1....


Sample Output dataset:
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8....
ABC ABC ABC ABC ABC  2009-12-14-01.00.00.000000ABC 123 123 123 123 123 123 123 1....
ABC ABC ABC ABC ABC  2009-12-14-02.00.00.000000ABC 123 123 123 123 123 123 123 1....
ABC ABC ABC ABC ABC  2009-12-14-03.00.00.000000ABC 123 123 123 123 123 123 123 1....
ABC ABC ABC ABC ABC  2009-12-14-04.00.00.000000ABC 123 123 123 123 123 123 123 1....
SOURCEF_15122009151220091412200900:00:001412200923:59:59APPL V 1.0        82


Footer format:
COLS: 1-7 - FILE NAME
COLS: 8    - Filler(UNDERSCORE)
COLS: 9-16 - SYSTEM DATE(Format – MMDDYYYY)
COLS: 17-24 -SYSTEM DATE(Format – MMDDYYYY)
COLS: 25-32 -VALUE FROM INPUT FILE AT THE COLS: 22-32(Format converted to – MMDDYYYY)
COLS: 33-40 -HARD CODED TEXT(00:00:00)
COLS: 41-48 -VALUE FROM INPUT FILE AT THE COLS: 22-32(Format converted to – MMDDYYYY)
COLS: 49-56 -HARD CODED TEXT(23:59:59)
COLS: 57-62 -HARD CODED TEXT(APPL V)
COLS: 63-66 -HARD CODED TEXT(1.00)
COLS: 67-76 -INPUT FILE RECORD COUNT


I have a JCL which prepares the footer in the format above. Please hlep me in extracting the date from the input file from the specific columns from the input dataset and prepare the footer in the format mentioned above.

 OPTION COPY                                             
  OUTFIL REMOVECC,                                         
   TRAILER1=('SOURCEF_',9:DATENS=(DM4),17:DATENS=(DM4),   
   25:DATENS=(DM4),33:'00:00:00',41:DATENS=(DM4),         
   49:'23:59:59',57:'APPL V 1.0',CT)                       


Where CT is the record count extracted from the previous step.

Thanks in advance.

Regards,
Siva

Re: Help required in generating the footer in a specific format

PostPosted: Mon Jan 11, 2010 6:58 pm
by siva219734
I did it myself.!

Re: Help required in generating the footer in a specific format

PostPosted: Tue Jan 12, 2010 12:26 am
by dick scherrer
Good to hear it is working - thanks for letting us know :)

If you post your solution, it will probably help someone with a similar requirement later. . .

d

Re: Help required in generating the footer in a specific format

PostPosted: Tue Jan 12, 2010 11:48 am
by siva219734
Here it is. Please note that this JCL and REXX has been developed as per my requirement. I have posted the generalized version of the code.

The Temp dataset &&B003 in STEP30 and and STEP50 is the one which is created by the UNLOAD step in one of the previous step in the same JCL(not shown here).

Please let me know in case of any queries.

Thanks

JCL:
//********************************************************************
//* EXTRACT THE RECORD COUNT FROM THE TEMP. FILE             
//********************************************************************
//STEP030 EXEC PGM=ICEMAN,COND=(0,NE)                                 
//SORTIN    DD DSN=&&B003,DISP=SHR    <---- TEMP. DS created in the previous DB2 table unload step.
//SORTOUT   DD DSN=&&COUNT,DISP=(NEW,PASS,DELETE),                   
//             SPACE=(CYL,(1,1),RLSE),LRECL=100,                     
//             UNIT=SYSDA,RECFM=VB                                   
//SYSOUT    DD SYSOUT=*                                               
//SYSPRINT  DD SYSOUT=*                                               
//SYSPRNT   DD SYSOUT=*                                               
//SYSSNAP   DD SYSOUT=*                                               
//SYSABOUT  DD SYSOUT=*                                               
//SYSUDUMP  DD SYSOUT=*                                               
//SYSIN     DD *
   OPTION COPY                           
   OUTFIL REMOVECC,NODETAIL,             
   TRAILER1=(COUNT=(M11,LENGTH=12))
/*     
//********************************************************************
//* PREPARE THE FOOTER IN THE REQUIRED FORMAT                         
//********************************************************************
//*                                                                   
//STEP040 EXEC PGM=IKJEFT01,PARM='FOOT003'                           
//SYSEXEC   DD DSN=&HLQ..YOUR.PROCLIB,DISP=SHR                       
//DATEDD    DD DSN=&HLQ..DWHSQL.DATE.FILE,DISP=SHR                 
//COUNTDD   DD DSN=&&COUNT,DISP=SHR                               
//FOOTERDD  DD DSN=&&FOOTER,DISP=(NEW,PASS,DELETE),               
//             SPACE=(CYL,(1,1),RLSE),LRECL=100,                   
//             UNIT=SYSDA,RECFM=VB                                 
//SYSPRINT  DD SYSOUT=*                                           
//SYSABOUT  DD SYSOUT=*                                           
//SYSUDUMP  DD SYSOUT=*                                           
//SYSOUT    DD SYSOUT=*                                           
//SYSTSIN   DD DUMMY                                               
//SYSTSPRT  DD SYSOUT=*                                           
//****************************************************************
//*   MERGE THE FILE001 EXTRACT AND THE FOOTER FILE               
//****************************************************************
//*                                                               
//STEP050 EXEC PGM=SORT,COND=(0,NE)                               
//SORTIN    DD DSN=&&B003,DISP=SHR                                 
//          DD DSN=&&FOOTER,DISP=SHR                               
//SORTOUT   DD DSN=&HLQ..APPLCT.DWH.FILE001.GDG(+1),           
//             DISP=(NEW,CATLG,),                                 
//             DCB=(SYS1.MODEL,RECFM=VB,LRECL=100),UNIT=(SYSDA,3),     
//             SPACE=(CYL,(50,10),RLSE)                                 
//SYSPRINT  DD SYSOUT=*                                                 
//SYSOUT    DD SYSOUT=*                                                 
//SYSIN     DD *
 SORT FIELDS=COPY     
/*     
//**********************************************************************
//* DELETE THE TEMPORARY DATASETS CREATED IN THE ABOVE STEPS           
//**********************************************************************
//*                                                                     
//STEP070 EXEC PGM=IEFBR14                                             
//DELDD     DD DSN=&&COUNT,DISP=(OLD,DELETE,DELETE)                     
//          DD DSN=&&FOOTER,DISP=(OLD,DELETE,DELETE)                   
//          DD DSN=&&B003,DISP=(OLD,DELETE,DELETE)                     
//SYSPRINT  DD SYSOUT=*                                                 
//SYSOUT    DD SYSOUT=*                                                 
//**********************************************************************


REXX Program:

/* REXX  FOOTER                                                 */ 
/*--------------------------------------------------------------*/ 
/* PREPARE FOOTER FOR THE DWH EXTRACT                           */ 
/* CALCULATE THE SYSTEM DATE IN MMDDYYYY FORMAT                 */ 
/*--------------------------------------------------------------*/ 
    SAY "START"                                                     
    DAT = DATE(C)                                                   
    SAY "SYSTEM DATE(GREG FORMAT):" DAT                             
    SDAT1 = DATE('S',DAT,'C')                                       
          SDD = SUBSTR(SDAT1,7,2)                                   
          SMM = SUBSTR(SDAT1,5,2)                                   
          SYYYY = SUBSTR(SDAT1,1,4)                                 
          SDAT = (SMM)(SDD)(SYYYY)                                 
    SAY "SYSTEM DATE(MMDDYYYY FORMAT):" SDAT                       
/*--------------------------------------------------------------*/ 
/* READ THE DATE FILE(DATEDD) TO GET THE GREG DATE              */ 
/* CALCULATE THE DWH EXTRACTION DATE IN MMDDYYYY FORMAT         */ 
/*--------------------------------------------------------------*/ 
    D = DATE(C)                                                     
    DOLD = D - 1                                                   
    SAY ' EXTRACTION DATE(GREG FORMAT) SHOULD BE:' DOLD               
    "EXECIO * DISKR DATEDD (STEM DTEI."                               
    PARSE VAR DTEI.1 DFILE ' '                                       
           DATE_PREV = DFILE - 1                                     
        IF DOLD ¬= DATE_PREV THEN                                     
           DO                                                         
  SAY ''                                                             
  M1='SYSTEM DATE - 1 DAY value did not match with the Extraction'   
  M2='date. Hence the Extraction date is prepared from the date file,'
  M3='instead of the SYSTEM DATE - 1 DAY.'                           
  SAY '' (M1)                                                         
  SAY '' (M2)                                                         
  SAY '' (M3)                                                         
  SAY ''                                                             
           DOLD    = DATE_PREV                                       
           END                                                       
    EDAT1 = DATE('S',DOLD,'C')                                       
          EDD = SUBSTR(EDAT1,7,2)                                     
          EMM = SUBSTR(EDAT1,5,2)                                     
          EYYYY = SUBSTR(EDAT1,1,4)                                   
          EDAT = (EMM)(EDD)(EYYYY)                                     
  SAY ''                                                               
  M4='The Extraction Date and the FILE Record Count would be:'       
  SAY '' (M4)                                                           
    SAY "EXTRACTION DATE(GREG FORMAT):" DFILE                           
    SAY "EXTRACTION DATE(MMDDYYYY FORMAT):" EDAT                       
/*--------------------------------------------------------------*/     
/* READ THE COUNT FILE(COUNTDD) TO GET THE FILE RECORD COUNT */     
/*--------------------------------------------------------------*/     
    "EXECIO * DISKR COUNTDD (STEM DTEI."                               
    PARSE VAR DTEI.1 RCOUNT ' '                                         
    SAY "NUMBER OF RECORDS IN FILE FILE:" RCOUNT                     
/*--------------------------------------------------------------*/     
/* ASSIGN CONSTANTS TO THE TEMP. VARIABLES W1,W2,W3 AND W4      */     
/*--------------------------------------------------------------*/     
  W1 = 'FILE001_'                                                       
  W2 = '00:00:00'                                                       
  W3 = '23:59:59'                                                       
  W4 = 'APPLCT 1.0'                                                     
/*--------------------------------------------------------------*/     
/*PREPARE THE FOOTER IN REQUIRED FORMAT                         */     
/*--------------------------------------------------------------*/     
  RECORD1 = (W1)(EDAT)(SDAT)(EDAT)(W2)(EDAT)(W3)(W4)(RCOUNT)           
/*--------------------------------------------------------------*/     
/*DEFINE A NEW STACK AND PUSH THE FOOTER IN TO THE OUTPUT FILE  */     
/*--------------------------------------------------------------*/     
  "NEWSTACK"                                                           
  PUSH RECORD1                                                         
  "EXECIO 1 DISKW FOOTERDD"                                             
  "DELSTACK"                                                           
  SAY "FOOTER GENERATED:" RECORD1                                       
  SAY "END"                                                             
RETURN                                                                 
/*--------------------------------------------------------------*/     
/*  END OF PROGRAM                                              */     
/*--------------------------------------------------------------*/     

Re: Help required in generating the footer in a specific format

PostPosted: Tue Jan 12, 2010 11:54 pm
by dick scherrer
Thank you for posting your solution :)

d