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