How to add a duplicate block of layout(or any records) after and update the value?

Document ID : KB000009207
Last Modified Date : 14/02/2018
Show Technical Document Details
Issue:

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;
*

 

Environment:
Z/OS
Cause:

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. 

Resolution:

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=&&COPY1,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=&&COPY1  
//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)                            
/*