在 COBOL 中搜索所有内容
在对任何数据结构执行操作时,搜索是最重要的操作之一。我们可以通过两种方式进行搜索操作:
- 线性搜索:在这里,我们简单地遍历数据结构(数组)并搜索数组中的给定元素。
- 二分搜索:在二分搜索中,我们首先找到数组的中间元素,
- 如果搜索元素等于中间元素,则搜索操作到此结束。
- 如果搜索元素大于中间元素,则数据结构分为两部分,我们在后半部分搜索元素,并再次检查搜索元素与子数组中间元素之间的关系。
- 如果搜索元素小于中间元素,则将数组分为两部分,我们在前半部分搜索元素,并再次检查搜索元素与子数组中间元素之间的关系。
- 它选择哪一半来搜索元素并不重要,只将两半的中间元素与搜索元素进行比较,然后再次检查关系关系并将子数组相应地分为两半。 这个过程继续直到找到搜索元素或数组结束。
在 COBOL 中,为了执行这些搜索操作,我们有两个动词,即用于线性搜索的 Search Verb和用于二分搜索的 Search-All Verb 。在本文中,我们将了解 Search-All 动词。
Search-All Verb运算速度快,比 Search Verb 更高效。在这种情况下,不需要在 SEARCH ALL 动词之前使用 SET 动词,因为它由 Search-All 动词自动完成。在使用 Search-All 动词之前,必须考虑一些规则:
- 数组必须采用排序形式,即必须按升序或降序排列。
- 该动词只能与一维数组一起使用。
- 在执行操作之前,无需为 Key 分配起始值。
- 它只检查相等条件。
- 如果在数组中找不到该元素,则执行命令式语句,如果没有命令式语句,则控制传递到下一个语句。
句法:
SEARCH ALL table name [ AT END imperative statement ]
WHEN condition-1 { imperative statement/NEXT SENTENCE } [END SEARCH].
例子:
Cobol
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLOWORD.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 SEARCHRNO PIC 99.
77 N PIC 99.
01 ARRAY.
02 ARR OCCURS 10 TIMES ASCENDING KEY IS RNO INDEXED BY I.
03 RNO PIC 99.
PROCEDURE DIVISION.
// AFTER ENTERING THE ELEMENTS IN ARRAY
// WE SEARCH THE ROLL NUMBER ENTERED
// BY USER IN VARIABLE SEARCHRNO.
SEARCH ALL ARR AT END DISPLAY "NOT FOUND"
WHEN RNO(I) = SEARCHRNO DISPLAY "FOUND".
STOP RUN.
输出:
- 搜索数组中实际可用的数组中的卷号。
- 在数组中搜索数组中不可用的卷号。