Whay this code don't work as I spect?



IBM's flagship sort product DFSORT for sorting, merging, copying, data manipulation and reporting. Includes ICETOOL and ICEGENER

Whay this code don't work as I spect?

Postby javivi » Wed Jan 26, 2011 8:15 pm

Hi I have the next code taht don't work as I espect.

I'm trying to generate 3 files with the last level name as a date.
The first file must be the system date, the second the system date - 1 and the third the system date - 2.
THE CODE

//SORTIN   DD *                                                         
20100102                                                               
//FECHOY    DD DSN=&FECHOY,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)   
//FECMEN1   DD DSN=&FECMEN1,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)   
//FECMEN2   DD DSN=&FECMEN2,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)   
//FECMEN4  DD DSN=DES.FI.LR.BDK.FECMEN4,                               
//            DISP=(,CATLG,CATLG),SPACE=(CYL,(1,1),RLSE),               
//            DCB=(RECFM=FB,BLKSIZE=0,LRECL=80)                         
//SYSOUT   DD SYSOUT=*                                                 
  SORT FIELDS=COPY                                                     
  INREC IFOUTLEN=90,                                                   
  IFTHEN=(WHEN=INIT,OVERLAY=(50:1,8,Y4T,TOJUL=Y4T,                     
        60:50,4,54,3,ZD,SUB,+1,M11,LENGTH=3,                         
        70:50,4,54,3,ZD,SUB,+2,M11,LENGTH=3)),                       
  IFTHEN=(WHEN=(64,3,ZD,EQ,0),                                         
   OVERLAY=(20:60,4,ZD,SUB,+1,M11,LENGTH=4,C'1231')),                 
  IFTHEN=(WHEN=(64,3,ZD,GT,0),                                         
   OVERLAY=(20:60,7,Y4T,TOGREG=Y4T)),                                 
  IFTHEN=(WHEN=(74,3,ZD,EQ,0),                                         
   OVERLAY=(30:70,4,ZD,SUB,+1,M11,LENGTH=4,C'1231')),                 
  IFTHEN=(WHEN=(74,3,ZD,GT,0),                                         
   OVERLAY=(30:70,7,Y4T,TOGREG=Y4T))                                 
  OUTFIL FNAMES=FECHOY,                                                 
   BUILD=(C' LISTC ENT(''EXA7.GM.LR.BDK.GMJDTM3.F',03,06,C''')',80:X)
  OUTFIL FNAMES=FECMEN1,                                               
   BUILD=(C' LISTC ENT(''EXA7.GM.LR.BDK.GMJDTM3.F',22,06,C''')',80:X)
  OUTFIL FNAMES=FECMEN2,                                               
   BUILD=(C' LISTC ENT(''EXA7.GM.LR.BDK.GMJDTM3.F',32,06,C''')',80:X)


The results

 LISTC ENT('EXA7.GM.LR.BDK.GMJDTM3.F100102') 
 LISTC ENT('EXA7.GM.LR.BDK.GMJDTM3.F100101')
 LISTC ENT('EXA7.GM.LR.BDK.GMJDTM3.F      ')     


The last file dn't have the date 091231 as I espect, and I don't know whay. Please can someone help me?

Thanks.
javivi
 
Posts: 47
Joined: Fri Jan 21, 2011 2:53 pm
Has thanked: 0 time
Been thanked: 0 time

Re: Whay this code don't work as I spect?

Postby Frank Yaeger » Thu Jan 27, 2011 2:17 am

You're not using HIT=NEXT for the IFTHEN clauses, so you're not executing all of them as you think you are.

The DFSORT control statements should be:

  SORT FIELDS=COPY                                                     
  INREC IFOUTLEN=90,                                                   
  IFTHEN=(WHEN=INIT,OVERLAY=(50:1,8,Y4T,TOJUL=Y4T,                     
          60:50,4,54,3,ZD,SUB,+1,M11,LENGTH=3,                         
          70:50,4,54,3,ZD,SUB,+2,M11,LENGTH=3)),                       
  IFTHEN=(WHEN=(64,3,ZD,EQ,0),                                         
     OVERLAY=(20:60,4,ZD,SUB,+1,M11,LENGTH=4,C'1231'),HIT=NEXT),       
  IFTHEN=(WHEN=(64,3,ZD,GT,0),                                         
     OVERLAY=(20:60,7,Y4T,TOGREG=Y4T),HIT=NEXT),                       
  IFTHEN=(WHEN=(74,3,ZD,EQ,0),                                         
     OVERLAY=(30:70,4,ZD,SUB,+1,M11,LENGTH=4,C'1231'),HIT=NEXT),       
  IFTHEN=(WHEN=(74,3,ZD,GT,0),                                         
     OVERLAY=(30:70,7,Y4T,TOGREG=Y4T))                                 
  OUTFIL FNAMES=FECHOY,                                                 
     BUILD=(C' LISTC ENT(''EXA7.GM.LR.BDK.GMJDTM3.F',03,06,C''')',80:X)
  OUTFIL FNAMES=FECMEN1,                                               
     BUILD=(C' LISTC ENT(''EXA7.GM.LR.BDK.GMJDTM3.F',22,06,C''')',80:X)
  OUTFIL FNAMES=FECMEN2,                                               
     BUILD=(C' LISTC ENT(''EXA7.GM.LR.BDK.GMJDTM3.F',32,06,C''')',80:X)


The output for FECMEN2 is then:

 LISTC ENT('EXA7.GM.LR.BDK.GMJDTM3.F091231')     


Note that with the Oct, 2010 DFSORT PTF, you can use the new SUBDAYS date field arithmetic function to do this more easily with DFSORT control statements like this:

  OPTION COPY,Y2PAST=2000                                   
  INREC BUILD=(C' LISTC ENT(''EXA7.GM.LR.BDK.GMJDTM3.F',       
       3,6,C''')',80:X)                                       
  OUTFIL FNAMES=FECHOY                                         
  OUTFIL FNAMES=FECMEN1,                                       
     OVERLAY=(37:37,6,Y2T,SUBDAYS,+1,TOGREG=Y2T)               
  OUTFIL FNAMES=FECMEN2,                                       
     OVERLAY=(37:37,6,Y2T,SUBDAYS,+2,TOGREG=Y2T)               
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
User avatar
Frank Yaeger
Global moderator
 
Posts: 1079
Joined: Sat Jun 09, 2007 8:44 pm
Has thanked: 0 time
Been thanked: 15 times


Return to DFSORT/ICETOOL/ICEGENER

 


  • Related topics
    Replies
    Views
    Last post