October 5, 2026
Sample File Read and Write with Arrays – COBOL Program
This sample Program demonstrates on how to read a file and load it into an array and use that array to search reference data. Based on the data findings write it into the output file.
- Input Customer File – Customer Transactions file containing Customer Number, Name and Country code.
- Input Country code reference file – Contains the Country code and its Name
- Output File – Output file should contain the Customer name & Country Name.
Program Flow – If this needs to be coded without loading the country reference data into an array, for each customer transaction file record, country reference file needs to opened, read until the country code found and close it. Like that for every customer transaction record, country reference file needs to be opened, read & closed. This causes too many I/O operations. To avoid this and make the program efficient we use arrays in this program.
IDENTIFICATION DIVISION.
PROGRAM-ID. ARRAY1.
*
* THIS PROGRAM IS TO DEMONSTRATE FILES AND ARRAY CONCEPTS
*
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT CUST-TRAN ASSIGN TO TRANDD
FILE STATUS IS WW-STATUS1.
*
SELECT CNTRY-REF ASSIGN TO CNTRY
FILE STATUS IS WW-STATUS2.
*
SELECT CUST-OUT ASSIGN TO OUTDD
FILE STATUS IS WW-STATUS3.
*
DATA DIVISION.
FILE SECTION.
FD CUST-TRAN.
01 WW-CUST-IN-REC.
05 WW-CUST-NUM-I PIC 999.
05 WW-CUST-NAME-I PIC X(10).
05 WW-CNTRY-CD-I PIC XX.
*
FD CNTRY-REF.
01 WW-CNTRY-REC.
05 WW-CNTRY-REF-CD PIC XX.
05 WW-CNTRY-NAME PIC X(10).
*
FD CUST-OUT.
01 WW-CUST-OUT-REC.
05 WW-CUST-NAME-O PIC X(10).
05 WW-CNTRY-NAME-O PIC X(10).
*
WORKING-STORAGE SECTION.
*
01 WW-CNTR-ARRAY.
05 WW-CNTRY-REF OCCURS 10 TIMES.
10 WW-CNTRY-CD-A PIC XX.
10 WW-CNTRY-NAME-A PIC X(10).
*
01 WW-STATUS.
05 WW-STATUS1 PIC XX.
05 WW-STATUS2 PIC XX.
05 WW-STATUS3 PIC XX.
01 WW-FLAGS.
05 WW-CNTRY-FLAG PIC X.
88 WW-CNTRY-FOUND VALUE 'Y'.
88 WW-CNTRY-NOT-FOUND VALUE 'N'.
01 WW-COUNTERS.
05 WW-READ-CNT PIC 99.
05 WW-WRITE-CNT PIC 99.
05 WW-SUB1 PIC 99.
05 WW-SUB2 PIC 99.
*
PROCEDURE DIVISION.
*
PERFORM 100-OPEN-FILES.
PERFORM 150-LOAD-CNTRY-CODES.
PERFORM 200-PROCESS-INPUT UNTIL WW-STATUS1 = '10'.
PERFORM 300-CLOSE-FILES.
DISPLAY 'READ COUNT:' WW-READ-CNT.
DISPLAY 'WRITE COUNT:' WW-WRITE-CNT.
STOP RUN.
*
100-OPEN-FILES.
*
OPEN INPUT CUST-TRAN
IF WW-STATUS1 NOT = '00'
DISPLAY 'FILE1 OPEN FAILED WITH:' WW-STATUS1
END-IF.
*
OPEN INPUT CNTRY-REF
IF WW-STATUS2 NOT = '00'
DISPLAY 'FILE2 OPEN FAILED WITH:' WW-STATUS2
END-IF.
*
OPEN INPUT CUST-OUT
IF WW-STATUS3 NOT = '00'
DISPLAY 'FILE3 OPEN FAILED WITH:' WW-STATUS3
END-IF.
*
150-LOAD-CNTRY-CODES.
*
PERFORM UNTIL WW-STATUS2 = '10'
READ CNTRY-REF
ADD 1 TO WW-SUB1
IF WW-STATUS2 = '00'
MOVE WW-CNTRY-REF-CD TO WW-CNTRY-CD-A(WW-SUB1)
MOVE WW-CNTRY-NAME TO WW-CNTRY-NAME-A(WW-SUB1)
ELSE
IF WW-STATUS2 = '10'
DISPLAY 'END OF REF FILE REACHED '
ELSE
DISPLAY 'READ CNTRY FILE FAILED WITH:' WW-STATUS2
END-IF
END-IF
END-PERFORM.
200-PROCESS-INPUT.
*
PERFORM 250-READ-CUST-INPUT.
PERFORM 350-CHECK-THE-REF-ARRAY.
PERFORM 600-WRITE-OUTPUT
.
250-READ-CUST-INPUT.
*
READ CUST-TRAN
IF WW-STATUS2 = '00'
ADD 1 TO WW-READ-CNT
ELSE
IF WW-STATUS2= '10'
DISPLAY 'END OF FILE REACHED'
ELSE
DISPLAY 'READ FILE1 FAILED WITH:' WW-STATUS2
END-IF
END-IF.
*
300-CLOSE-FILES.
*
CLOSE CUST-TRAN
IF WW-STATUS1 NOT = '00'
DISPLAY 'FILE1 CLSE FAILED WITH:' WW-STATUS1
END-IF.
*
CLOSE CNTRY-REF
IF WW-STATUS2 NOT = '00'
DISPLAY 'FILE2 CLSE FAILED WITH:' WW-STATUS2
END-IF.
*
CLOSE CUST-OUT
IF WW-STATUS3 NOT = '00'
DISPLAY 'FILE3 CLSE FAILED WITH:' WW-STATUS3
END-IF.
*
350-CHECK-THE-REF-ARRAY.
*
SET WW-CNTRY-NOT-FOUND TO TRUE.
PERFORM VARYING WW-SUB2 FROM 1 BY 1 UNTIL
WW-SUB2 > 10 OR WW-CNTRY-FOUND
IF WW-CNTRY-CD-I = WW-CNTRY-CD-A(WW-SUB2)
SET WW-CNTRY-FOUND TO TRUE
END-IF
END-PERFORM.
IF WW-CNTRY-FOUND
MOVE WW-CNTRY-NAME-A(WW-SUB2) TO WW-CNTRY-NAME-O
MOVE WW-CUST-NAME-I TO WW-CUST-NAME-O
ELSE
MOVE 'INVALID CNTRY' TO WW-CNTRY-NAME-O
MOVE WW-CUST-NAME-I TO WW-CUST-NAME-O
END-IF.
600-WRITE-OUTPUT.
*
WRITE WW-CUST-OUT-REC.
IF WW-STATUS3 = '00'
ADD 1 TO WW-WRITE-CNT
ELSE
DISPLAY 'WRITE FAILED WITH:' WW-STATUS3
END-IF.
