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

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

book

Article ID: 9207

calendar_today

Updated On:

Products

File Master Plus for IMS File Master Plus for DB2 for z/OS

Issue/Introduction

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)                            
/*