1、2018/10/12,1,第二章 Visual FoxPro基础及数据运算,2018/10/12,2,本 章 目 录,第一节 Visual FoxPro系统命令简介 第二节 Visual FoxPro的数据及其运算 第三节 常用函数,2018/10/12,3,一、Visual FoxPro 6.0命令语法,1一般的命令格式 范围FORWHILE FIELDS Visual FoxPro 6.0中常用短语介绍: FIELDS子句用来规定当前处理的字段或表达式。 范围子句用来规定对表进行操作的记录的范围。通常 有以下四种范围: ALL: 对表中所有记录进行操作。 NEXT N: 只对包括当前记录在
2、内的连续N条记录进行操作。 RECORD N: 只对第N条记录进行操作。 REST: 从当前记录开始(含当前记录)到表尾的所有记录。,方括号内容可选,尖括号的内容由用户提供,2018/10/12,4, FOR子句和WHILE子句 FOR的作用是:在规定的范围内,按条件检查全部记录。 WHILE的作用是:在规定的范围内,只要条件成立,就对当前记录执行该命令,并把记录指针指向下一条记录,一旦遇到条件不满足的记录,就停止查找并结束该命令的执行。若同时使用FOR子句和WHILE子句,则WHILE有较高的优先级。,2018/10/12,5,例1:DISPLAY NEXT 3 FIELDS 姓名,性别,年
3、龄 2。显示当前表中“年龄”大于20岁的学生的姓名、性别和年龄。LIST FIELDS 姓名,性别,年龄 FOR 年龄20,2018/10/12,6,例: 读者表内容如下,分析以下命令的运行结果。,USE 读者 LIST NEXT 4 LIST REST LIST FIELDS 学号,姓名,入学成绩 LIST FOR 性别= “男” LIST WHILE 性别= “男” USE,2018/10/12,7,(4)TO/TO FILES子句:表操作的去向。为可选项,只能选则其一。一般指把输出的结果送到哪里。去向一般有:磁盘文件、打印机等(默认去向为显示器) 【例】 DISPLAY ALL FIEL
4、DS 姓名,工资 FOR 工资850 TO PRINTER 该命令的功能:把当前表文件中的全部记录中工资850元的记录,在显示器显示的同时送打印机输出,但结果只输出姓名,工资两个字段的内容,不显示记录号。,2018/10/12,8,2Visual FoxPro 6.0命令的书写规则,(1)命令动词必须写在一条命令的最前面,而后面子句的次序可以任意排列。 (2)命令行中,命令动词与短语、短语与短语和短语的各部分之间必须以一个或多个空格分开。 (3)命令动词、各短语中的保留字及函数名都可简写为前四个字符,且大小写无关。如DISPLAY 可简写为DISP。 (4)一个命令行的最大长度是254个字符,
5、如果命令太长,一行写不下,可在行末用“;”续行。并按回车换行,在下一行继续输入该命令。 (5)一行只能写一个命令。,2018/10/12,9,命令工作方式中的常见错误 (1) 命令动词写错 (2) 格式不符合要求 标点符号不对(一定要用半角状态下的标点符号) 缺少必需的空格或添加了不该有的空格 数据类型不一致,要注意字符型、数值型、日期型、逻辑型数据的书写格式 (3) 打不开所需文件:没有正确输入盘符和路径或文件名输错,2018/10/12,10,3符号约定,:方括号,表示是可选的项目。若选择该项目, 不要写方括号本身。 :角括号,表示括号内的项目是必须要选的,但不要写角括号本身。 |: 坚线
6、号,表示两个项目中选择其中一个,但不 要写坚线号本身。 :省略号,表示前项可继续重复多次选择。,2018/10/12,11,第二节 Visual FoxPro的数据及其运算,在Visual FoxPro系统中,数据可用常量、变量、数组表示,数据还可以用字段、记录和对象,由它们存储、容纳各种类型的数据。因此,常把这些供数据存储的常量、变量、数组、字段、记录和对象等称为数据存储容器。用户正是利用不同的数据存储容器,在Visual FoxPro系统中表示、存储、操作、处理各种类型的数据,实现数据处理的应用。,2018/10/12,12,一、Visual FoxPro的数据类型 1字符型(charac
7、ter)用字母C表示,字符型数据包括中文字符、英文字符、数字字符和其他ASCII字符,其长度最长不超过254个字符。 2数值型(Numeric)用字母N表示,用来表示数量并可以进行算术运算的数据类型。由阿拉伯数字、正负号、小数点组成。Visual FoxPro中,具有数值特征的数据类型还有整型、浮点型和双精度型,但这三种数据类型只用于字段变量。,2018/10/12,13,3日期型(Date)用字母D表示,用来表示日期的数据类型。日期的默认 格式为: mm/dd/yy其中MM表示月,DD表示日,YY表示年。日期型数据的长度固定为8位。 4日期时间型(Date Time)用字母T表示,是用来表示
8、日期和时间,默认格式为:mm/dd/yy hh:mm:ss其中mm,dd,yy的意义与日期型相同,hh,mm,ss分别表示时、分、秒。长度也固定为8位。5逻辑型(Logic)用字母L表示,用来描述客观事物真假或是非判断的数据类型。只有两个取值:真(.t.或.T.)和假(.f.或.F.),逻辑型数据长度固定为1位。,2018/10/12,14,6货币型(Currency)用字母Y表示,为存储货币值而使用的一种数据类型,它默认保留4位小数,占据8字节的存储空间。 7备注型(Memo)用字母M表示,用来存放较多字符的数据类型。只用于表中字段类型的定义。字段长度固定为4个字节。实际数据存放在与表文件同
9、名的备注文件(.ftp)中,其长度依实际需要而定。 8通用型(General)用字母G表示,是用来存储OLE对象的数据类型。可以是电子表格、文挡、图形、声音等,跟备注型数据一样,它只用于表中字段类型的定义,通用型数据字段长度固定为4位。,2018/10/12,15,二、常量常量是在命令或程序中可直接引用、具有具体值的数据项,其特征是在整个操作过程中它的值和表现形式保持不变。Visual FoxPro按常量取值的数据类型,将常量分为6种类型:数值型常量、货币型常量、字符型常量、逻辑型常量、日期型常量、日期时间型常量。,2018/10/12,16,1字符型常量由任意ASCII字符、汉字和汉字字符组
10、成的字符型数据,字符型常量又称为字符串。为与其他类型常量、变量和标识符相区别,Visual FoxPro要求将字符串中所有字符,用一对双引号“”或单引号“”或方括号“”作为定界符对括起来。如:“ I am a student.”,中华人民共和国,Visual FoxPro 6.0系统 “123”AF”,2018/10/12,17,2日期型常量日期型常量是表示日期值的数据,其默认格式是: mm/dd/yyyy如10/01/02和10/01/2002均表示2002年10月1日这一日期常量值。3日期时间型常量Visual FoxPro系统中增加了一种表示日期和时间值的日期时间型常量,其默认格式是:m
11、m/dd/yyyy , hh:mm:ssa|p其中a和p分别表示AM(上午)和PM(下午)。日期值和日期时间值的输入格式与输出格式并不完全相同,特别是输出格式受系统环境设置的影响,用户可根据应用需要进行相应调整、设置。,2018/10/12,18,(1)日期格式中的世纪值通常日期格式中用2位数表示年份,但涉及到世纪问题就不便区分。Visual FoxPro提供设置命令进行相应设置。命令格式:SET CENTURY ON | OFF | TO nCentury命令功能:ON:日期数据显示10位,其中年份4 位,即日期值输出时显示年份值;OFF:(默认值)。日期数据显示8位,年份2位,即日期值输出
12、时不显示年份值;TO nCentury:指定日期数据所对应的世纪值。nCentury是一个199的整数,代表世纪数。,2018/10/12,19,(2)设置日期显示格式用户可以调整、设置日期值和时间值的显示输出格式。既可以用命令方式设置,也可以用菜单方式设置。命令格式:SET DATE TO AMERICAN | ANSI | BRITISH | FRENCH | GERMAN | ITLIAN | JAPAN | USA | MDY | DMY | YMD | SHORT | LONG命令功能:设置日期型和日期时间型数据的显示输出格式。系统默认为AMERICAN美国格式。如果日期格式设置为S
13、HORT或LONG格式,Visual FoxPro系统将按Windows系统设置的短日期格式或长日期格式显示输出日期数据,而且SET CENTURY命令的设置被忽略。,2018/10/12,20,各种日期格式设置所对应的日期显示输出格式,见表2-1所示。表2-1 系统日期格式,2018/10/12,21,(3)设置日期2000年兼容性通常日期型和日期时间型数据的结果,与SET DATE命令和SET CENTURY命令设置状态及当前系统时间有关。由于系统时间与相应设置不同,同一数据的结果可能有不同的解释。如日期值10/11/12可以解释为1912 年 10 月 11 日、2012 年 10 月
14、11 日、1912 年 11 月 10 日、1910 年 11 月 12 日或者 2010 年 11 月 12 日等。这显然会导致系统混乱,而且还可能造成2000年兼容性错误,影响系统正常、有效的操作运行。,2018/10/12,22,(4)严格的日期格式 Visual FoxPro系统增加了一种所谓严格的日期格式。不论哪种设置,按严格日期格式表示的日期型和日期时间型数据,都具有相同的值和表示形式。严格的日期格式是:yyyy-mm-dd,hh:mm:ssa|p 符号表明该格式是严格的日期格式,并按照 YMD 的格式解释日期型和日期时间型数据,它是严格日期格式的标志,不可缺少。有效的日期型和日期
15、时间型数据分隔符为:连字符“-”、正斜杠“/”、句点“.”和空格。如2002-10-01、2002-10-01 10:30:30a,分别表示2002年10月1日及该日上午10时30分30秒这两个日期数据。,2018/10/12,23,Visual FoxPro系统默认采用严格的日期格式,并以此检测所有日期型和日期时间型数据的格式是否规范、合法。为与早期版本兼容,用户通过命令或菜单设置改变这一格式。命令设置的命令格式:SET STRICTDATE TO 0 | 1 | 2命令功能:0:关闭严格的日期格式检测,即设置日期格式按传统的严格的格式;1:设置严格的日期格式检测(默认值),要求所有日期型和
16、日期时间型数据均按严格的格式;2:设置与1相同,但如果程序代码中出现CTOD()和CTOT()函数时,会出现编译错误。这个设置最适合调试时使用,用来检测2000年兼容性错误;省略:恢复系统默认值,等价于1的设置。,2018/10/12,24,4逻辑型常量逻辑型常量就是表示逻辑判断结果“真”或“假”的逻辑值。逻辑常量只有真和假两种,分别用(.t.或.y.)和(.f.或.n.)表示真和假。一般应在表示逻辑常量的字母左右加注圆点符“.”以示区别。逻辑型常量在内存中占用一个字节。,2018/10/12,25,5数值型常量也称常数,用来表示一个数量的大小,由数字0-9、小数点和正负符号组成。例如,12.
17、3,-67,3.14等。也可以使用科学计数法形式表示,例如:6.789*105可表示为6.789E5。 6货币型常量用来表示货币值,书写格式与数值型类似,但要加上一个前置的符号$。货币型数据在存储和计算时,采用4位小数,如果多于4位,那么系统自动四舍五入。货币型常量不能用科学计数法表示。,2018/10/12,26,课程回顾:1.VFP工作方式和命令结构 工作方式: 交互方式(命令操作,菜单操作);程 序执行方式 命令结构:命令动词+命令子句 命令动词 范围子句 表达式 field for/while2.常量,2018/10/12,27,命令工作方式中的常见错误 (1) 命令动词写错 (2)
18、格式不符合要求 标点符号不对(一定要用半角状态下的标点符号) 缺少必需的空格或添加了不该有的空格 数据类型不一致,要注意字符型、数值型、日期型、逻辑型数据的书写格式 (3) 打不开所需文件:没有正确输入盘符和路径或文件名输错(1)判断常量的唯一标准是 ( )A.定界符 B.分隔符 C.连接,2018/10/12,28,三、 变量变量是在操作过程中可以改变其取值或数据类型的数据项。在Visual FoxPro系统中变量分为字段变量、内存变量、数组变量和系统变量4类。此外,作为面向对象的程序语言,Visual FoxPro在进行面向对象的程序设计中引入了对象的概念,对象实质上也是一类变量。确定一个
19、变量,需要确定其三个要素:变量名、数据类型和变量值。,2018/10/12,29,1命名规则在Visual FoxPro系统中,将表示、存储数据的常量、变量、数组、字段、记录、对象、表、数据库等,都称之为数据容器。所有数据容器均需命名以相互区别,为规范各类对象的命名,Visual FoxPro系统推荐了若干“命名规则”供用户参考,以提高操作命令与程序的可读性和规范性。 使用字母,下划线和数字命名。一般建议不采用汉字命名; 命名以字母或下划线开头;除自由表中字段名、索引的TAG标识名最多只能10个字符外,其他的命名可使用1128个字符; 避免使用 Visual FoxPro的保留字(命令名、标准
20、函数名); 文件名的命名应遵循操作系统的约定。,2018/10/12,30,2内存变量的赋值内存变量是在内存中定义的一种单个数据元素的临时性变量。(1)内存变量的数据类型内存变量的数据类型包括:数值型、字符型、逻辑型、日期型和日期时间型;(2)内存变量的建立建立内存变量就是给内存变量赋值。内存变量赋值既可定义一个新的内存变量,也可改变已有内存变量的值或数据类型。当内存变量与表中的字段变量名同名时,字段变量优先,可通过在内存变量名前加“M-”来区分,但内存变量付值时不能加前缀。必须先定义,后使用,2018/10/12,31,命令格式一:STORE TO 命令功能:计算的值并赋值给各个内存变量。例
21、:store (2+4)/2 TO X,Y,ZSTORE “OK” TO C1,C2 命令格式二:= 命令功能:计算的值并赋值给指定内存变量。例: A=2B=“江阴” 说明:一次只能给一个变量赋值,2018/10/12,32,3. 表达式的显示输出可以用两个命令在屏幕上显示输出内存变量的值。命令格式:?| ? AT 命令功能:计算表达式表中各表达式的值,并在屏幕上指定位置显示输出各式的值。 :多个用逗号两两分隔的表达式,各表达式的值输出时,以空格分隔;AT 子句指定表达式值从指定列开始显示输出。AT的定位只对它前面的一个表达式有效,多个表达式必须用多个AT子句分别定位输出,而且可反序定位。,2
22、018/10/12,33,?:先回车换行,再计算并输出表达式的值;?:在屏幕上当前位置,计算并直接输出表达式的值;例:?2,3,4?a , b 显示: 2 3 4a bX=2Y=3?X AT 20, Y AT 30 显示:2(在第20列上) 3(在第30列上),2018/10/12,34,4内存变量的显示(1)变量的显示用?/?命令可以分别显示单个或一组变量的值。有时用户还需了解变量其他相关信息,如数据类型、作用范围,或了解系统变量的信息。Visual FoxPro系统提供了相应操作命令。命令格式:DISPLAY | LIST MEMORY LIKE TO PRINTER PROMPT | T
23、O FILE NOCONSOLE命令功能:显示指定变量的信息。,2018/10/12,35,说明: (1) LIKE选项子句可以使用通配符来代替变量名的一部分,以显示与通配符相符合的变量。有两种通配符:“?”代表任意一个字符,“*”代表任意多个字符。 (2) LIST 和DISPLAY的区别是:前者连续显示,后者分屏显示。 (3) TO FILE 子句功能是将内存变量有关信息送至一个文本文件。TO PRINTER 则是送至打印机打印。 例: 定义并显示内存变量:STORE “dggaf“ TO a1a2=2004-04-25c=.t.LIST MEMO LIKE a?,2018/10/12,3
24、6,5. 内存变量文件的建立 Visual FoxPro提供相应命令,可用文件形式将某些内存变量保存起来,以便重复使用。命令格式:SAVE TO ALL LIKE | ALL EXCEPT 命令功能:将指定变量的信息保存到指定的变量文件(*.MEM)中。ALL LIKE :只保存符合通配符条件的所有变量;ALL EXCEPT :只保存不符合通配符条件的所有变量。,2018/10/12,37,6. 内存变量的恢复需要保存在文件中的变量信息时,必须先恢复到内存后方可使用。命令格式:RESTORE FROM ADDITIVE命令功能:将指定变量文件(*.MEM)中变量信息恢复到内存中。ADDITIV
25、E:省略此项,清除内存所有变量后再恢复文件中变量的信息;加选此项,将变量文件中的变量信息追加到内存现有变量信息中。7.内存变量的清除Visual FoxPro系统对定义内存变量的数量是有限制的,应及时清理,尽量减少内存的占用,定义其他变量。命令格式:RELEASE RELEASE ALL LIKE | EXCEPT ,2018/10/12,38,8数组变量数组变量是结构化的变量,是一组具有相同名称、以下标相互区分的有序内存变量。一个数组通常都包含多个数据元素。Visual FoxPro系统中只允许使用一维数组(相当于数列)和二维数组(相当于行列式或矩阵)。 (1)数组元素 数组中各有序变量(数
26、据元素)组成数组的成员,称为数组元素。数组元素实质上是一个内存变量,也称数组变量,它们具有相同变量名即数组名,彼此以下标区分;,2018/10/12,39, 数组元素的名称(变量名)用数组名加下标构 成。如AA(1),BB(2,3)分别表示一维数组AA 的第1个元素,二维数组BB中第2行第3列的元素; 下标必须用圆括号对括;一维数组的元素只有 一个下标,二维数组的元素有两个以逗号分隔的 下标; 下标必须是非负数值,可以是常量、变量、函 数或表达式,下标值会自动取整。如AA(1.5), AA(nA1),AA(2+10/3)等; 数组元素的数据类型决定于最后赋值的数据类 型;不同数组元素的数据类型
27、可以不同; 数组元素与普通内存变量一样操作,可以赋值 和引用。,2018/10/12,40,(2)数组的定义数组必须先定义后使用,定义数组是向系统申请数组元素在内存中的存储空间。命令格式:DIMENSION | DECLARE (,),(,)命令功能:定义指定的各个数组。 Dimension d3,4(3)数组的赋值与引用数组元素的赋值与引用,与普通内存变量的规则相同。,2018/10/12,41,例:DIMENSION X3,4,Y(3) STORE 5 TO X Y(1)=2 Y(2)=“ABC” Y(3)=.T. 说明: X数组的所有数组元素均为5 Y数组中各数组元素的数据类型不同,20
28、18/10/12,42,例:dimension A(2,4),B(2) STORE 0 TO A A(1,2)=“BOOK” A(2,4)=“RULE” A(1,3)=150 A(2,3)=.T. STORE 10 TO B ?A(1,1),A(1,2),A(1,3),A(1,4) ?A(2,1),A(2,2),A(2,3),A(2,4) ?B(1) ?B(2),显示结果为: 0 BOOK 150 0 0 0 T RULE 1010,2018/10/12,43,9字段变量表由若干记录构成,每个记录都包含若干个数量相同的字段,同一字段在不同记录中分别对应不同的字段值,因此,字段也是变量。与其他变
29、量不同的是,字段变量是定义在表中的变量,随表的存取而存取,因而是永久性变量。字段名就是变量名;变量的数据类型为Visual FoxPro中任意数据类型,字段值就是变量值。,2018/10/12,44,同一字段在不同记录中分别对应不同的字段值。一旦一个数据表建立,就有了属于该数据表的一组字段变量字段名就是字段变量名,其名称长度不能超过10个字符可以是任意类型,在创建数据表结构时定义,2018/10/12,45,10系统变量系统变量是Visual FoxPro系统特有的内存变量,它由Visual FoxPro系统定义、维护。系统变量有很多,其变量名均以下划线“_”开始,因此在定义内存变量和数组变量
30、名时,不要以下划线开始,以免与系统变量名冲突。系统变量设置、保存了很多系统的状态、特性,了解、熟悉并且充分地运用系统变量,会给数据库系统的操作、管理带来很多方便,特别是开发应用程序时更为突出,学习时可对此有所关注。例:_MFLIE,_MEDIT,2018/10/12,46,四、 Visual FoxPro的表达式,在Visual FoxPro系统中,表达式是由常量、变量、函数及其他数据单独或与运算符组成的有意义的运算式子。运算符是对数据对象进行加工处理的符号,根据其处理数据对象的数据类型,运算符分为算术(数值)运算符、字符运算符、日期时间运算符、逻辑运算符和关系运算符五类,相应的,表达式也分为
31、算术表达式、字符表达式、日期时间表达式、逻辑表达式和关系表达式五类。常量、变量和函数可以作为表达式的特例。今后涉及到表达式的描述,除特别指明,均可包含这些特殊的形式。,2018/10/12,47,在一个表达式中可能包含多个由不同运算符连接起来的、具有不同数据类型的数据对象,但任何运算符两侧的数据对象必须具有相同数据类型,否则运算将会出错;由于表达式中有多种运算,不同的运算顺序可能得出不同结果,甚至出现运算错误,因此当表达式中包含多种运算时,必须按一定顺序施行相应运算,才能保证运算的合理性和结果的正确性、惟一性。用户也可以通过给表达式加圆括号的方式,改变其默认运算顺序。在Visual FoxPr
32、o系统中,各类运算的优先顺序如下:圆括号算术和日期运算字符串运算关系运算逻辑运算同一类运算符也有一定的运算优先顺序,这在各类表达式中分别介绍。如果有多个同一级别的运算,则按在表达式中出现的先后顺序进行运算。,2018/10/12,48,1. 算术表达式算术表达式又称数值表达式,其运算对象和运算结果均为数值型数据。数值运算符的功能及运算优先顺序,如表2-2所示。表中运算符按运算优先级别从高到低顺序排列。表2-2 算术运算符,2018/10/12,49,2. 字符表达式字符表达式是由字符运算符将字符型数据对象连接起来进行运算的式子。字符运算的对象是字符型数据对象,运算结果是字符常量或逻辑常量。表2
33、-3为字符运算符 的功能。“+”与 “-”都是字符连接运算符,都将两个字符串顺序连接,但“+”是直接连接,“-”则将串1尾部所有空格移到串2尾部后再连接;“$”运算实质上是比较两个串的包含关系,因此有些书籍中将其归于关系运算,其作用是比较、判断串1 是否为串2的子串,如果串1是串2的子串,运算结果为“真”,否则为“假”。所谓子串,如果串1中所有字符均包含在串2中、且与串1中排列方式与顺序完全一致,则称串1为串2的子串。,2018/10/12,50,表2-3 字符运算符两个连接运算的优先级别相同,但高于$的比较运算。,2018/10/12,51,3. 日期表达式由日期运算符将一个日期型或日期时间
34、型数据与一个数值型数据连接而成的运算式称为日期表达式。日期运算符分为“+”和“-”两种,其作用分别是在日期数据上增加或减少一个天数,在日期时间数据上增加或减少一个秒数。两个运算的优先级别相同。 例如: ? 2004-05-10+10? 2004-05-10-2003-05-10 主屏幕显示:05/20/04 366,2018/10/12,52,4. 关系表达式由关系运算符连接两个同类数据对象进行关系比较的运算式称为关系表达式。关系表达式的值为逻辑值,关系表达式成立则其值为“真”,否则为“假”。表2-4 关系运算符,2018/10/12,53,关系运算符的优先级别相同。关系表达式运算时,就是比较
35、同类两数据对象的“大小”,对于不同类型的数据,其“大小”或者是值的大小,或者是先后顺序。日期或日期时间数据以日期或时间的先后顺序为序。在Visual FoxPro系统中,字符型数据的比较相对复杂,默认规则为: (1)单个字符单个字符的比较是以字符ASCII码的大小作为字符的“大小”,也就是先后顺序。 (2)字符串两个字符串进行比较的基本原则是从左到右逐个字符进行比较,但因系统相关设置状态不同,比较的结果与预期的不完全相同。,2018/10/12,54, 相等比较:用运算符“”进行两串比较时,或者到达右端串的末尾字符为止(当SET EXACT OFF时)或者当到达两串的末端为止(当SET EXA
36、CT ON时),以判断两串是否相等; 恒同比较:用运算符=进行两串的恒同比较时,不论SET EXACT的设置如何,只有当两串长度相同,字符相同,排列一致时才成立; 大小比较:用运算符“”进行两串比较时,比较到第个不相同字符为止,否则,长度较长的串较“大”; 其他比较:除上述运算符之外的其他运算符、=的比较,均可看作是两个运算符以逻辑“或”的关系构成的复合运算;,2018/10/12,55,(3)汉字系统默认按汉字的拼音排列汉字的顺序,也就是以汉字的拼音顺序比较“大小”,因此,汉字比较实质上是以字母的顺序进行比较;但Visual FoxPro系统可以设置汉字按笔画排列顺序,因而,汉字的“大小”就
37、决定其笔画数的多少。用菜单设置汉字排列顺序方式的操作步骤为:单击【工具】|【选项】命令,将打开“选项”对话框中,在“数据”选项卡的“排序序列”下拉列表框中选择“Stroke”项并确定,系统将按汉字的笔画数进行汉字的排序、比较运算。若选择“achine”项则字符按机内码次序排序,汉字在所有西文字符后,汉字内部按国标码排序。,2018/10/12,56,例:在不同的字符排序设置下比较字符串的大小。SET COLLATE TO “MACHINE“? “x“xyz“,“x“XYZ“,“x“ X“ ? “湖南“湖北“,“湖“湖南“,“你好“您好“SET COLLATE TO “PINYIN“? “x“x
38、yz“,“x“XYZ“,“x“ X“ ? “湖南“湖北“,“湖“湖南“,“你好“您好“SET COLLATE TO “stroke”? “x“xyz“,“x“XYZ“,“x“ X“? “湖南“湖北“,“湖“湖南“,“你好“您好“,2018/10/12,57,5. 逻辑表达式由逻辑运算将逻辑型数据对象连接而成的式子称为逻辑表达式。逻辑表达式的运算对象与运算结果均为逻辑型数据。表2-5为逻辑运算符的功能。逻辑运算符前后一般要加圆点“.”标记,以示区别。表2-5 逻辑运算符,2018/10/12,58,对于各种逻辑运算,其运算规则可由逻辑运算真值表确定,表2-6所示就是逻辑运算真值表。表2-6 逻辑
39、运算真值表,2018/10/12,59,在Visual FoxPro系统中,经常需要与一种特殊的“数据”空值(NULL(或.NULL.)打交道。表中字段可根据需要允许或限制其取空值。空值对于逻辑运算的影响如表2-7所示。表2-7 NULL值对逻辑运算的影响,2018/10/12,60,对于两个逻辑型数据,一般不用比较的方式来确定它们之间的关系,而是直接运用逻辑运算的方式进行处理。如对表中记录实施选择运算时,是用FOR 或WHILE 进行逻辑判断,其中就是一个关系表达式或逻辑表达式。对于以逻辑型字段进行逻辑判断的情况,一般不用关系表达式而直接用逻辑表达式。如“性别”是一个逻辑型字段,并约定“真”
40、表示男性,“假”表示女性。那么判断某记录对应人员是否为男性,用FOR 性别,而不用FOR 性别=.T.,判断是否为女性,用FOR .NOT. 性别,不用FOR 性别=.F.。,2018/10/12,61,6运算符优先级 先执行算术运算,字符运算和日期运算,再执行关系运算,最后执行逻辑运算。当然可以用括号来改变其优先级。括号括起来的应优先运算。例: 多种表达式运算示例? 93 AND 53 OR “a“$“ab“ AND .NOT.f.主屏幕显示:.t.? (100%3=1) AND (15-4=0) OR “张“=“张三“主屏幕显示:.f.,2018/10/12,62,第三节 Visual F
41、oxPro常用函数,Visual FoxPro系统中,函数是一段程序代码,用来进行一些特定的运算或操作,支持和完善命令的功能,帮助用户完成各种操作与管理。Visual FoxPro系统有数百种不同函数,按函数提供方式,可分为系统(标准)函数和用户自定义函函数,按函数运算、处理对象和结果的数据类型,可分为数值型函数、字符型函数、逻辑型函数、日期时间型函数、数据转换函数等,按函数的功能和特点,可分为数据处理函数、数据库操作函数、文件管理函数、键盘和鼠标处理函数、输出函数、窗口界面操作函数、程序设计函数、数据库环境函数、网络操作函数、系统信息函数、动态数据操作函数等。,2018/10/12,63,V
42、isual FoxPro的函数由函数名与自变量两部分组成。标准函数是Visual FoxPro系统提供的系统函数,其函数名是Visual FoxPro保留字,自定义函数是用户自已定义的函数,函数名用户指定;自变量必须用圆括号对括起来,如有多个自变量,各自变量以逗号分隔;有些函数可省略自变量,或不需自变量,但也必须保留括号;自变量数据类型由函数的定义确定,数据形式可以是常量、变量、函数或表达式等。 函数是一类数据项,除个别(如宏替换)函数外,函数都不能像命令一样单独使用,只能作为命令的一部分进行操作运算。,2018/10/12,64,一、 数值函数数值函数用于数值运算,其自变量与函数都是数值型数
43、据。1取绝对值函数ABS( )和符号函数SIGN( )【格式】ABS()SIGN()【功能】计算nExp的值,并返回该值的绝对值。SIGN()返回指定数值表达式的符号。2指数函数EXP( )【格式】EXP()【功能】求以e为底、nExp值为指数的幂,即返 回ex的值。3取整函数INT( )【格式】INT()【功能】计算nExp的值,返回该值的整数部分。,2018/10/12,65,4上界函数CEILING( )【格式】CEILING()【功能】计算nExp的值,返回一个大于或等于该值 的最小整数。5下界函数FLOOR( )【格式】FLOOR()【功能】计算nExp的值,返回一个小于或等于该值
44、的最大整数。6自然对数函数LOG( )【格式】LOG()【功能】求nExp的自然对数。nExp的值必须为正数。7常用对数函数【格式】LOG10()【功能】求nExp的常用对数。nExp的值必须为正数。,2018/10/12,66,8平方根函数SQRT( )【格式】SQRT()【功能】求非负nExp的平方根。9最大值函数MAX( )和最小值函数MIN( )【格式】MAX(,.)MIN(,.)【功能】返回数值表达式中的最大值MAX( )和最小 】 值MIN( )。10求余数函数MOD( )【格式】MOD(,)【功能】返回nExp1除以nExp2的余数, 符号与nExp2 相同。如果两个表达式符号相
45、异,则函数值 为两数相除的余数再加上除数的值。,2018/10/12,67,11四舍五入函数ROUND( )【格式】ROUND(,)【功能】返回nExp1四舍五入的值, nExp2表示 保留的小数位数。12函数PI( )【格式】PI( )【功能】返回常量的近似值13正弦函数SIN( )【格式】SIN()【功能】返回nExp的正弦值。nExp以弧度为单 位,函数值域为-1,1。14余弦函数COS( )【格式】COS()【功能】返回nExp的余弦值。nExp以弧度为单 位,函数的值域为-1,1。,2018/10/12,68,15正切函数TAN( )【格式】TAN()【功能】返回nExp的正切值。n
46、Exp以弧度为单位,其 值为/2或- /2时,系统返回一个绝对值很大的数。16反正弦函数ASIN( )【格式】ASIN()【功能】返回nExp的反正弦值。自变量值必须在-1,1 内,函数值为弧度,且值域为-/2, /2。17反余弦函数ACOS( )【格式】ACOS()【功能】返回nExp的反余弦值。自变量的值必须在- 1,1内,函数值为弧度,值域为-/2, /2。18反正切函数ATAN( )【格式】ATAN()【功能】返回nExp的反正切值。函数值为弧度,值域 为(-/2, /2)。,2018/10/12,69,分析下例各命令的执行结果: 例1:a=3? ABS(10-a),ABS(a-10)
47、,SIGN(10-a),SIGN(a-10) 例2:x=6.9?INT(x),INT(-x),CEILING(x),CEILING(-x),FLOOR(x),FLOOR(-x) 例3: x=314.356? ROUND(x,2),ROUND(x,1),ROUND(x,0),ROUND(x,-1) 例4: ? MOD(10,3), MOD(10,-3), MOD(-10,3), MOD(-10,-3) 例5: MOD()函数与INT()函数使用示例x=356x1=INT(x/100)x2=INT(MOD(x,100)/10)x3=MOD(x,10)? x1,x2,x3,2018/10/12,70
48、,二、 字符函数 字符函数是处理字符型数据的函数,其自变量或函数值中至少有一个是字符型数据。函数中涉及的字符型数据项,均以cExp表示。1子串位置函数【格式】 AT(,, )【功能】返回串cExp1在串cExp2中的起始位置。函数值 为整数。如果串cExp2不包含串cExp1,函数返回值为零。 第三个参数数值表达式用于表明要搜索字符表达式1在 字符表达式2中第几次出现,其默认值为1,可缺省。例如,a=“This is Visual FoxPro“?AT(“fox“,a),ATC(“fox“,a),AT(“is“,a,3),AT(“th“,a)主屏幕显示:0 16 10 0,2018/10/12,71,2取子串函数【格式】1) LEFT(,)2) RIGHT(,)3) SUBSTR(,)【功能】1)返回从cExp串中第一个字符开始,截取nExp 个字符的子串。2)返回从cExp串中右边第一个字符开始,截取 nExp个字符的子串。3)返回从串cExp中第nExp1个字符开始,截取 nExp2个字符的子串。 例如,a=“This is Visual FoxPro“? LEFT(a,3),RIGHT(a,4),SUBSTR(a,6,2)+SUBSTR(a,9) 主屏幕显示:Thi xPro isVisualFoxPro,