关于VFP的字符串比较运算(一)
对字符串来说,其比较规则如下:比较两个字符串时,系统对两个字符串的字符自左向右逐个进行比较,一旦发现两个对应字符不同,就根据它们的排序序列决定字符串的大小。对字符序列的排序设置选项有三种:Machine(机器)、Pinyin(拼音)、Stroke(笔画)。
a)Machine(机内码)次序:字符按ASCII码值比较(小写字母>大写字母>空格),汉字按拼音顺序比较。
例:“abc”> “abcd”、“b”> “B”、“c”< “ c”、“张”> “李”
b)Pinyin(拼音)次序:汉字按拼音顺序比较,字符按大写字符>小写字符>空格进行比较。
例:“a”< “A”
c)Stroke(笔画)次序:按笔画的多少排序。
例:“李”<“王”、“a”<“t”
两个字符串比较时,若长度相等,比较时规则相对容易,不论是进行=(单等号)还是= =(双等号)运算,即比较时从左到右逐个字符进行,如对应的字符有不相等的,则其比较结果为不相等(.F.),如一直到结尾对应的字符都相等则其比较结果为相等(.T.)。
如果两个字符串的长度不同,则SET EXACT ON 和SET EXACT OFF这两条命令将会直接影响表1中列出的=(等于)和!=(不等于)的运算规则。字符串比较过程中经常产生的疑义将由此而来。
例2:在命令窗口输入如下语句。
SET EXACT OFF &&字符串进行非精确比较
?"王老师">"王", "王老师"<"王" &&运算结果为.F. .F.
2.1长度不相等的字符串比较
2.1.1执行SET EXACT OFF 命令时的比较
当EXACT的设置值为OFF(默认值)时,只要运算符右边字符串的所有字符和运算符左边字
符串的左端部分内容相匹配,则认为两个字符串相等。
2.1.2执行SET EXACT ON 命令时的比较
当EXACT的设置值为ON时,在较短的一个字符串的右边加上足够的空格,以两个字符串的长度相等,并且每个相应的字符都相等,则认为两个字符串相等。
以上给出了在不同系统环境下的比较两个字符串是否相等的规则。如果两个字符串不相等,则两个字符串一定具有大于或小于的关系。如何确定两个字符串的大于或小于关系?用运算符 <(小于) 或 >(大于) 进行两字符串比较时,比较到第1个不相同字符为止,否则,长度较长的字符串较" 大 "。
可见,在以上的两个不同系统环境下,长度不相等的两个字符串的比较规则不同。
关于VFP的字符串比较运算(二)
若两个字符串相等,则它们的=(等于)、>=(大于等于)、<=(小于等于)运算结果为.T.,而>(大于)、<(小于)、!=(不等于)运算结果为.F.。
若两个字符串不相等,运算符左边的字符串小于运算符右边的字符串,则!=(不等于)、<(小于)、<=(小于等于)运算结果为.T.;而=(等于)、>(大于)、>=(大于等于)运算结果为.F.。若两个字符串不相等,且运算符左边的字符大于运算符右边的字符串,则!=(不等于)、>(大于)、>=(大于等于)<运算结果为.T.,而=(等于)、<(小于)、<=(小于等于)运算结果为.F.
例3:在命令窗口输入如下语句:
SET EXACT OFF &&字符串进行非精确比较
?"王老师"="王", "王老师">="王", "王老师"<="王" &&运算结果为.T. .T. .T.
?"王老师">"王", "王老师"<"王", "王老师"!="王" &&运算结果为.F. .F. .F.
这是两个字符串进行非精确比较。"王老师"和"王"比较时,运算符右边的字符串"王"与运算符左边的字符串"王老师"前面的第1、2字符相等,则"王老师"和"王"相等。以上各运算的显示结果也不难理解。
在命令窗口输入如下语句:
SET EXACT ON &&字符串进行精确比较
?"王老师"="王", "王老师"<"王", "王老师"<="王" &&运算结果为.F. .F. .F.
?"王老师">"王", "王老师">="王", "王老师"!="字符串长度比较函数王" &&运算结果为.T. .T. .T.
这是两个字符串进行精确比较。这样两个字符串有特点:两个字符串长度不相等,右边的字符串与左边的字符串前面部分内容相同。
"王老师"和"王"比较时,在"王"的尾部加上4个空格,使要比较的两个字符串长度相等。再比较"王老师"和"王 ",显然两个字符串不相等,且"王老师">"王 "。以上的各运算的结果不难理解。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论