ILE COBOL 解説書

SEARCH の例

次の例では、入力データと一致する品目を見つけるために在庫テーブルを検索します。 キーは ITEM-NUMBER です。

.. 1 ... ... 2 ... ... 3 ... ... 4 ... ... 5 ... ... 6 ... ... 7
 
 DATA DIVISION.
 FILE SECTION.
 FD  SALES-DATA
     BLOCK CONTAINS 1 RECORDS
     RECORD CONTAINS 80 CHARACTERS
     LABEL RECORDS STANDARD
     DATA RECORD IS SALES-REPORTS.
 01  SALES-REPORTS                  PIC X(80).
 FD  PRINTED-REPORT
     BLOCK CONTAINS 1 RECORDS
     RECORD CONTAINS 132 CHARACTERS
     LABEL RECORDS OMITTED
     DATA RECORD IS PRINTER-OUTPUT.
 01  PRINTER-OUTPUT                 PIC X(132).
 FD  INVENTORY-DATA
     BLOCK CONTAINS 1 RECORDS
     RECORD CONTAINS 40 CHARACTERS
     LABEL RECORDS STANDARD
     DATA RECORD IS INVENTORY-RECORD.
 01  INVENTORY-RECORD.
     03  I-NUMBER                  PIC 9(4).
     03  INV-ID                    PIC X(26).
     03  I-COST                    PIC 9(8)V99.
 WORKING-STORAGE SECTION.
 01  EOF-SW              PIC X      VALUE "N".
 01  EOF-SW2             PIC X      VALUE "N".
 01  SUB1                PIC 99.
 01  RECORDS-NOT-FOUND   PIC 9(5)   VALUE ZEROS.
 01  TOTAL-COSTS         PIC 9(10)  VALUE ZEROS.
 01  HOLD-INPUT-DATA.
     03  INVENTORY-NUMBER          PIC 9999.
     03  PURCHASE-COST             PIC 9(4)V99.
     03  PURCHASE-DATE             PIC 9(6).
     03  FILLER                    PIC X(64).
 01  PRINTER-SPECS.
     03  PRINT-LINE.
         05  OUTPUT-ITEM-NUMBER    PIC ZZZ9.
         05  FILLER                PIC X(48) VALUE SPACES.
         05  TOTAL-COSTS-0         PIC $(8).99.
 01  PRODUCT-TABLE.
     05  INVENTORY-NUMBERS         OCCURS 50 TIMES
                                   ASCENDING KEY ITEM-NUMBER
                                   INDEXED BY INDEX-1.
             07  ITEM-NUMBER       PIC 9(4).
             07  ITEM-DESCRIPTION  PIC X(26).
             07  ITEM-COST         PIC 9(8)V99. 

.. 1  ... ... 2 ... ... 3 ... ... 4 ... ... 5 ... ... 6 ... ...7
 
 PROCEDURE DIVISION.
 100-START-IT.
     OPEN INPUT SALES-DATA INVENTORY-DATA OUTPUT PRINTED-REPORT.
     MOVE HIGH-VALUES TO PRODUCT-TABLE.
     PERFORM READ-INVENTORY-DATA.
 LOAD-TABLE-ROUTINE.
     PERFORM LOAD-IT VARYING SUB1 FROM 1 BY 1 UNTIL SUB1 > 50
                     OR EOF-SW2 = "Y".
     PERFORM 110-READ-IT.
 200-MAIN-ROUTINE.
     PERFORM PROCESS-DATA UNTIL EOF-SW = "Y".
     MOVE TOTAL-COSTS TO TOTAL-COSTS-0.
     PERFORM WRITE-REPORT THRU WRITE-REPORT-EXIT.
     DISPLAY "RECORDS NOT FOUND - " RECORDS-NOT-FOUND
       UPON MYTUBE.
 STOP RUN.
 PROCESS-DATA.
     SEARCH ALL INVENTORY-NUMBERS
       AT END PERFORM KEY-NOT-FOUND THRU NOT-FOUND-EXIT
       WHEN ITEM-NUMBER (INDEX-1) = INVENTORY-NUMBER
          MOVE ITEM-NUMBER (INDEX-1) TO OUTPUT-ITEM-NUMBER
          MOVE ITEM-COST (INDEX-1) TO TOTAL-COSTS-0
          ADD ITEM-COST (INDEX-1) TO TOTAL-COSTS
          PERFORM WRITE-REPORT THRU WRITE-REPORT-EXIT.
     PERFORM 110-READ-IT.
 KEY-NOT-FOUND.
     ADD 1 TO RECORDS-NOT-FOUND.
 NOT-FOUND-EXIT.
     EXIT.
 LOAD-IT.
     MOVE INVENTORY-RECORD TO INVENTORY-NUMBERS (SUB1).
     PERFORM READ-INVENTORY-DATA.
 WRITE-REPORT.
     WRITE PRINTER-OUTPUT FROM PRINTER-SPECS.
 WRITE-REPORT-EXIT.
     EXIT.
 READ-INVENTORY-DATA.
     READ INVENTORY-DATA
       AT END MOVE "Y" TO EOF-SW2.
 110-READ-IT.
     READ SALES-DATA INTO HOLD-INPUT-DATA
       AT END MOVE "Y" TO EOF-SW.


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]