Example: Dynamic Table Load
IDENTIFICATION DIVISION.
PROGRAM-ID. DYNAMIC-TABLE-LOAD.
AUTHOR. BILL ROGERS.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT TABLE-FILE
ASSIGN TO 'C:\PCOBWIN\ROGERS\TABL.DAT'
ORGANIZATION IS LINE SEQUENTIAL.
SELECT EMPLOYEE-FILE
ASSIGN TO 'C:\PCOBWIN\ROGERS\EMPL.DAT'
ORGANIZATION IS LINE SEQUENTIAL.
SELECT REPORT-FILE
ASSIGN TO 'C:\PCOBWIN\ROGERS\REPORT.TXT'
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD TABLE-FILE
DATA RECORD IS TABLE-RECORD.
01 TABLE-RECORD.
02 TABLE-CLASS PIC X.
02 TABLE-TEXT PIC X(15).
FD EMPLOYEE-FILE
DATA RECORD IS EMPLOYEE-RECORD.
01 EMPLOYEE-RECORD.
02 EMPLOYEE-ID PIC X(5).
02 EMPLOYEE-NAME PIC X(25).
02 EMPLOYEE-CLASS PIC X.
FD REPORT-FILE
DATA RECORD IS REPORT-RECORD.
01 REPORT-RECORD PIC X(80).
WORKING-STORAGE SECTION.
01 EMP-CLASS-TABLE.
02 EMP-CLASS-ITEM OCCURS 1 TO 50 TIMES
DEPENDING ON NUMBER-OF-CLASSES
INDEXED BY CLASS-INDEX.
03 EMP-CLASS PIC X.
03 EMP-TEXT PIC X(15).
01 NUMBER-OF-CLASSES PIC 99 VALUE ZERO.
01 DETAIL-LINE.
02 DETAIL-ID PIC X(5).
02 PIC X(5) VALUE SPACES.
02 DETAIL-NAME PIC X(25).
02 PIC X(5) VALUE SPACES.
02 DETAIL-CLASS PIC X(15).
01 EOF-FLAG PIC X.
88 END-OF-FILE VALUE 'Y'.
PROCEDURE DIVISION.
MAINLINE.
PERFORM LOAD-THE-TABLE.
PERFORM STARTUP-ROUTINE.
PERFORM THE-LOOP
UNTIL END-OF-FILE.
PERFORM EOJ-ROUTINE.
STOP RUN.
LOAD-THE-TABLE.
OPEN INPUT TABLE-FILE.
MOVE 'N' TO EOF-FLAG.
READ TABLE-FILE
AT END MOVE 'Y' TO EOF-FLAG.
MOVE SPACES TO EMP-CLASS-TABLE.
PERFORM LOAD-TABLE-ITEMS
VARYING CLASS-INDEX FROM 1 BY 1
UNTIL CLASS-INDEX > 50
OR END-OF-FILE.
CLOSE TABLE-FILE.
LOAD-TABLE-ITEMS.
MOVE TABLE-CLASS TO EMP-CLASS (CLASS-INDEX).
MOVE TABLE-TEXT TO EMP-TEXT (CLASS-INDEX).
ADD 1 TO NUMBER-OF-CLASSES.
READ TABLE-FILE
AT END MOVE 'Y' TO EOF-FLAG.
STARTUP-ROUTINE.
OPEN INPUT EMPLOYEE-FILE.
OPEN OUTPUT REPORT-FILE.
MOVE 'N' TO EOF-FLAG.
READ EMPLOYEE-FILE
AT END MOVE 'Y' TO EOF-FLAG.
THE-LOOP.
MOVE EMPLOYEE-ID TO DETAIL-ID.
MOVE EMPLOYEE-NAME TO DETAIL-NAME.
SET CLASS-INDEX TO 1.
SEARCH EMP-CLASS-ITEM
AT END MOVE 'UNKNOWN' TO DETAIL-CLASS
WHEN EMPLOYEE-CLASS = EMP-CLASS (CLASS-INDEX)
MOVE EMP-TEXT (CLASS-INDEX) TO DETAIL-CLASS.
WRITE REPORT-RECORD FROM DETAIL-LINE.
READ EMPLOYEE-FILE
AT END MOVE 'Y' TO EOF-FLAG.
EOJ-ROUTINE.
CLOSE EMPLOYEE-FILE.
CLOSE REPORT-FILE.
Input: TABL.DAT
1SEASONAL WORKER
2SENIOR MANAGER
3MAINTENANCE
4PROBATIONARY
5SUPERVISOR
6HOUSEKEEPING
7THE BIG CHEESE
Input: EMPL.DAT
00001DONALD DUCK 5
00002MINNIE MOUSE 2
00003HUEY 1
00004DEWEY 1
00005LOUIE 1
00006MICKEY MOUSE 7
Output: REPORT.TXT
00001 DONALD DUCK SUPERVISOR
00002 MINNIE MOUSE SENIOR MANAGER
00003 HUEY SEASONAL WORKER
00004 DEWEY SEASONAL WORKER
00005 LOUIE SEASONAL WORKER
00006 MICKEY MOUSE THE BIG CHEESE
Cobol Home