漫谈Foxpro中字符串的“相等”.docVIP

  • 3
  • 0
  • 约2.98千字
  • 约 7页
  • 2017-12-22 发布于河南
  • 举报
漫谈Foxpro中字符串的“相等”

漫谈Foxpro中字符串的“相等” 漫谈Foxpro中字符串的“相等” [返回]   在Foxpro中,当判断两个字符串是否相等时,可以使用比较操作符“==”和“=”。   当两个字符串用“==”进行比较时,操作符两边的字符串必须含有完全相同的字符(包括空格),才认为是相等的(.T.),否则为不相等(.F.)。   当两个字符串用“=”进行比较时,其结果可能与预期的不完全相同。例如判断:ab=a,其结果在不同的环境下,可能是.T.也可能是.F.。如果两个字符串的长度相同,比较时从左到右逐个字符进行,如对应的字符有不相等的,则其比较结果为不相等(.F.),如一直到结尾对应的字符都相等则其比较结果为相等(.T.);如果两个字符串的长度不同,则在不同的命令中取决于不同的环境设置。本文着重探讨长度不同的两个字符串在不同的命令中用“=”进行比较的结果。   一、一般命令中的字符串的比较   在一般命令中,两个长度不相同的字符串用“=”的比较结果取决于EXACT的设置值(ON/OFF)。当EXACT的设置值为OFF(默认值)时,只要等号右端字符串的所有字符和左端相应的字符相等,其结果就为相等(.T.)。所以,这时字符串的比较与两个字符串所位于等号的左右位置有关。当EXACT的设置值为ON时,则忽略两个字符串结尾的空格,而在较短的一个的右边加上足够的空格,以使二者的长度相等,并且每个相应的字符都相等其结果才相等(.T.)。   下表说明EXACT的设置值如何影响字符串的比较。   比较   EXACT OFF   EXACT ON   abc = abc   .T.   .T.   ab = abc   .F.   .F.   abc = ab   .T.   .F.   abc = ab+space(1)   .F.   .F.   ab = ab+space(1)   .F.   .T.   ab+space(1) = ab   .T.   .T.    = ab   .F.   .F.   ab =   .T.   .F.   ab = spac(1)   .F.   .F.   space(2)=   .T.   .T.    = space(2)   .F.   .T.   TRIM(space(2)) =   .T.   .T.    = TRIM(space(2))   .T.   .T.   在实际使用中要注意以下几个问题:   (1)表中字符型字段参与比较时,字符型字段的长度等于字段定义的长度,其尾部如有空缺是用空格填充的。在实际应用中,这一情况很容易被忽略而造成失误。   我们以下述产品表(ChanPin)为例说明。   ChanPin表的结构为:   字段   字段名   类型   宽度   小数位   1   DM   字符型   6   否   2   MC   字符型   20   否   表中记录为:   记录号   DM   MC   1   1321   21”电视机(万台)   2   1325   25”电视机(万台)   3   1329   29”电视机(万台)   4   13   电视机(万台)   执行如下命令:   set exact off   go top   ?DM==1321, DM==1321 , len(DM), DM=1321, 1321=DM   结果显示   .F. .T. 6 .T. .F.   set exact on   ?DM==1321, DM==1321 , len(DM), DM=1321, 1321=DM   结果显示   .F. .T. 6 .T. .T.   可以看到,记录1的DM其值为1321 (13后面有2个空格),而不是1321。   (2)表中字符型字段索引后,在使用SEEK命令搜索时,如果搜索字符串的长度大于索引关键字的长度,FOUND()结果肯定为.F.,这一点与LOCATE不同。   仍以上述产品表为例,在DM字段上建立索引,下表为在不同的情况下,FOUND()的值:      EXAC OFF   EXAC ON   seek spac(0)   .T.   .F.   seek spac(1)   .F.   .F.   seek 13   .T.   .T.   seek 13+spac(1)   .T.   .T.   seek 13+spac(4)   .T.   .T.   seek 13+spac(8)   .F.   .F.   Locate for dm=13+spac(8)   .F.   .T.   在复合索引中,应特别注意字符字段尾部的空格不能被忽略。例如,我们在前述的产品表上建立一个复合索引:  

文档评论(0)

1亿VIP精品文档

相关文档