There are two tables. The first table, in working-storage, allows a lookup of a weather station code to find the weather station name. For example, MDW refers to Chicago-Midway. This is an example of the SEARCH verb. The second table is in the input record and consists of twelve hourly temperatures for each station. PERFORM VARYING is used to process the twelve elements of the table.
IDENTIFICATION DIVISION.
PROGRAM-ID. ANOTHER-TABLE.
AUTHOR. BILL ROGERS.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT IN-FILE
ASSIGN TO 'D:\WEATHER.TXT'
ORGANIZATION IS LINE SEQUENTIAL.
SELECT OUT-FILE
ASSIGN TO 'D:\REPORT.TXT'
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD IN-FILE
DATA RECORD IS IN-ITEM.
01 IN-ITEM.
02 IN-WEATHER-STATION PIC X(3).
02 IN-TEMPERATURES.
03 IN-HOURLY-TEMP OCCURS 12 TIMES PIC 9(3).
FD OUT-FILE
DATA RECORD IS OUT-ITEM.
01 OUT-ITEM PIC X(80).
WORKING-STORAGE SECTION.
01 END-OF-FILE-FLAG PIC X VALUE SPACE.
88 END-OF-FILE VALUE 'Y'.
01 STATION-TEXT.
02 FILLER PIC X(20) VALUE "AZOKalamazoo".
02 FILLER PIC X(20) VALUE "BUFBuffalo".
02 FILLER PIC X(20) VALUE "CVGCincinnati".
02 FILLER PIC X(20) VALUE "GRRGrand Rapids".
02 FILLER PIC X(20) VALUE "HOUHouston-Hobby".
02 FILLER PIC X(20) VALUE "LAXLos Angeles".
02 FILLER PIC X(20) VALUE "MDWChicago-Midway".
02 FILLER PIC X(20) VALUE "MKGMuskegon".
02 FILLER PIC X(20) VALUE "NRTTokyo-Narita".
02 FILLER PIC X(20) VALUE "ORDChicago-O'Hare".
01 STATION-TABLE REDEFINES STATION-TEXT.
02 WX-STATION OCCURS 10 TIMES
INDEXED BY WX-INDEX.
03 WX-CODE PIC X(3).
03 WX-NAME PIC X(17).
01 WS-HIGH-TEMP PIC 9(3).
01 WS-LOW-TEMP PIC 9(3).
01 SUB-X PIC 99 COMP.
01 HEADER-LINE.
02 FILLER PIC X(25) VALUE SPACES.
02 FILLER PIC X(25) VALUE '12 Hour Weather Summary'.
01 HEADER-LINE-2.
02 FILLER PIC X(31) VALUE 'Station'.
02 FILLER PIC X(9) VALUE 'High'.
02 FILLER PIC X(3) VALUE 'Low'.
01 DETAIL-LINE.
02 DETAIL-STATION-NAME PIC X(17).
02 FILLER PIC X(15) VALUE SPACES.
02 DETAIL-HIGH-TEMP PIC ZZ9.
02 FILLER PIC X(5) VALUE SPACES.
02 DETAIL-LOW-TEMP PIC ZZ9.
PROCEDURE DIVISION.
MAINLINE.
PERFORM INITIALIZATION-ROUTINE.
PERFORM THE-LOOP
UNTIL END-OF-FILE.
PERFORM EOJ-ROUTINE.
STOP RUN.
INITIALIZATION-ROUTINE.
OPEN INPUT IN-FILE.
OPEN OUTPUT OUT-FILE.
PERFORM PRINT-THE-HEADERS.
READ IN-FILE
AT END MOVE 'Y' TO END-OF-FILE-FLAG.
THE-LOOP.
* Use the table to lookup the station name:
SET WX-INDEX TO 1.
SEARCH WX-STATION
AT END MOVE 'ERROR' TO DETAIL-STATION-NAME
WHEN IN-WEATHER-STATION = WX-CODE (WX-INDEX)
MOVE WX-NAME (WX-INDEX) TO DETAIL-STATION-NAME.
* Check this station's hourly temperatures for the high and low:
MOVE ZERO TO WS-HIGH-TEMP.
MOVE 999 TO WS-LOW-TEMP.
PERFORM FIND-THE-HI-AND-LO
VARYING SUB-X FROM 1 BY 1
UNTIL SUB-X > 12.
MOVE WS-HIGH-TEMP TO DETAIL-HIGH-TEMP.
MOVE WS-LOW-TEMP TO DETAIL-LOW-TEMP.
* Print the results and read the next input record:
WRITE OUT-ITEM FROM DETAIL-LINE.
READ IN-FILE
AT END MOVE 'Y' TO END-OF-FILE-FLAG.
FIND-THE-HI-AND-LO.
IF IN-HOURLY-TEMP (SUB-X) > WS-HIGH-TEMP
MOVE IN-HOURLY-TEMP (SUB-X) TO WS-HIGH-TEMP.
IF IN-HOURLY-TEMP (SUB-X) < WS-LOW-TEMP
MOVE IN-HOURLY-TEMP (SUB-X) TO WS-LOW-TEMP.
EOJ-ROUTINE.
CLOSE IN-FILE.
CLOSE OUT-FILE.
PRINT-THE-HEADERS.
WRITE OUT-ITEM FROM HEADER-LINE.
MOVE SPACES TO OUT-ITEM.
WRITE OUT-ITEM.
WRITE OUT-ITEM FROM HEADER-LINE-2.
MKG020021024025026028026024020018015016 GRR012016020026030033032032031029027023 AZO022021029032034037035033032031030029 CVG055057057058060061061063059055054051 ORD040043045048049055054053052049043040 MDW066069070072074077080081080076073069 HOU077075073072069069074075076079081080 LAX070074077077074073072070070068065061 NRT044046046048050052054053051048046045 BUF025028030035040046049046044041039038
12 Hour Weather Summary
Station High Low
Muskegon 28 15
Grand Rapids 33 12
Kalamazoo 37 21
Cincinnati 63 51
Chicago-O'Hare 55 40
Chicago-Midway 81 66
Houston-Hobby 81 69
Los Angeles 77 61
Tokyo-Narita 54 44
Buffalo 49 25