Top
NetCOBOL V11.0 Syntax Samples
FUJITSU Software

1.38.2 SEARCH Statement (format 2)

000010 @OPTIONS MAIN
000020*----------------------------------------------------------------------
000030* The SEARCH statement (format 2) can also perform a random search.
000040*----------------------------------------------------------------------
000050 IDENTIFICATION   DIVISION.
000060 PROGRAM-ID.      SAMPLE.
000070 DATA             DIVISION.
000080 WORKING-STORAGE  SECTION.
000090 01 GET-GOODS     PIC X(15).
000100 01 GET-NUM       PIC 9(4) BINARY.
000110 01 TOTAL         PIC 9(4) BINARY VALUE ZERO.
000120 01 COUNTER       PIC 9(1).
000130 01 PRICE-ED      PIC $$$$$9.
000140 01 TOTAL-ED      PIC ZZZZZ9.
000150 CONSTANT         SECTION.
000160 01 GOODS-DATA.
000170    02            PIC X(15) VALUE "DESKTOP TYPE".
000180    02            PIC 9(4)  VALUE 1500.
000190    02            PIC X(15) VALUE "HARD DISK".
000200    02            PIC 9(4)  VALUE 280.
000210    02            PIC X(15) VALUE "MODEM".
000220    02            PIC 9(4)  VALUE 80.
000230    02            PIC X(15) VALUE "NOTEBOOK TYPE".
000240    02            PIC 9(4)  VALUE 2200.
000250    02            PIC X(15) VALUE "PRINTER".
000260    02            PIC 9(4)  VALUE 400.
000270*----------------------------------------------------------------------
000280* An index key and index name are specified for the table used by the 
000290* SEARCH statement (format 2).
000300* The data used as the search key must be in ascending (ASCENDING) or 
000310* descending (DESCENDING) order.
000320*----------------------------------------------------------------------
000330  01              REDEFINES GOODS-DATA.
000340    02 GOODS      OCCURS 5 TIMES
000350                  ASCENDING KEY IS NAME INDEXED BY IX.
000360      03 NAME     PIC X(15).
000370      03 PRICE    PIC 9(4).
000380*----------------------------------------------------------------------
000390 PROCEDURE        DIVISION.
000400     PERFORM TEST BEFORE
000410             VARYING COUNTER FROM 1 BY 1 UNTIL COUNTER > 5
000420       MOVE PRICE(COUNTER) TO PRICE-ED
000430       DISPLAY COUNTER "." NAME(COUNTER) PRICE-ED
000440     END-PERFORM.
000450     DISPLAY " ".
000460     DISPLAY "What would you like to buy?  Goods name >> " 
000470             WITH NO ADVANCING.
000480     ACCEPT GET-GOODS FROM CONSOLE.
000490     DISPLAY "How many would you like?                >> " 
000500             WITH NO ADVANCING.
000510     ACCEPT GET-NUM.
000520*----------------------------------------------------------------------
000530* For the SEARCH statement (format 2), the initial value of the index 
000540* is ignored.  The value of the index used for searching is changed 
000550* based on the search method determined by the compiler.
000560* Use formats 1 or 2 based on the required situation.
000570*----------------------------------------------------------------------
000580     SEARCH ALL GOODS
000590       WHEN NAME(IX) = GET-GOODS
000600         MOVE PRICE(IX) TO TOTAL
000610     END-SEARCH.
000620*----------------------------------------------------------------------
000630     DISPLAY " ".
000640     IF TOTAL NOT = ZERO THEN
000650       COMPUTE TOTAL = TOTAL * GET-NUM
000660       MOVE TOTAL TO TOTAL-ED
000670       DISPLAY "The total amount is " TOTAL-ED " dollars."
000680     ELSE
000690       DISPLAY "The input data is incorrect."
000700     END-IF.
000710 END PROGRAM SAMPLE.