710 likes | 846 Views
全国计算机等级考试 二级教程 --- Visual FoxPro6.0 程序设计. 主 讲:李富星. 延安大学 计算中心. E-mail: yaydlfx@163.com. 和其他程序设计语言类似, VFP 提供了多种数据类型,通过这些数据类型可以将各种类型的数据,保存在表、数组、变量以及其它数据表现形式中。并按照不同的数据类型对数据进行不同的运算、操作和处理。 VFP 的数据类型,有的只适用于数据表中的字段;有的不仅适用于字段,还适用于应用程序中的内存变量和数组。. 3.1 Visual FoxPro 的数据类型 3.2 Visual FoxPro 的常量与变量
E N D
全国计算机等级考试二级教程---Visual FoxPro6.0程序设计 主 讲:李富星 延安大学 计算中心 E-mail: yaydlfx@163.com
和其他程序设计语言类似,VFP提供了多种数据类型,通过这些数据类型可以将各种类型的数据,保存在表、数组、变量以及其它数据表现形式中。并按照不同的数据类型对数据进行不同的运算、操作和处理。和其他程序设计语言类似,VFP提供了多种数据类型,通过这些数据类型可以将各种类型的数据,保存在表、数组、变量以及其它数据表现形式中。并按照不同的数据类型对数据进行不同的运算、操作和处理。 • VFP的数据类型,有的只适用于数据表中的字段;有的不仅适用于字段,还适用于应用程序中的内存变量和数组。
3.1 Visual FoxPro的数据类型 3.2 Visual FoxPro的常量与变量 3.3 Visual FoxPro的表达式 3.4 Visual FoxPro的函数 第三章 数据与运算
数据是反映现实世界中客观事物属性的记录,它包括两个方面:数据内容与数据形式。数据内容就是数据的值,数据形式就是数据的存储形式和操作使用方式,也称为数据类型。VFP6系统为使用户建立和操作数据库更加方便,将系统中所有操作、处理的数据,分为几种不同数据类型:数据是反映现实世界中客观事物属性的记录,它包括两个方面:数据内容与数据形式。数据内容就是数据的值,数据形式就是数据的存储形式和操作使用方式,也称为数据类型。VFP6系统为使用户建立和操作数据库更加方便,将系统中所有操作、处理的数据,分为几种不同数据类型: 字符型、数值型、日期型、日期时间型、逻辑型、备注型、通用型、货币型、二进制字符型和二进制备注型。 3.1 Visual FoxPro中的数据类型
3.1.1 字符型(C) 字符型(Character)数据是不具计算能力的文字数据类型,用字母C表示。字符型数据包括中文字符、英文字符、数字字符和其他ASCII字符,其长度(即字符个数)范围是0~254个字符,在内存中,字符型数据占用1个字节。 注意:如果将阿拉伯数字定义为字符型数据时,它不具备数学上的数值含义,不能参加数学运算,如电话号码,邮编等。
3.1.2 数值型 数值型数据是表示数量、可以进行数值运算的数据类型。在Visual FoxPro系统中,按存储、表示形式与取值范围不同,数值型数据又分为四种不同类型。 1.数值型( N) 数值型(Numeric)数据由数字、小数点、正负号和字母E组成,用字母N表示。数值型数据的取值范围是:-0.9999999999E+19~0.9999999999E+20,包括正负号、小数点和字母E在内,其长度(数据位数)最大20位。通常用于表示实数。如23,-103.45,1.3E-5(即1.3×10-5)等;
2.浮点型(F) 浮点型(Float)数据是数值型数据的一种,用字母F表示。它与数值型数据完全等价,只是在存储形式上采用浮点格式,主要是为了得到较高的计算精度。 3.双精度型( B) 双精度型(Double)数据是具有更高精度的一种数值型数据,用字母B表示。它采用固定长度浮点格式存储,占用8个字节,其取值范围是:+/-4.94065645841247E-324 ~ +/-8.9884656743115E307。 4.整型( I) 整型(Integer)数据是不包含小数部分的数值型数据,用字母I表示。整型数据只用来表示整数,以二进制形式存储,占用4个字节。其取值范围是:-21474836~21474836。
3.1.3 日期型( D ) 日期型(Date)数据是表示日期的数据,用字母D表示。日期的默认格式是{mm/dd/yyyy},其中mm表示月份,dd表示日期,yyyy表示年度,固定长度8位。存储格式为“YYYYMMDD”,共占用8个字节。如{09/16/2002}表示2002年9月16日这一日期数据。 3.1.4 日期时间型( T) 日期时间型(Date Times)数据是表示日期和时间的数据,用字母T表示。日期时间的默认格式是{mm/dd/yyyy hh:mm:ss},其中mm、dd、yyyy的意义与日期型相同,而hh表示小时,mm表示分钟,ss表示秒数。日期时间型数据也是采用固定长度8位,取值范围是:日期为01/01/0001~12/31/9999,时间为00:00:00~23:59:59。存储格式为“YYYYMMDDHHMMSS”,保存在两个4字节的整数中。如{10/01/2002 10:30:30}表示2002年10月1日10时30分30秒这一日期时间数据。
3.1.5 逻辑型(L) 逻辑型(Logic)数据是描述客观事物真假的数据类型,表示逻辑判断的结果,用字母L表示。逻辑型数据只有真(.t.或.y.)和假(.f.或.n.)两种,固定长度1位。在内存中,逻辑型占用1个字节。为区别其他数据类型,一般需在表示逻辑值的字母t、y、f、n的前后加圆点符“.”。 3.1.6 备注型(M) 备注型(Memo)数据是表示、存放较多字符的数据类型。可以把它看成是字符型数据的特殊形式,用字母M表示,固定占用4个字节的内存空间。 备注型数据没有数据长度限制,仅受限于磁盘空间。它只用于表中字段类型的定义,字段长度固定为10位,实际数据存放在与表文件同名的备注文件(.FPT)中,长度根据数据的内容而定。
3.1.7 通用型( G) 通用型(General)数据是存储OLE(对象链接嵌入)对象的数据类型,用字母G表示。通用型数据中的OLE对象可以是电子表格、文档、图形图片等。它只用于表中字段类型的定义。通用型数据字段长度固定为4位,实际数据长度仅受限于磁盘空间。 OLE对象的实际内容、类型和数据量则取决于链接或嵌入OLE对象的操作方式。如果采用链接OLE对象的方式,则表中只包含对OLE对象的引用说明,以及对创建该OLE对象的应用程序的引用说明;如果采用嵌入OLE对象方式,则表中除包含对创建该OLE对象的应用程序的引用说明,还包含OLE对象中的实际数据。
3.1.8 货币型(Y) 货币型(Currency)数据是为存储美元金额而使用的一种称为货币(Currency)的数据类型,其取值范围是:-922337203685477.5808 ~ 922337203685477.5807,默认保留4位小数,占据8字节存储空间。货币型数据用字母Y表示。 3.1.9 二进制字符型和二进制备注型 这两类数据是以二进制格式存储的数据类型,只能用在表中字段数据的定义。所存储的数据不受代码页改变的影响。 3.1.10 数据类型的应用范围 以上数据类型均可应用于表中字段数据类型的定义,但其中双精度型、浮点型、通用型、整型、备注型、二进制字符型和二进制备注型只能应用于字段,其余则可以用于变量、数组和字段。
在Visual FoxPro系统中,数据可用常量、变量、数组表示,数据还可以用字段、记录和对象中,由它们存储、容纳各种类型的数据。因此,常把这些供数据存储的常量、变量、数组、字段、记录和对象等称为数据存储容器。用户正是利用不同的数据存储容器,在Visual FoxPro系统中表示、存储、操作、处理各种类型的数据,实现数据处理的应用。 3.2 Visual FoxPro的常量与变量
3.2.1 常量 常量是在命令或程序中可直接引用、具有具体值的命名数据项,其特征是在整个操作过程中它的值和表现形式保持不变。Visual FoxPro按常量取值的数据类型,将常量分为6种类型 数值型常量、浮点型常量、字符型常量、逻辑型常量、日期型常量、日期时间型常量。
1.数值型常量 由数字、小数点和正负号组成,表示整数或实数值。 如;100,-21,15.31,-21092.5041等分别是数值型常量中的整数和实数。 2.浮点型常量 以浮点格式表示的数值常量。通常用来表示那些绝对值很大或很小、而有效位数不太长的一些数值,对应于日常应用中的科学记数法。 如中国的人口数接近13亿,以实数形式表示是1,300,000,000,以科学记数法的乘幂形式表示是1.3×109。显然用科学记数法形式表示比较简短、方便、适用,对应在Visual FoxPro中采用浮点型常量表示为1.3E+9,其中,1.3称为尾数,表示有效数字,9称为阶码,表示幂指数。阶码只能是整数,尾数可以是整数,也可以是小数;尾数与阶码均可正可负。
3.字符型常量 由任意ASCII字符、汉字和汉字字符组成的字符型数据,字符型常量又称为字符串。为与其他类型常量、变量和标识符相区别,Visual FoxPro要求将字符串中所有字符,用一对双引号“””或单引号“‘”或方括号“[]”作为定界符对括起来。 如“I am a student..”,‘中华人民共和国’,[Visual FoxPro 6.0系统]都是字符串。 4.逻辑型常量 逻辑型常量就是表示逻辑判断结果“真”或“假”的逻辑值。逻辑常量只有真和假两种值,分别用(.t.或.y.)和(.f.或.n.)表示真和假。一般应在表示逻辑常量的字母左右加注圆点符“.”以示区别。
5.日期型常量 日期型常量是表示日期值的数据,其默认格式是{mm/dd/[yy]yy}。如{10/01/02}和{10/01/2002}均表示2002年10月1日这一日期常量值。 6.日期时间型常量 Visual FoxPro系统中增加了一种表示日期和时间值的日期时间型常量,其默认格式是: {mm/dd/[yy]yy [,] hh:mm:ss[a|p]} 其中a和p分别表示AM(上午)和PM(下午)。 日期值和日期时间值的输入格式与输出格式并不完全相同,特别是输出格式受系统环境设置的影响,用户可根据应用需要进行相应调整、设置。
(1)日期格式中的世纪值 通常日期格式中用2位数表示年份,但涉及到世纪问题就不便区分。Visual FoxPro提供设置命令对此进行相应设置。 命令格式: SET CENTURY ON | OFF | TO [nCentury] 命令功能: ON:日期数据显示10位,其中年份4 位,即日期值输出时显示年份值; OFF:(默认值)。日期数据显示8位,年份2位,即日期值输出时不显示年份值; TO [nCentury]:指定日期数据所对应的世纪值。nCentury是一个1~99的整数,代表世纪数。
(2)设置日期显示格式 用户可以调整、设置日期值和时间值的显示输出格式。既可以用命令方式设置,也可以用菜单方式设置。 命令格式: SET DATE [TO] AMERICAN | ANSI | BRITISH | FRENCH | GERMAN | ITLIAN | JAPAN | USA | MDY| DMY | YMD 命令功能:设置日期型和日期时间型数据的显示输出格式。系统默认为AMERICAN美国格式。
各种日期格式设置所对应的日期显示输出格式,见表3-1所示。各种日期格式设置所对应的日期显示输出格式,见表3-1所示。
(3)设置日期2000年兼容性 通常日期型和日期时间型数据的结果,与SET DATE命令和SET CENTURY命令设置状态及当前系统时间有关。由于系统时间与相应设置不同,同一数据的结果可能有不同的解释。如日期值{10/11/12}可以解释为1912 年 10 月 11 日、2012 年 10 月 11 日、1912 年 11 月 10 日、1910 年 11 月 12 日或者 2010 年 11 月 12 日等。这显然会导致系统混乱,而且还可能造成2000年兼容性错误,影响系统正常、有效的操作运行。
Visual FoxPro系统增加了一种所谓严格的日期格式。不论哪种设置,按严格日期格式表示的日期型和日期时间型数据,都具有相同的值和表示形式。严格的日期格式是: {^yyyy-mm-dd[,][hh[:mm[:ss]][a|p]]} ^符号表明该格式是严格的日期格式,并按照 YMD 的格式解释日期型和日期时间型数据,它是严格日期格式的标志,不可缺少。有效的日期型和日期时间型数据分隔符为:连字符“-”、正斜杠“/”、句点“.”和空格。如{^2002-10-01}、{^2002-10-01 10:30:30a},分别以严格的日期格式表示2002年10月1日及该日上午10时30分30秒这两个日期数据。
Visual FoxPro系统默认采用严格的日期格式,并以此检测所有日期型和日期时间型数据的格式是否规范、合法。为与早期版本兼容,用户通过命令或菜单设置改变这一格式。 命令设置的命令格式: SET STRICTDATE TO [0 | 1 | 2] 命令功能: 0:关闭严格的日期格式检测,即设置日期格式按传统的严格的格式; 1:设置严格的日期格式检测(默认值),要求所有日期型和日期时间型数据均按严格的格式; 2:设置与1相同,但如果程序代码中出现CTOD()和CTOT()函数时,会出现编译错误。这个设置最适合调试时使用,用来检测2000年兼容性错误; 省略:恢复系统默认值,等价于1的设置。
3.2.2 变量 变量是在操作过程中可以改变其取值或数据类型的数据项。在Visual FoxPro系统中变量分为字段变量、内存变量、数组变量和系统变量4类。此外,作为面向对象的程序语言,Visual FoxPro在进行面向对象的程序设计中引入了对象的概念,对象实质上也是一类变量。 确定一个变量,需要确定其三个要素:变量名、数据类型和变量值。
1.命名约定 在Visual FoxPro系统中,将表示、存储数据的常量、变量、数组、字段、记录、对象、表、数据库等,都称之为数据容器。所有数据容器均需命名以相互区别,为规范各类对象的命名,Visual FoxPro系统推荐了若干“命名约定”供用户参考,以提高操作命令与程序的可读性和规范性。 ● 使用字母,下划线和数字命名。一般建议不采用汉字命名; ● 命名以字母或下划线开头;除自由表中字段名、索引的TAG标识名最多只能10个字符外,其他的命名可使用1~128个字符; ● 避免使用 Visual FoxPro的保留字; ● 文件名的命名应遵循操作系统的约定。
2.字段变量 表由若干记录构成,每个记录都包含若干个数量相同的字段,同一字段在不同记录中分别对应不同的字段值,因此,字段也是变量。与其他变量不同的是,字段变量是定义在表中的变量,随表的存取而存取,因而是永久性变量。字段名就是变量名;变量的数据类型为Visual FoxPro中任意数据类型,字段值就是变量值。
3.内存变量 内存变量是在内存中定义的、一种单个数据元素的临时性变量。 (1)内存变量的数据类型 内存变量的数据类型包括:数值型、字符型、逻辑型、日期型和日期时间型; (2)内存变量的建立 建立内存变量就是给内存变量赋值。内存变量赋值既可定义一个新的内存变量,也可改变已朋内存变量的值或数据类型。 命令格式: STORE <表达式> TO <内存变量表> 命令功能:计算<表达式>的值并赋值给各个内存变量。 命令格式: <内存变量> = <表达式> 命令功能:计算<表达式>的值并赋值给指定内存变量。
(3)内存变量的显示输出 可以用两个命令在屏幕上显示输出内存变量的值。 命令格式: ?| ?? <表达式表> [AT <列号>] 命令功能:计算表达式表中各表达式的值,并在屏幕上指定位置显示输出各式的值。 ?:先回车换行,再计算并输出表达式的值; ??:在屏幕上当前位置,计算并直接输出表达式的值; <表达式表>:多个心逗号两两分隔的表达式,各表达式的值输出时,以空格分隔; AT <列号>子句指定表达式值从指定列开始显示输出。AT的定位只对它前面的一个表达式有效,多个表达式必须用多个AT子句分别定位输出,而且可反序定位。
4.数组变量 数组变量是结构化的变量,是一组具有相同名称、以下标相互区分的有序内存变量。一个数组通常都包含多个数据元素。Visual FoxPro系统中只允许使用一维数组(相当于数列)和二维数组(相当于行列式或矩阵)。
(1)数组元素 ● 数组中各有序变量(数据元素)组成数组的成员,称为数组元素。数组元素实质上是一个内存变量,也称数组变量,它们具有相同变量名即数组名,彼此以下标区分; ● 数组元素的名称(变量名)用数组加下标构成。如AA(1),BB(2,3)分别表示一维数组AA的第1个元素,二维数组BB中第2行第3列的元素; ● 下标必须用圆括号对括;一维数组的元素只有一个下标,二维数组的元素有两个以逗号分隔的下标; ● 下标必须是非负数值,可以是常量、变量、函数或表达式,下标值会自动取整。如AA(1.5),AA(nA1),AA(2+10/3)等; ● 数组元素的数据类型决定于最后赋值的数据类型;不同数组元素的数据类型可以不同; ● 数组元素与普通内存变量一样操作,可以赋值和引用。
(命令格式:DIMENSION/DECLARE <数组名1>(<数值表达式1> [,<数值表达式2>]) [,<数组名2>(<数值表达式3> [,<数值表达式4>])]… 说明:<数值表达式>为数组下标,对一维数组来说,指的是数组元素的个数;对二维数组来说,指的是数组的最大行号和最大列号。 数组的下标允许使用圆括号或方括号括起来。 在同一个数组中,不同的数组元素数据类型可以不同。 数组一旦被定义之后,该数组的每个元素的初值为逻辑假值,可以使用有关的命令给数组元素赋值。 示例:DIMENSION AB(3),C[2,3]
2. 数组的赋值 数组元素的赋值与普通内存变量一样,可以通过STORE命令或“=”来实现。 示例: 给二维数组X和一维数组Y进行赋值。 DIMENSION X(3,4),Y(3) STORE 5 TO X Y(1)=325 Y(2)=“ABC” Y(3)=.T. 3. 数组的重定义 (1)数组的重定义:使用DECLARE或DIMENSION命令对已定义好的数组的尺寸和维数进行改变,即将一维数组变为二维数组或将二维数组变为一维数组,并且可以改变数组元素的个数,同时将原数组的数据自动复制到重定义的同名数组(新数组)中。
5.系统变量 系统变量是Visual FoxPro系统特有的内存变量,它由Visual FoxPro系统定义、维护。系统变量有很多,其变量名均以下划线“_”开始,因此在定义内存变量和数组变量名时,不要以下划线开始,以免与系统变量名冲突。系统变量设置、保存了很多系统的状态、特性,了解、熟悉并且充分地运用系统变量,会给数据库系统的操作、管理带来很多方便,特别是开发应用程序时更为突出,学习时可对此有所关注。
6.内存变量与数组变量的基本操作 (1)变量的显示 用?/??命令可以分别显示单个或一组变量的值。有时用户还需了解变量其他相关信息,如数据类型、作用范围,或了解系统变量的信息。Visual FoxPro系统提供了相应操作命令。 命令格式; DISPLAY | LIST MEMORY [LIKE <通配符>] [TO PRINTER [ PROMPT] | TO FILE <文本文件名>] [NOCONSOLE] 命令功能:显示指定变量的信息。
(2)变量的保存 Visual FoxPro提供相应命令,可用文件形式将某些变量保存起来,以便重复使用。 命令格式: SAVE TO <变量文件名> [ALL LIKE <通配符> | ALL EXCEPT <通配符> ] 命令功能:将指定变量的信息保存到指定的变量文件(*.MEM)中。 ALL LIKE <通配符>:只保存符合通配符条件的所有变量; ALL EXCEPT <通配符>:只保存不符合通配符条件的所有变量。
(3)变量的恢复 需要保存在文件中的变量信息时,必须先恢复到内存后方可使用。 命令格式: RESTORE FROM <变量文件名> [ADDITIVE] 命令功能:将指定变量文件(*.MEM)中变量信息恢复到内存中。 ADDITIVE:省略此项,清除内存所有变量后再恢复文件中变量的信息;加选此项,将变量文件中的变量信息追加到内存现有变量信息中。
Visual FoxPro系统对定义内存变量的数量是有限制的,应及时清理,尽量减少内存的占用,定义其他变量。 命令格式:RELEASE <变量表> RELEASE ALL [LIKE <通配符> | EXCEPT <通配符> ] (4)变量的清除
(1)将表的当前记录复制到数组 命令格式: ①SCATTER [FIELDS<字段名表>] [MEMO] TO<数组名> [BLANK] ② SCATTER [FIELDS LIKE<通配符> | FIELDS EXCEPT <通配符> ][MEMO] TO<数组名> [BLANK] (5) 表中数据与数组数据之间的交换 命令功能:将表的当前记录从指定字段表中的第一个字段内容开始,依次复制到数组名中的从第一个数组元素开始的内存变量中。 FIELDS<字段名表>:省略此项复制备注型M和通用型G之外的全部字段。 MEMO:同时复制备注型M字段
命令格式: ①GATHER FROM <数组名> [FIELDS<字段名表>] [MEMO] ② GATHER FROM <数组名> [FIELDS LIKE<通配符> | FIELDS EXCEPT <通配符> ][MEMO] (2)将数组数据复制到表的当前记录 命令功能:将数组中的数据作为一个记录复制到表的当前记录中。如果数组元素个数多于记录中字段的个数,则多余部分被忽略。 注意:数组中各个数组元素的数据类型必须与字段的数据类型对应一致。
在Visual FoxPro系统中,表达式是由常量、变量、函数及其他数据容器单独或与运算符组成的有意义的运算式子。 运算符是对数据对象进行加工处理的符号,根据其处理数据对象的数据类型,运算符分为算术(数值)运算符、字符运算符、日期时间运算符、逻辑运算符和关系运算符五类,相应的,表达式也分为算术表达式、字符表达式、日期时间表达式、逻辑表达式和关系表达式五类。 常量、变量和函数可以作为表达式的特例。今后涉及到表达式的描述,除特别指明,均可包含这些特殊的形式。 3.3 Visual FoxPro的表达式
在一个表达式中可能包含多个由不同运算符连接起来的、具有不同数据类型的数据对象,但任何运算符两侧的数据对象必须具有相同数据类型;当表达式中包含多种运算时,必须按一定顺序施行相应运算。在Visual FoxPro系统中,各类运算的优先顺序如下: 圆括号>算术和日期运算>字符串运算>关系运算>逻辑运算 同一类运算符也有一定的运算优先顺序,这在各类表达式中分别介绍。如果多个同一级别的运算,则按在表达式中出现的先后顺序进行运算。
3.3.1 算术表达式 算术表达式又称数值表达式,其运算对象和运算结果均为数值型数据。数值运算符的功能及运算优先顺序,如表3-2所示。表中运算符按运算优先级别从高到低顺序排列。 表3-2 算术运算符 运算符 功能 表达式举例 运算结果 优先级别 ( ) 圆括号 (2-5)*(3+2) -15 最高 | | | | 最低 - 取相反数 -(3-8) 5 **、^ 乘幂 2**5、3^2 32、9 *、/ 乘、除 2*10、25/5 20、5 % 取余数 20%5 0 +、- 加、减 36+19、29-47 55、-18
3.3.2 字符表达式 字符表达式是由字符运算符将字符型数据对象连接起来进行运算的式子。字符运算的对象是字符型数据对象,运算结果是字符常量或逻辑常量。表3-3为字符运算符 的功能。 表3-3 字符运算符 运算符 功能 表达式举例 运算结果 + 串1+串2:两串顺序相连接 ’12 ‘+’56’ ’12 56’ - 串1-串2:串1尾空格移到串2尾后再顺序相连接 ’12 ‘-‘56’ ‘1256 ‘ $ 串1$串2:串1是否为串2子串 ‘1234’$ ‘a12345’ ‘1234’$ ‘34512’ .T. .F. 两个连接运算的优先级别相同,但高于$的比较运算。
3.3.3 日期表达式 由日期运算符将一个日期型或日期时间型数据与一个数值型数据连接而成的运算式称为日期表达式。日期运算符分为“+”和“-”两种,其作用分别是在日期数据上增加或减少一个天数,在日期时间数据上增加或减少一个秒数。两个运算的优先级别相同。 日期表达式的几种形式:其返回结果为日期型或者数值型数据。 <日期型数据>+<数值型数据> <数值型数据>+<日期型数据> <日期型数据>-<数值型数据> <日期型数据>-<日期型数据>
3.3.4 关系表达式 由关系运算符连接两个同类数据对象进行关系比较的运算式称为关系表达式。关系表达式的值为逻辑值,关系表达式成立则其值为“真”,否则为“假”。 表3-4 关系运算符 运算符 功能 表达式举例 结果 < 小于 15<4*6 .T. > 大于 ‘A’ > ‘1’ .T. = 等于 2+4 = 3*5 .F. <>、#、!= 不等于 5 <> -10 .T. <= 小于或等于 'abc' <= 'AB' .F. >= 大于或等于 {10-10-02}>={10/01/02} .T. == 字符串恒同 ‘abc’==’abcabc’ .F.
关系运算符的优先级别相同。关系表达式运算时,就是比较同类两数据对象的“大小”,对于不同类型的数据,其“大小”或者是值的大小,或者是先后顺序。日期或日期时间数据以日期或时间的先后顺序为序。在Visual FoxPro系统中,字符型数据的比较相对复杂,默认规则为: (1)单个字符 单个字符的比较是以字符ASCII码的大小,作为字符的“大小”,也就是先后顺序;
(2)字符串 两个字符串进行比较的基本原则是从左到右逐个字符进行比较,但因系统相关设置状态不同,比较的结果与预期的不完全相同。 ● 相等比较:用运算符=进行两串比较时,或者到达右端串的末尾字符为止(当SET EXACT OFF时),或者当到达两串的末端为止(当SET EXACT ON时),以判断两串是否相等; ● 恒同比较:用运算符==进行两串的恒同比较时,不论SET EXACT的设置如何,只有当两串长度相同,字符相同,排列一致时才成立; ● 大小比较:用运算符<或>进行两串比较时,比较到第1个不相同字符为止,否则,长度较长的串较“大”; ● 其他比较:除上述运算符之外的其他运算符<>、<=和>=的比较,均可看作是两个运算符以逻辑“或”的关系构成的复合运算; ● SET ANSI的影响
(3)汉字 系统默认按汉字的拼音排列汉字的顺序,也就是以汉字的拼音顺序比较“大小”,因此,汉字比较实质上是以字母的顺序进行比较;但Visual FoxPro系统可以设置汉字按笔画排列顺序,因而,汉字的“大小”就决定其笔画数的多少。 用菜单设置汉字排列顺序方式的操作步骤为:单击【工具】|【选项】命令,将打开“选项”对话框中,在“数据”选项卡的“排序序列”下拉列表框中选择“Stroke”项并确定,系统将按汉字的笔画数进行汉字的排序、比较运算。
3.3.5 逻辑表达式 由逻辑运算将逻辑型数据对象连接而成的式子称为逻辑表达式。逻辑表达式的运算对象与运算结果均为逻辑型数据。表3-5为逻辑运算符的功能。逻辑运算符前后一般要加圆点“.”标记,以示区别。 表3-5 逻辑运算符 运算符 功能 优先级别 ( ) 圆括号 最高 | | 最低 .NOT.或! 逻辑非 .AND. 逻辑与 .OR. 逻辑或
对于各种逻辑运算,其运算规则可由逻辑运算真值表确定,表3-6所示就是逻辑运算真值表。对于各种逻辑运算,其运算规则可由逻辑运算真值表确定,表3-6所示就是逻辑运算真值表。 表3-6 逻辑运算真值表 A B A .AND.B A .OR. B .NOT A .T. .T. .T. .T. .F. .T. .F. .F. .T. .F. .F. .T. .F. .T. .T. .F. .F. .F. .F. .T.
在Visual FoxPro系统中,经常需要与一种特殊的“数据”空值NULL(或.NULL.)打交道。如数组变量定义而未赋值时,所有数组变量的默认值为NULL,表中字段可根据需要允许或限制其取空值。空值对于逻辑运算的影响如表3-7所示。 表3-7 NULL值对逻辑运算的影响 逻辑运算 A=.T. A=.F. A=.NULL A .AND. NULL .NULL .F. .NULL. A .OR. NULL .T. .NULL. .NULL. .NOT. A .F. .T. .NULL.