精通cobol--9.14.1 SEARCH ALL语句的格式要求

  SEARCH ALL语句的语法格式同SEARCH语句比较类似。在SEARCH ALL语句中,仍然主要包含所要查找的索引表表名、判断条件、以及满足条件后的处理过程。SEARCH ALL语句只是在系统内部处理过程中与SEARCH语句不同。SEARCH ALL语句的基本格式如下。

SEARCH  ALL  indexed-table-entry

           AT   END

                 do  something

           WHEN     condition

                 do  something else

END-SEARCH.

SEARCH语句类似,这里同样需要注意以下两点。

q      对于以do something表示的一组操作语句,通常该组语句内最多只有2~3条语句。

q      对于condition判断条件,必须包含以索引引用的具体数据项。并且该数据应该为判断表达式的第一个操作数。

此外,由于SEARCH ALL采用的是二分查找方式,因此相应的索引表中的数据必须有序。因此,能够使用SEARCH ALL语句的索引表,必须参照如下方式定义。

01   sample-indexed-table.

05   sample-entry-list       OCCURS  x1  TIMES

                           INDEXED  BY  sample-index.

                           ASCENDING KEY sample-num.

      10    sample-num    PIC 9(x2).

      10    sample-data    PIC X(x3).  

以上定义的能使用SEARCH ALL语句的索引表,为表示数据的顺序,需要定义数据编号。该段代码定义的数据编号即为sample-num。同时,需要注意的是,这里通过ASCENDING KEY表明了该索引表中的数据为升序排列。

上面代码中定义的是数据按升序排列的索引表。同样可以定义数据按降序排列的索引表。定义方式如下。

01   sample-indexed-table.

05   sample-entry-list       OCCURS  x1  TIMES

                           INDEXED  BY  sample-index.

                           DESCENDING KEY sample-num.

      10    sample-num    PIC 9(x2).

      10    sample-data    PIC X(x3).  

总之,SEARCH ALL语句只能用于查找数据排列有序的索引表。这是由SEARCH ALL语句的查找方式——二分查找法的算法特点所决定的。对于此类索引表的定义,通常可分两种情况讨论。

q      对于升序排列的数据,通过ASCENDING KEY加上数据编号指明。

q      对于降序排列的数据,通过DESCENDING KEY加上数据编号指明。

最后需要注意的一点是,SEARCH ALL语句中判断条件只能为一条。即在SEARCH ALL语句中,WHEN子句只能出现一条。因此,下面的这段代码是错误的。

SEARCH  ALL  indexed-table-entry

           AT   END

                 do  something

           WHEN     sample-data  (sample-index)  =  1

                 perform  statemen1

WHEN     sample-data  (sample-index)  =  2

                 perform  statemen2

WHEN     sample-data  (sample-index)  =  3

                 perform  statemen3          ←错误的代码,WHENSEARCH ALL语句中只能出现一条

END-SEARCH.        

你可能感兴趣的:(精通cobol--9.14.1 SEARCH ALL语句的格式要求)