精通cobol--9.13.2 SEARCH语句的功能

  SEARCH语句的功能实际上是实现对索引表中数据的顺序查找。SEARCH语句实现的功能步骤如下。

q      SEARCH语句从指定的索引处开始查找。若WHEN子句后的条件没有得到满足,则将索引变量相应增加一个数据单位。查找索引表中的下一条数据。同时继续判断WHEN子句后所列条件。

q      WHEN子句后所列条件一旦满足,则停止查找。索引变量为当前满足条件的关键数据项所对应的索引值。

q      若直到该索引表中的最后一条数据仍然没有满足WHEN子句后所列条件的,将停止查找。同时,AT END子句下面的语句将被执行。若没有写AT END子句,则直接执行SEARCH语句后面的下一条语句。

以下结合一个具体实例进行讲解。

首先,建立一张索引表,其中包含一组记录有相关人员姓名的数据。这里由于只有一种数据类型,因此人员姓名数据即为该表的关键数据项。定义并初始化该索引表的代码如下。

01   MEMBER-DATA.

     05  FILLER     PIC X(10)    VALUE  ‘ZHANG SAN’.

     05              PIC X(10)    VALUE  ‘LI  SI’.

05              PIC X(10)    VALUE  ‘WANG  WU’.

05              PIC X(10)    VALUE  ‘LIU  DA’.

05              PIC X(10)    VALUE  ‘XU  CHAO’.

01    MEMBER-TABLE  REDEFINES  MEMBER-DATA.

05    MEMBERS        PIC  X(10)

OCCURS   5  TIMES

INDEXED BY  MEMBER-NDX.

这里不妨假设需要查找姓名为“WANG WU”的人员。若找到,则将变量FOUND-FLAG置为“Y”,否则将其置为“N”。

这里可以通过前面讲过的PERFORM VARYING语句实现该功能。使用PERFORM VARYING语句的代码如下。

MOVE   ‘N’   TO  FOUND-FLAG.

PERFORM  100-FOUND-PROCESS

            VARYING  MEMBER-NDX  FROM  1  BY  1

            UNTIL   MEMBER-NDX  >  5  OR  FOUND-FLAG = ‘Y’.

……

100-FOUND-PROCESS.

      IF  MEMEBERS  (MEMBER-NDX)  = ‘WANG WU’

           MOVE  ‘Y’  TO  FOUND-FLAG

END-IF.

由于该表为索引表,故这里还可以通过SEARCH语句进行查找,代码如下。

SET   MEMBER-NDX   TO  1.

SEARCH   MEMBERS

      AT   END

           MOVE  ‘N’  TO  FOUND-FLAG

     WHEN   MEMBERS  (MEMBER-NDX)  =  ‘WANG WU’

           MOVE  ‘Y’  TO  FOUND-FLAG

END-SEARCH.

以上两段代码执行后,FOUND-FLAG中的值都将为‘Y’。

由此可见,使用SEARCH语句和使用PERFORM VARYING语句进行查找的效果是等同的。因为二者都是基于顺序查找方式进行查找的。但是,对于索引表而言,通常使用的是SEARCH语句。因为SEARCH语句除可以进行顺序查找外,还有以下两点好处。

q      只用指定起始查找位置,并且可含有多条条件判断语句(WHEN语句)。因此,该语句在功能结构上较为清晰。

q      相对于PERFORM VARYING语句而言,SEARCH语句的查找是自动执行的。因此,在编码上更为简便。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值