Monday, 4 May 2020

KSDS File Dynamic access START and READ NEXT

PROGRAM TO PROCESS KSDS FILE Dynamically (use of START and READ NEXT):

       IDENTIFICATION DIVISION.
       PROGRAM-ID. KSREDNXT.
       AUTHOR. SANDIP WALSINGE.
       DATE-WRITTEN. 2020-05-04.
       DATE-COMPILED. 2020-05-04.
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SOURCE-COMPUTER. IBM-390.
       OBJECT-COMPUTER. IBM-390.
       SPECIAL-NAMES.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT INFILE ASSIGN TO DD1
           ORGANIZATION IS INDEXED
           ACCESS MODE IS DYNAMIC
           RECORD KEY IS EIDI
           FILE STATUS IS FS1.
       DATA DIVISION.
       FILE SECTION.
       FD INFILE.
       01 INREC.
          05 EIDI           PIC X(05).
          05 FILLER         PIC X(01).
          05 ENAMEI         PIC X(06).
          05 FILLER         PIC X(01).
          05 ESALI          PIC 9(05).
          05 FILLER         PIC X(62).
       WORKING-STORAGE SECTION.
       01 WS-VARIABLES.
          05 WS-COUNT       PIC 9(04) VALUE ZERO.
          05 WS-REC.
             10 WS-EID      PIC X(05).
             10 FILLER      PIC X(01).
             10 WS-ENAME    PIC X(06).
             10 FILLER      PIC X(01).
             10 WS-SAL      PIC 9(05).
             10 FILLER      PIC X(64).
          05 FS1            PIC X(02).
          05 FS2            PIC X(02).
          05 FILE-END       PIC X(01).
             88 EOF         VALUE 'Y'.
             88 NOT-EOF     VALUE 'N'.
       PROCEDURE DIVISION.
           SET NOT-EOF TO TRUE
           PERFORM OPEN-PARA
           PERFORM PROC-PARA UNTIL EOF
           PERFORM CLOS-PARA
           PERFORM STOP-PARA.
       OPEN-PARA.
           OPEN INPUT INFILE
           DISPLAY 'OPEN INFILE  STATUS : ' FS1
           MOVE '21600' TO EIDI
           EXIT.
       PROC-PARA.
           IF FS1 = '00'
              START INFILE
                  KEY IS EQUAL TO EIDI
                  INVALID KEY
                     DISPLAY ' KEY IS INVALID '
                  NOT INVALID KEY
                     DISPLAY ' VALID KEY PROVIDED ' EIDI
                     PERFORM READ-NEXT-PARA
              END-START
           END-IF.
           EXIT.
       READ-NEXT-PARA.
           READ INFILE NEXT RECORD
              INTO WS-REC
              AT END
                 SET EOF TO TRUE
              NOT AT END
                 DISPLAY ' RECORD READ ' WS-REC
                 ADD 1       TO WS-COUNT
           END-READ
           EXIT.
       CLOS-PARA.
           CLOSE INFILE
           DISPLAY 'CLOSE INFILE  STATUS : ' FS1
           EXIT.
       STOP-PARA.
           DISPLAY ' TOTAL READ COUNT : ' WS-COUNT.
           STOP RUN.


JCL TO EXECUTE ABOVE COBOL PROGRAM:

//Z57658SA JOB (3P10),'KSDS EXEC JCL',                       
//         CLASS=A,                                         
//         MSGCLASS=Q,                                       
//         NOTIFY=Z57658                                     
//*                                                         
//JCL1 JCLLIB ORDER=Z57658.SOURCE.PROCLIB                   
//*                                                         
//STEP1 EXEC IGYWCLG,MEM=KSREDNXT                           
//COBOL.SYSIN  DD DSN=Z57658.SOURCE.COBOL(&MEM),DISP=SHR     
//LKED.SYSLMOD DD DSN=Z57658.SOURCE.LOADLIB(&MEM),DISP=SHR   
//GO.DD1       DD DSN=Z57658.TEST.KSDS,DISP=SHR             
//GO.SYSIN     DD *                                         
//*                                                       



INPUT DATA FROM KSDS FILE:

View             Z57658.TEST.KSDS     
Command ===>                         
                            Type KSDS 
Key                                   
       <===>----10---+----2----+----3--
****** ****  Top of data  ****       
000001 21000 MANJIT 15500             
000002 21400 SANDIP 25500             
000003 21500 MANDIP 35500             
000004 21600 RANDIP 45500             
000005 21700 BALDIP 55500             
000006 21800 KULDIP 65500             
000007 21900 NITIN  75500             
000008 22000 ANKIT  85500             

****** ****  End of data  ****       



OUTPUT OF PROGRAM :
********************************* TOP OF DATA *
OPEN INFILE  STATUS : 00                     
 VALID KEY PROVIDED 21600                     
 RECORD READ 21600 RANDIP 45500               
 RECORD READ 21700 BALDIP 55500               
 RECORD READ 21800 KULDIP 65500               
 RECORD READ 21900 NITIN  75500               
 RECORD READ 22000 ANKIT  85500               
CLOSE INFILE  STATUS : 00                     
 TOTAL READ COUNT : 0005                     

******************************** BOTTOM OF DATA

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =   


READ KSDS FILE WITH PARTIAL KEY (HALF KEY) 

IDENTIFICATION DIVISION.                                        
PROGRAM-ID. KSPARTKY.                                             
ENVIRONMENT DIVISION.                                           
INPUT-OUTPUT SECTION.                                           
FILE-CONTROL.                                                   
           SELECT INFILE ASSIGN TO DD1                                 
           ORGANIZATION IS INDEXED                                     
           ACCESS MODE IS RANDOM                                       
           RECORD KEY IS EMP-KEY                                            
           FILE STATUS IS FS1.                                         
       DATA DIVISION.                                                  
       FILE SECTION.                                                   
       FD INFILE.                                                      
       01 INREC.                                                       
           05 EMP-KEY.
                 10 E-BRANCH    PIC X(04). 
                 10 EID               PIC X(05). 
           05 FILLER        PIC X(01).                                   
           05 ENAME       PIC X(06).                                   
           05 FILLER        PIC X(01).                                   
           05 ESAL           PIC 9(06).                                   
           05 FILLER        PIC X(57).                                   
       WORKING-STORAGE SECTION.                                        
       01 FS1                   PIC X(02).                                   
       01 SWITCH          PIC X(01).                                   
           88 EOF              VALUE 'Y'.                                   
           88 NOT-EOF     VALUE 'N'.      
       PROCEDURE DIVISION.                                             
           PERFORM OPEN-PARA.                                          
           PERFORM START-PARA.                                          
           PERFORM CLOSE-PARA.                                         
           STOP RUN.                                                   
       OPEN-PARA.                                                     
           OPEN INPUT INFILE                                          
           DISPLAY ' OPEN FILE STATUS ' FS1.                          
           MOVE 'PUNE' TO E-BRANCH
           MOVE SPACES TO EID
           SET EOF TO TRUE.
       START-PARA.                                                     
           IF FS1 = '00'                                              
               START INFILE                                            
                      KEY IS GREATER THAN OR EQUAL TO EMP-KEY
                      INVALID KEY                                          
                                 DISPLAY ' KEY IS INVALID'                         
                      NOT INVALID KEY                                      
                                PERFORM READ-PARA UNTIL EOF 
               END-START                                               
           END-IF.                                                    
       READ-PARA.                                                    
           READ INFILE 
                   NEXT RECORD
                          AT END 
                                 SET EOF TO TRUE
                          NOT AT END
                                 IF E-BRANCH = 'PUNE' 
                                     DISPLAY INREC
                                 ELSE
                                     SET EOF TO TRUE
                                  END-IF
             END-READ.      

       CLOSE-PARA.                                                    
           CLOSE INFILE                                               
           DISPLAY ' CLOSE FILE STATUS ' FS1.                         


Input file data:
PUNE21400 SANDIP 55000
PUNE21500 MANDIP 56000
PUNE21600 BALDIP 57000
PUNE21700 KULDIP 58000
MUMB21800 RANDIP 59000
HYDB21900 MANJIT 60100
KOLK22000 RANJIT 60200

Output will be:
PUNE21500 MANDIP 56000
PUNE21600 BALDIP 57000
PUNE21700 KULDIP 58000

1 comment:

  1. gracias, excelente Post. !!!
    Solo falto el UNTIL FS1 = '10' en el perform read-next-para

    ReplyDelete