Следующий код сделает то, что вы хотите. Я основал ввод для файлов длиной 80 байт.
Мой ввод выглядит следующим образом: -
Файл1: -
1RED
1WHITE
1BLUE
1BLUE
1BLUE
1BLUE
1BLUE
1BLUE
1BLUE
1BLUE
1BLUE
1BLUE
1BLUE
1PINK
Файл2: -
21000
22000
23000
24000
25000
Файл3: -
3X1
3X2
3X3
3X4
3X5
Файл4: -
4R1
4R2
4R3
4R4
4R5
4R6
4R7
4R8
4R9
4R10
4R11
4R12
4R13
4R14
4R15
Код будет объединять файлы, как вам нужно, и обрабатывать экземпляры с разным количеством записей, и т. Д. c.
//STEP1 EXEC PGM=ICETOOL
//SYSOUT DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//TOOLMSG DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//IN1 DD DSN=JXB7884.FILE1,DISP=SHR
//IN2 DD DSN=JXB7884.FILE2,DISP=SHR
//IN3 DD DSN=JXB7884.FILE3,DISP=SHR
//IN4 DD DSN=JXB7884.FILE4,DISP=SHR
//M1 DD DSN=&&M1,
// DISP=(MOD,PASS),
// DCB=(RECFM=FB,LRECL=328,BLKSIZE=0,DSORG=PS),
// UNIT=SYSDA,
// SPACE=(TRK,1)
//REPORT DD DSN=JXB7884.REPORT,
// DISP=(NEW,CATLG,DELETE),
// DCB=(RECFM=FB,LRECL=320,BLKSIZE=0,DSORG=PS),
// UNIT=SYSDA,
// SPACE=(TRK,1)
//TOOLIN DD *
COPY FROM(IN1) TO(M1) USING(COP1)
COPY FROM(IN2) TO(M1) USING(COP2)
COPY FROM(IN3) TO(M1) USING(COP3)
COPY FROM(IN4) TO(M1) USING(COP4)
SPLICE FROM(M1) TO(REPORT) ON(321,8,PD) WITHANY -
KEEPNODUPS -
WITH(81,80) WITH(161,80) WITH(241,80) -
USING(SPL1)
/*
//COP1CNTL DD *
OPTION COPY
OUTREC FIELDS=(1,80,240X,321:SEQNUM,8,PD)
/*
//COP2CNTL DD *
OPTION COPY
OUTREC FIELDS=(80X,81:1,80,160X,321:SEQNUM,8,PD)
/*
//COP3CNTL DD *
OPTION COPY
OUTREC FIELDS=(160X,161:1,80,80X,321:SEQNUM,8,PD)
/*
//COP4CNTL DD *
OPTION COPY
OUTREC FIELDS=(240X,241:1,80,321:SEQNUM,8,PD)
/*
//SPL1CNTL DD *
OUTFIL FNAMES=REPORT,OUTREC=(1,320)
/*