Client wants to duplicate the following block of layout and place it after the original block and modify the value.
SEGMENT_NAME=SASC90---2020;
SEGMENT_START_TEXT=2020;
SEGMENT_START_OPERATOR=EQ;
SEGMENT_START_SEARCH_LINE=02;
SEGMENT_START_SEARCH_COLUMN=11;
SEGMENT_START_BOUNDARY=PAGE;
SEGMENT_STOP_TEXT=2020;
SEGMENT_STOP_OPERATOR=NE;
SEGMENT_STOP_SEARCH_LINE=02;
SEGMENT_STOP_SEARCH_COLUMN=11;
SEGMENT_STOP_BOUNDARY=PREVPAGE;
SEGMENT_OVERRIDE_JESDELIVERY_OUTPUT_NAME=T2020;
*EGMENT_PERSIST=YES;
*
Initial sample JCL works if there is only one block.
Input file has
SEGMENT_NAME=SASC90---2020;
SEGMENT_START_TEXT=2020;
SEGMENT_START_OPERATOR=EQ;
SEGMENT_START_SEARCH_LINE=02;
SEGMENT_START_SEARCH_COLUMN=11;
SEGMENT_START_BOUNDARY=PAGE;
SEGMENT_STOP_TEXT=2020;
SEGMENT_STOP_OPERATOR=NE;
SEGMENT_STOP_SEARCH_LINE=02;
SEGMENT_STOP_SEARCH_COLUMN=11;
SEGMENT_STOP_BOUNDARY=PREVPAGE;
SEGMENT_OVERRIDE_JESDELIVERY_OUTPUT_NAME=T2020;
*EGMENT_PERSIST=YES;
//DUP1 EXEC PGM=CAWABATC,REGION=2M
//STEPLIB DD DSN=FMMVS.CDBILOAD,
// DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//DD01 DD DISP=SHR,DSN=INPUT.FILE(LAYOUT1)
//DD02 DD DISP=SHR,DSN=OUTPUT.FILE(LAYOUT2)
//WORK1 DD DSN=&&WORK1,RECFM=FB,LRECL=80,SPACE=(CYL,(1,1))
//WORK2 DD DSN=&&WORK2,RECFM=FB,LRECL=80,SPACE=(CYL,(1,1))
//WORK3 DD DSN=&&WORK3,RECFM=FB,LRECL=80,SPACE=(CYL,(1,1))
//SYSIN DD *
READ,
INFILE(DD01,NOCLOSE),
WRITE(WORK1),
IF(1,8,EQ,T'SEGMENT_'),CHANGE(1,0,EQ,T'2020',T'2030'),WRITE(WORK2),
IF(1,8,EQ,T'*EGMENT_'),WRITE(WORK2),STOP
READ INFILE(DD01),SKIP(1),WRITE(WORK3)
COPY INFILE(WORK1),OUTFILE(DD02,NOCLOSE)
COPY INFILE(WORK2),OUTFILE(DD02,NOCLOSE)
COPY INFILE(WORK3),OUTFILE(DD02)
/*
Output file result are
SEGMENT_NAME=SASC90---2020;
SEGMENT_START_TEXT=2020;
SEGMENT_START_OPERATOR=EQ;
SEGMENT_START_SEARCH_LINE=02;
SEGMENT_START_SEARCH_COLUMN=11;
SEGMENT_START_BOUNDARY=PAGE;
SEGMENT_STOP_TEXT=2020;
SEGMENT_STOP_OPERATOR=NE;
SEGMENT_STOP_SEARCH_LINE=02;
SEGMENT_STOP_SEARCH_COLUMN=11;
SEGMENT_STOP_BOUNDARY=PREVPAGE;
SEGMENT_OVERRIDE_JESDELIVERY_OUTPUT_NAME=T2020;
*EGMENT_PERSIST=YES;
SEGMENT_NAME=SASC90---2030;
SEGMENT_START_TEXT=2030;
SEGMENT_START_OPERATOR=EQ;
SEGMENT_START_SEARCH_LINE=02;
SEGMENT_START_SEARCH_COLUMN=11;
SEGMENT_START_BOUNDARY=PAGE;
SEGMENT_STOP_TEXT=2030;
SEGMENT_STOP_OPERATOR=NE;
SEGMENT_STOP_SEARCH_LINE=02;
SEGMENT_STOP_SEARCH_COLUMN=11;
SEGMENT_STOP_BOUNDARY=PREVPAGE;
SEGMENT_OVERRIDE_JESDELIVERY_OUTPUT_NAME=T2030;
*EGMENT_PERSIST=YES;
If the input PDS member is to be replaced then use following sample JCL:
//DUP1 EXEC PGM=CAWABATC,REGION=2M
//STEPLIB DD DSN=FMMVS.CDBILOAD,
// DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//DD01 DD DISP=SHR,DSN=INPUT.FILE(LAYOUT1)
//WORK1 DD DSN=&&WORK1,RECFM=FB,LRECL=80,SPACE=(CYL,(1,1))
//WORK2 DD DSN=&&WORK2,RECFM=FB,LRECL=80,SPACE=(CYL,(1,1))
//WORK3 DD DSN=&&WORK3,RECFM=FB,LRECL=80,SPACE=(CYL,(1,1))
//WORK4 DD DSN=&&WORK4,RECFM=FB,LRECL=80,SPACE=(CYL,(1,1)),
// DISP=(NEW,PASS)
//SYSIN DD *
READ,
INFILE(DD01,NOCLOSE),
WRITE(WORK1),
IF(1,8,EQ,T'SEGMENT_'),CHANGE(1,0,EQ,T'2020',T'2030'),WRITE(WORK2),
IF(1,8,EQ,T'*EGMENT_'),WRITE(WORK2),STOP
READ INFILE(DD01),SKIP(1),WRITE(WORK3)
COPY INFILE(WORK1),OUTFILE(WORK4,NOCLOSE)
COPY INFILE(WORK2),OUTFILE(WORK4,NOCLOSE)
COPY INFILE(WORK3),OUTFILE(WORK4)
/*
//COPY1 EXEC PGM=CAWABATC,REGION=2M
//STEPLIB DD DSN=FMMVS.CDBILOAD,
// DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//DD01 DD DISP=(OLD,DELETE),DSN=&&WORK4
//DD02 DD DISP=SHR,DSN=OUTPUT.FILE(LAYOUT1)
//SYSIN DD *
COPY,
INFILE(DD01),
OUTFILE(DD02),
REPLACEMEM(Y)
/*
However this solution did not work since there is more block that have the same text that IF statement checking.
Here is the sample JCL that isolate block of layout to be duplicate and modified.
//COPY1 EXEC PGM=CAWABATC,REGION=2M
//STEPLIB DD DSN=FMMVS.CDBILOAD,
// DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//DD01 DD DISP=SHR,DSN=INPUT.FILE(LAYOUT1)
//COPY1 DD DSN=&©1,RECFM=FB,LRECL=80,SPACE=(CYL,(1,1)),
// DISP=(NEW,PASS)
//SYSIN DD *
COPY INFILE(DD01),OUTFILE(COPY1),INLIM(302)
/*
//DUP1 EXEC PGM=CAWABATC,REGION=2M
//STEPLIB DD DSN=FMMVS.CDBILOAD,
// DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//DD01 DD DISP=SHR,DSN=INPUT.FILE(LAYOUT1)
//WORK1 DD DSN=&&WORK1,RECFM=FB,LRECL=80,SPACE=(CYL,(1,1))
//WORK2 DD DSN=&&WORK2,RECFM=FB,LRECL=80,SPACE=(CYL,(1,1))
//WORK3 DD DSN=&&WORK3,RECFM=FB,LRECL=80,SPACE=(CYL,(1,1)),
// DISP=(NEW,PASS)
//SYSIN DD *
READ,
INFILE(DD01,NOCLOSE),
SKIP(288),
IF(1,8,EQ,T'SEGMENT_'),CHANGE(1,0,EQ,T'2020',T'2030'),WRITE(WORK1),
IF(1,8,EQ,T'*EGMENT_'),WRITE(WORK1),
IF(1,2,EQ,T'* '),WRITE(WORK1),STOP
READ INFILE(DD01),SKIP(1),WRITE(WORK2)
COPY INFILE(WORK1),OUTFILE(WORK3,NOCLOSE)
COPY INFILE(WORK2),OUTFILE(WORK3)
/*
//COPY2 EXEC PGM=CAWABATC,REGION=2M
//STEPLIB DD DSN=FMMVS.CDBILOAD,
// DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//DD01 DD DISP=(OLD,DELETE),DSN=&©1
//DD02 DD DISP=(OLD,DELETE),DSN=&&WORK3
//DD03 DD DISP=SHR,DSN=OUTPUT.FILE(MODIFY1)
//SYSIN DD *
COPY INFILE(DD01),OUTFILE(DD03,NOCLOSE)
COPY INFILE(DD02),OUTFILE(DD03)
/*