Kuk
14 de junio de 2016, 14:53
Me tiré unas horas entendiendo qué hace este código... He usado siempre el DFSORT, el ICETOOL es relativamente nuevo y viene a ser la evolución del DFSORT. He formateado registros y filtrado con IFTHEN pero este ejemplo me ha impresionado :shok:
//SORT EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//INF DD DISP=SHR,DSN=&INFILE
//OUTF DD DISP=OLD,DSN=&PILOTE
//*
//TMP DD DISP=MOD,DSN=&&TEMP,UNIT=SYSDA,SPACE=(CYL,(5,15))
//TMPH DD DISP=MOD,DSN=&&TEMP1,UNIT=SYSDA,SPACE=(CYL,(1,5))
//TMPH2 DD DISP=MOD,DSN=&&TEMP2,UNIT=SYSDA,SPACE=(CYL,(1,5))
//TMPD DD DISP=MOD,DSN=&&TEMP3,UNIT=SYSDA,SPACE=(CYL,(5,15))
//TMPD2 DD DISP=MOD,DSN=&&TEMP4,UNIT=SYSDA,SPACE=(CYL,(1,5))
//*
//TOOLIN DD *
COPY FROM(INF) USING(CPY1)
SELECT FROM(TMPH) TO(TMPH2) ON(7,17,ZD) FIRST USING(CPY2)
SELECT FROM(TMPD) TO(TMPD2) ON(7,17,ZD) FIRST USING(CPY3)
COPY JKFROM TO(TMP) USING(CPY4)
COPY FROM(TMP) TO(OUTF) USING(CPY5)
/*
//CPY1CNTL DD *
INREC BUILD=(SEQNUM,6,PD,42:X'00001C',45:X'0000001C',49: 1,1,51:1,450)
OUTREC IFTHEN=(WHEN=GROUP,
BEGIN=(51,1,ZD,EQ,0),
END=(51,1,ZD,EQ,6),
PUSH=(7:52,17))
SORT FIELDS=(7,17,ZD,A)
OUTFIL FNAMES=TMPH,INCLUDE=(51,1,ZD,EQ,0)
OUTFIL FNAMES=TMPD,INCLUDE=(51,1,ZD,NE,0)
OUTFIL FNAMES=TMP,INCLUDE=(51,1,ZD,NE,0),
IFTHEN=(WHEN=GROUP,
BEGIN=(51,1,ZD,EQ,1),
END=(51,1,ZD,GT,5),
PUSH=(24:52,25))
/*
//CPY2CNTL DD *
SUM FIELDS=(42,3,PD)
/*
//CPY3CNTL DD *
SUM FIELDS=(45,4,PD)
/*
//CPY4CNTL DD *
JOINKEYS F1=TMPH2,FIELDS=(7,17,A)
JOINKEYS F2=TMPD2,FIELDS=(7,17,A)
REFORMAT FIELDS=(F1:1,44,F2:45,4,F1:49,452)
/*
//CPY5CNTL DD *
SORT FIELDS=(7,17,ZD,A,1,6,PD,A)
OUTREC BUILD=(SEQNUM,6,PD,7:7,494)
OUTFIL FNAMES=OUTF,IFTHEN=(WHEN=(1,6,PD,EQ,1),
OVERLAY=(24:DATENS(4MD),32:TIMENS(24),38:C'DNAX'))
/*
//SORT EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//INF DD DISP=SHR,DSN=&INFILE
//OUTF DD DISP=OLD,DSN=&PILOTE
//*
//TMP DD DISP=MOD,DSN=&&TEMP,UNIT=SYSDA,SPACE=(CYL,(5,15))
//TMPH DD DISP=MOD,DSN=&&TEMP1,UNIT=SYSDA,SPACE=(CYL,(1,5))
//TMPH2 DD DISP=MOD,DSN=&&TEMP2,UNIT=SYSDA,SPACE=(CYL,(1,5))
//TMPD DD DISP=MOD,DSN=&&TEMP3,UNIT=SYSDA,SPACE=(CYL,(5,15))
//TMPD2 DD DISP=MOD,DSN=&&TEMP4,UNIT=SYSDA,SPACE=(CYL,(1,5))
//*
//TOOLIN DD *
COPY FROM(INF) USING(CPY1)
SELECT FROM(TMPH) TO(TMPH2) ON(7,17,ZD) FIRST USING(CPY2)
SELECT FROM(TMPD) TO(TMPD2) ON(7,17,ZD) FIRST USING(CPY3)
COPY JKFROM TO(TMP) USING(CPY4)
COPY FROM(TMP) TO(OUTF) USING(CPY5)
/*
//CPY1CNTL DD *
INREC BUILD=(SEQNUM,6,PD,42:X'00001C',45:X'0000001C',49: 1,1,51:1,450)
OUTREC IFTHEN=(WHEN=GROUP,
BEGIN=(51,1,ZD,EQ,0),
END=(51,1,ZD,EQ,6),
PUSH=(7:52,17))
SORT FIELDS=(7,17,ZD,A)
OUTFIL FNAMES=TMPH,INCLUDE=(51,1,ZD,EQ,0)
OUTFIL FNAMES=TMPD,INCLUDE=(51,1,ZD,NE,0)
OUTFIL FNAMES=TMP,INCLUDE=(51,1,ZD,NE,0),
IFTHEN=(WHEN=GROUP,
BEGIN=(51,1,ZD,EQ,1),
END=(51,1,ZD,GT,5),
PUSH=(24:52,25))
/*
//CPY2CNTL DD *
SUM FIELDS=(42,3,PD)
/*
//CPY3CNTL DD *
SUM FIELDS=(45,4,PD)
/*
//CPY4CNTL DD *
JOINKEYS F1=TMPH2,FIELDS=(7,17,A)
JOINKEYS F2=TMPD2,FIELDS=(7,17,A)
REFORMAT FIELDS=(F1:1,44,F2:45,4,F1:49,452)
/*
//CPY5CNTL DD *
SORT FIELDS=(7,17,ZD,A,1,6,PD,A)
OUTREC BUILD=(SEQNUM,6,PD,7:7,494)
OUTFIL FNAMES=OUTF,IFTHEN=(WHEN=(1,6,PD,EQ,1),
OVERLAY=(24:DATENS(4MD),32:TIMENS(24),38:C'DNAX'))
/*