💻 COBOL
COBOL SEARCH Statement
Intermediate 🕑 10 min read
👁 0 views
COBOL SEARCH Statement
The SEARCH statement performs a table lookup to find a specific element.
Syntax
SEARCH identifier [VARYING identifier]
[AT END imperative-statement]
WHEN condition imperative-statement
[WHEN condition imperative-statement] ...
[END-SEARCH]
SEARCH ALL identifier
[AT END imperative-statement]
WHEN condition imperative-statement
[END-SEARCH]
Example Program
IDENTIFICATION DIVISION.
PROGRAM-ID. SEARCH-DEMO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-PRODUCT-TABLE.
05 WS-PRODUCT OCCURS 5 TIMES INDEXED BY WS-IDX.
10 WS-PROD-CODE PIC X(3).
10 WS-PROD-NAME PIC X(15).
10 WS-PROD-PRICE PIC 9(5)V99.
01 WS-SEARCH-CODE PIC X(3).
01 WS-FOUND PIC 9 VALUE 0.
88 FOUND VALUE 1.
88 NOT-FOUND VALUE 0.
PROCEDURE DIVISION.
* Initialize table
MOVE 'A01' TO WS-PROD-CODE(1)
MOVE 'Widget' TO WS-PROD-NAME(1)
MOVE 19.99 TO WS-PROD-PRICE(1)
MOVE 'B02' TO WS-PROD-CODE(2)
MOVE 'Gadget' TO WS-PROD-NAME(2)
MOVE 29.99 TO WS-PROD-PRICE(2)
MOVE 'C03' TO WS-PROD-CODE(3)
MOVE 'Gizmo' TO WS-PROD-NAME(3)
MOVE 39.99 TO WS-PROD-PRICE(3)
MOVE 'D04' TO WS-PROD-CODE(4)
MOVE 'Doohickey' TO WS-PROD-NAME(4)
MOVE 49.99 TO WS-PROD-PRICE(4)
MOVE 'E05' TO WS-PROD-CODE(5)
MOVE 'Thingamajig' TO WS-PROD-NAME(5)
MOVE 59.99 TO WS-PROD-PRICE(5)
* Sequential search
MOVE 'C03' TO WS-SEARCH-CODE
SET WS-IDX TO 1
SET NOT-FOUND TO TRUE
SEARCH WS-PRODUCT
AT END
DISPLAY 'Product not found'
WHEN WS-PROD-CODE(WS-IDX) = WS-SEARCH-CODE
SET FOUND TO TRUE
DISPLAY 'Found: ' WS-PROD-NAME(WS-IDX)
DISPLAY 'Price: ' WS-PROD-PRICE(WS-IDX)
END-SEARCH
STOP RUN.
Expected Output
Found: Gizmo
Price: 00039.99
Key Points
- SEARCH requires INDEXED BY clause
- Must SET index before SEARCH
- SEARCH ALL for binary search (sorted)
- AT END handles not-found condition
- VARYING allows secondary index