PB的FIND函数的使用中的一个常犯错误

来源:互联网 发布:淘宝离职证明哪家靠谱? 编辑:程序博客网 时间:2024/05/22 05:21

一般情况下,我们要逐条查找数据窗口中满足某一条件的记录进行处理的时候,我们的代码经常会是下面这种:

  

ll_findrow=dw.find(findclause,1,dw.rowcount())

do while ll_find>0

    <....>

    ll_findrow=dw.find(findclause,ll_findrow+1,dw.rowcount())

loop

 

这种写法最大的陷阱在于,PB的FIND函数在查找的时候,当参数中起始行大于终止行的时候,会从下往上进行查找,而对参数中的起始行和终止行是否有效行不作限制

 

因此,一旦数据窗口中最后一条记录满足条件时,当处理完最后一条记录后,再去执行FIND的时候,由于ll_findrow+1已经大于dw_rowcount(),PB将会从ll_findrow+1行到dw.rowcount()行开始反向查找满足条件的记录,此时函数仍将返回数据窗口的最后一行,结果就导致程序进行死循环。

所以,为避免出现死循环,一般应在循环的FIND语句前判断ll_findrow是否已超出数据窗口的记录条数,超出则跳出循环。

 

不过,还有一种更简单的避免死循环的代码写法如下:

 

ll_findrow=dw.find(findclause,1,dw.rowcount())

do while ll_find>0

    <....>

    ll_findrow=dw.find(findclause,ll_findrow+1,dw.rowcount() +1 )

loop