Deleting Record from Fixed Length PS File Example


Info! Physical deletion of a record from sequential file is not possible. Only logical deletion (spacing out) is possible.

Scenario - Deleting a record (EMP-ID = E0004) from a variable length PS (Sequential) file.

Input file -

 BROWSE    MATEPK.EMPLOYEE.INPFILE                    Line 00000000 Col 001 080 
 Command ===>                                                  Scroll ===> CSR  
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
********************************* Top of Data **********************************
E0001EMPLOYEE1      MANAGER   0000200000
E0002EMPLOYEE2      TL        0000150000
E0003EMPLOYEE3      SE        0000050000
E0004EMPLOYEE4      SSE       0000040000
E0005EMPLOYEE5      SE        0000040000
******************************** Bottom of Data ********************************

Code -

----+----1----+----2----+----3----+----4----+----5----+
       IDENTIFICATION DIVISION.
       PROGRAM-ID. SEQFILDL.
       AUTHOR. MTH.
 
       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
      * EMPFILE Definition
           SELECT EMPFILE ASSIGN TO INPUT01
           ORGANIZATION IS SEQUENTIAL
           ACCESS MODE  IS SEQUENTIAL
           FILE STATUS  IS WS-FS1.

       DATA DIVISION.
       FILE SECTION.
      * EMPFILE structure definition
       FD EMPFILE
           RECORD CONTAINS 80  CHARACTERS
           BLOCK  CONTAINS 800 CHARACTERS
           RECORDING MODE  IS  F
           DATA RECORD     IS EMPFILE-RECORD.  
      * EMPFILE record structure definition 
       01 EMPFILE-RECORD.
          05 EMP-ID        PIC X(05).
          05 EMP-NAME      PIC X(15).
          05 EMP-DESG      PIC X(10).
          05 EMP-SALARY    PIC 9(10).
          05 FILLER        PIC X(40).

       WORKING-STORAGE SECTION.
       01 WS-VAR.
          05 WS-FS1        PIC 9(02).
          05 WS-EOF-SW     PIC X(01).
             88 WS-EOF         VALUE 'Y'.
             88 WS-NOT-EOF     VALUE 'N'.
       PROCEDURE DIVISION.
      * Opening EMPFILE for reading
           OPEN I-O EMPFILE.

      * Loop for reading all records from EMPFILE
           SET  WS-NOT-EOF      TO  TRUE.
           PERFORM UNTIL WS-EOF
                READ EMPFILE
                         AT END SET WS-EOF TO TRUE     
                     NOT AT END PERFORM 1000-UPDATE-REC
                                   THRU 1000-EXIT      
                END-READ
           END-PERFORM.
      * Closing EMPFILE
           CLOSE EMPFILE.
           STOP RUN.

       1000-UPDATE-REC.

           IF EMP-ID EQUAL "E0004"
              MOVE SPACES TO EMPFILE-RECORD
              REWRITE EMPFILE-RECORD
           END-IF

       1000-EXIT.
            EXIT.

Run JCL -

//MATEPKF JOB MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*                                                 
//STEP01  EXEC PGM=SEQFILDL
//STEPLIB  DD  DSN=MATEPK.COBOL.LOADLIB,DISP=SHR
//INPUT01  DD  DSN=MATEPK.EMPLOYEE.INPFILE,DISP=SHR 
//SYSOUT   DD  SYSOUT=*

File After REWRITE -

 BROWSE    MATEPK.EMPLOYEE.INPFILE                    Line 00000000 Col 001 080 
 Command ===>                                                  Scroll ===> CSR  
********************************* Top of Data **********************************
E0001EMPLOYEE1      MANAGER   0000200000
E0002EMPLOYEE2      TL        0000150000
E0003EMPLOYEE3      SE        0000050000
                                        
E0005EMPLOYEE5      SE        0000040000
******************************** Bottom of Data ********************************

Explaining Example -

In the above example:

  • Sequential file (PS file) is used as an input file and trying to delete the record with employee ID (E0004).
  • File reading starts from the first record and continue till the end of the file.
  • It validates the employee ID (E0004) and if it matches, space out the entire record and rewrite it to the file.

As specified above, only logical deletion is possible. So we need to space out the entire record and rewrite it.