Example: using external files

The following example shows the use of an external file in several programs. COPY statements ensure that each subprogram contains an identical description of the file.

The following table describes the main program and subprograms.

Name Function
ef1 The main program, which calls all the subprograms and then verifies the contents of a record area
ef1openo Opens the external file for output and checks the file status code
ef1write Writes a record to the external file and checks the file status code
ef1openi Opens the external file for input and checks the file status code
ef1read Reads a record from the external file and checks the file status code
ef1close Closes the external file and checks the file status code

Each program uses three copybooks:

  • efselect is placed in the FILE-CONTROL paragraph:
    
    Select ef1 
    Assign To ef1
    File Status Is efs1
    Organization Is Sequential.
    
  • effile is placed in the FILE SECTION:
    
    Fd ef1 Is External
              Record Contains 80 Characters
              Recording Mode F.
    01  ef-record-1.
        02 ef-item-1  Pic X(80).
    
  • efwrkstg is placed in the WORKING-STORAGE SECTION:
    
    01  efs1          Pic 99 External.
    

Input/output using external files


 IDENTIFICATION DIVISION.
 Program-Id.
     ef1.
*
* This main program controls external file processing.
*
 ENVIRONMENT DIVISION.
 Input-Output Section.
 File-Control.
     Copy efselect.
 DATA DIVISION.
 FILE SECTION.
     Copy effile.
 WORKING-STORAGE SECTION.
     Copy efwrkstg.
 PROCEDURE DIVISION.
     Call "ef1openo"
     Call "ef1write"
     Call "ef1close"
     Call "ef1openi"
     Call "ef1read"
     If ef-record-1 = "First record" Then
       Display "First record correct"
     Else
       Display "First record incorrect"
       Display "Expected: " "First record"
       Display "Found   : " ef-record-1
     End-If
     Call "ef1close"
     Goback.
 End Program ef1.
 IDENTIFICATION DIVISION.
 Program-Id.
     ef1openo.
*
* This program opens the external file for output.
*
 ENVIRONMENT DIVISION.
 Input-Output Section.
 File-Control.
     Copy efselect.
 DATA DIVISION.
 FILE SECTION.
     Copy effile.
 WORKING-STORAGE SECTION.
     Copy efwrkstg.
 PROCEDURE DIVISION.
     Open Output ef1
     If efs1 Not = 0
       Display "file status " efs1 " on open output"
       Stop Run
     End-If
     Goback.
 End Program ef1openo.
 IDENTIFICATION DIVISION.
 Program-Id.
     ef1write.
*
* This program writes a record to the external file.
*
 ENVIRONMENT DIVISION.
 Input-Output Section.
 File-Control.
     Copy efselect.
 DATA DIVISION.
 FILE SECTION.
     Copy effile.
 WORKING-STORAGE SECTION.
     Copy efwrkstg.
 PROCEDURE DIVISION.
     Move "First record" to ef-record-1
     Write ef-record-1
     If efs1 Not = 0
       Display "file status " efs1 " on write"
       Stop Run
     End-If
     Goback.
 End Program ef1write.
 Identification Division.
 Program-Id.
     ef1openi.
*
* This program opens the external file for input.
*
 ENVIRONMENT DIVISION.
 Input-Output Section.
 File-Control.
     Copy efselect.
 DATA DIVISION.
 FILE SECTION.
     Copy effile.
 WORKING-STORAGE SECTION.
     Copy efwrkstg.
 PROCEDURE DIVISION.
     Open Input ef1
     If efs1 Not = 0
       Display "file status " efs1 " on open input"
       Stop Run
     End-If
     Goback.
 End Program ef1openi.
 Identification Division.
 Program-Id.
     ef1read.
*
* This program reads a record from the external file.
*
 ENVIRONMENT DIVISION.
 Input-Output Section.
 File-Control.
     Copy efselect.
 DATA DIVISION.
 FILE SECTION.
     Copy effile.
 WORKING-STORAGE SECTION.
     Copy efwrkstg.
 PROCEDURE DIVISION.
     Read ef1
     If efs1 Not = 0
       Display "file status " efs1 " on read"
       Stop Run
     End-If
     Goback.
 End Program ef1read.
 Identification Division.
 Program-Id.
     ef1close.
*
* This program closes the external file.
*
 ENVIRONMENT DIVISION.
 Input-Output Section.
 File-Control.
     Copy efselect.
 DATA DIVISION.
 FILE SECTION.
     Copy effile.
 WORKING-STORAGE SECTION.
     Copy efwrkstg.
 PROCEDURE DIVISION.
     Close ef1
     If efs1 Not = 0
       Display "file status " efs1 " on close"
       Stop Run
     End-If
     Goback.
 End Program ef1close.