Есть два файла FILE1.DATA и FILE2.DATA. Для расчета процента (количество записей в FILE1 / количество записей в FILE2) * 100 с использованием DFSORT в мейнфрейме. И установка кода возврата, если он пересекает порог (90%).
//********Extracting Unique records data*****************
//SORTT000 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=SAMPLE.DATA1,DISP=SHR
//SORTOUT DD DSN=FILE1.DATA,
// SPACE=(2790,(5376,1075),RLSE),
// UNIT=TSTSF,
// DCB=(RECFM=FB,LRECL=05,BLKSIZE=0),
// DISP=(NEW,CATLG,DELETE)
//SYSIN DD *
SORT FIELDS=(10,5,CH,A)
OUTREC FIELDS=(1:10,5)
SUM FIELDS=NONE
/*
//************Getting count of records*****************
//STEP001 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//IN1 DD DISP=SHR,DSN=FILE1.DATA
//IN2 DD DISP=SHR,DSN=FILE2.DATA
//OUT1 DD DSN=FILE1.DATA.COUNT,
// SPACE=(2790,(5376,1075),RLSE),
// UNIT=TSTSF,
// DCB=(RECFM=FB,LRECL=06,BLKSIZE=0),
// DISP=(NEW,CATLG,DELETE)
//OUT2 DD DSN=FILE2.DATA.COUNT,
// SPACE=(2790,(5376,1075),RLSE),
// UNIT=TSTSF,
// DCB=(RECFM=FB,LRECL=06,BLKSIZE=0),
// DISP=(NEW,CATLG,DELETE)
//TOOLIN DD *
COUNT FROM(IN1) WRITE(OUT1) DIGITS(6)
COUNT FROM(IN2) WRITE(OUT2) DIGITS(6)
/*
//*******Calculating percentage and if above 90% setting RC 04*****
//STEP002 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=FILE2.DATA.COUNT,DISP=SHR
// DD DSN=FILE1.DATA.COUNT,DISP=SHR
//SORTOUT DD DSN=FILE.DATA.COUNT.OUT,
// SPACE=(2790,(5376,1075),RLSE),
// UNIT=TSTSF,
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0),
// DISP=(NEW,CATLG,DELETE)
//SETRC DD SYSOUT=*
//SYSIN DD *
INREC IFTHEN=(WHEN=INIT,BUILD=(1,6,X,6X'00',SEQNUM,1,ZD,80:X)),
IFTHEN=(WHEN=(14,1,ZD,EQ,2),OVERLAY=(8:1,6))
SORT FIELDS=(7,1,CH,A),EQUALS
SUM FIELDS=(8,4,BI,12,2,BI)
OUTREC OVERLAY=(15:X,1,6,ZD,DIV,+2,M11,LENGTH=6,X,
(8,6,ZD,MUL,+100),DIV,1,6,ZD,MUL,+100,EDIT=(TTT.TT))
OUTFIL FNAMES=SETRC,NULLOFL=RC4,INCLUDE=(23,6,CH,GT,C'090.00')
OUTFIL BUILD=(05:C'TOTAL NUMBER RECRODS IN FILE2 : ',1,6,/,
05:C'TOTAL NUMBER RECRODS IN FILE1 : ',8,6,/,
05:C'PERCENTAGE : ',23,6,/,
80:X)
//*
- Проблема, с которой я столкнулся, заключается в том, что наборы данных FILE1.DATA.COUNT и FILE1.DATA.COUNT создаются длиной 15 записей, несмотря на упоминание LRECL 6. (обратите внимание, это был вопрос, который существовал, когда был написан первый ответ, и сейчас не относится к приведенному выше коду).
- Можем ли мы объединить оба шага в один?
- Что конкретно это,
(15:X,1,6,ZD,DIV,+2,M11,LENGTH=6,X, (8,6,ZD,MUL,+100),DIV,1,6,ZD,MUL,+100,EDIT=(TTT.TT))
, означает?