Tables: Weather Station Example


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.

Input:

MKG020021024025026028026024020018015016
GRR012016020026030033032032031029027023
AZO022021029032034037035033032031030029
CVG055057057058060061061063059055054051
ORD040043045048049055054053052049043040
MDW066069070072074077080081080076073069
HOU077075073072069069074075076079081080
LAX070074077077074073072070070068065061
NRT044046046048050052054053051048046045
BUF025028030035040046049046044041039038

Output:

                         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


Cobol Home