回 帖 发 新 帖 刷新版面

主题:OCCURS与AT

好久没来,发个帖子,呵呵。
说说OCCURS()与AT()函数。

当我们需要找A字符串在B字符串中出现了多少次,经常会用到OCCURS()函数。
比如 A="ro", B="Hello,Microsoft Visual Foxpro!"
?OCCURS(A,B)    &&得到 2
没问题,正确。
"Hello,Mic[u]ro[/u]soft Visual Foxp[u]ro[/u]!"

好,我们用AT()函数来找,行吗?当然可以,因为它有第3参数nOccurence,表示您想找的A字符串在B字符串中第几次出现的位置。我们要编写一点程序完成。
nOccurence=0
nP=1
DO WHILE nP>0
   nOccurence=nOccurence+1
   nP=AT(B,A,nOccurence)
ENDDO
?nOccurence-1

哈哈,也是2
多此一举,是的,至少在绝大多数情况下确实多此一举。
不过来看一道题:
A="aabaa"    B="aabaabaabaabaa"
问B中能找到多少个A,肉眼看就知道有4个。
?OCCURS(A,B)    &&得到 2,不对呀
用AT()写的那段程序找,得到4。

原因很简单,这两个函数工作时都会扫描字符串,OCCURS()找到一个后计数器加1然后会跨过找到的字符串继续。而AT()找到后下一次会从找到的字符串首字母的下一个位置开始寻找。这就是原因。

同样的STRTRAN()函数也是和OCCURS()同样的扫描方式,如果你想把一个字符串中的某个子字符串消灭掉,也要注意了。
比如要把"aaaabaabaabaaaa"中的"aabaa"消灭掉
?STRTRAN("aaaabaabaabaaaa","aabaa","") 不要以为字符串中没有"aabaa"了!呵呵

回复列表 (共1个回复)

沙发

呵呵,上贴加下划线不成功啊,本想两处 ro 有下划线。

我来回复

您尚未登录,请登录后再回复。点此登录或注册