《VisualFoxPro6第3章.ppt》由会员分享,可在线阅读,更多相关《VisualFoxPro6第3章.ppt(106页珍藏版)》请在三一办公上搜索。
1、第三章 数据与数据运算,本章要点:Visual FoxPro的各种类型常量的书写格式变量的种类和类型内存变量常用命令数值、字符与日期时间表达式关系表达式逻辑表达式常用函数:字符处理函数、数值计算函数、日期时间函数、数据类型转换函数和测试函数,第三章 数据与数据运算,将各种形式的数据经过数字化存入计算机,都须确定其:型:类型数据 值:取值在VFP中,常量、变量、函数和表达式的类型包括6种:字符型、数值型、货币型、逻辑型、日期型、日期时间型。,只适用于字段变量的数据类型,1.浮点型(Float)包括此类型是为了提供兼容性,浮点型在功能上与数值型等价只能用在表中的字段2.双精度型(Double)此类
2、型用于取代数值型,以便提供更高的数值精度与数值型不同,双精度只能用于数据表中字段的定义每个双精度型数据占8个字节3.整型(Integer)整型用于存储无小数部分的数值,只能用于数据表中字段的定义在表中,整型字段占用个字节,4备注型(Memo)备注型用于字符型数据块的存储,只能用于数据表中字段的定义在表中,备注型字段占用4个字节,并用这4个字节来引用备注的实际内容实际备注内容的多少只受内存可用空间的限制由于备注型字段的实际内容变化很大,不能直接将备注内容存在表.dbf文件中系统将备注内容存放在一个相对独立的文件中,该文件的扩展名为.dbt由于没有备注型的变量,所以对备注型字段的处理,需转换成字符
3、型变量,然后使用字符型函数进行处理5通用型(General)字符型(二进制)备注型(二进制),常量和变量,一、常量 定义:在程序运行过程中保持不变的量。不同类型的常 量有不同 的书写格式。,1、字符型(Character),表示方法是用半角单引号、双引号或方括号扩 起来的内容。(,“”和称为定界符),注:定界符只规定常量的类型以及常量的起始和终止界限,它不作为常量本身的内容。且必须要成对匹配,不能一边用单引号而另一边用双引号。若某种定界符本身也是字符串的内容,则需要用另一种定界符为该字符串定界。,例31:显示几个字符型常量 在命令窗口键入以下两条命令:?“计算机”,123,数据,ABX”abc
4、”?“学习”,字符串,“”,表示方法?(单问号)的功能:是在下一行显示若干个表达式的值。?(双问号)的功能:是在同一行显示表达式的值。,2、数值型常量(Numeric),组成:由09、小数点和正负号。如:12、3.45、-6.78。为了表示很大或很小的数值型常量,可以使用科学记数法形式。数值型数据的长度为120,内存中用8个字节表示,其取值范围是-0.9999999999E+190.999999 9999E+20,3、货币型(Currency),用来表示货币值,其格式与数值型常量类似,但要加上一个前置的($)符。货币数据采用4位小数。若一个货币型常量多于4位小数,那么系统会自动将多余的小数位四
5、舍五入。例:$123.456 789-$123.4568在内存中占用8个字节,取值范围:-922 337 203 685 477.580 7922 337 203 685 477.580 7,4、日期型(Date),日期型常量的定界符是一对花括号。花括号内包括年、月、日三部分内容,各部分内容之间用分隔符分隔。系统默认斜杠(/)分隔符。常用的其他日期分隔符有连字号(-)、句点(.)和空格。日期型常量有两种格式:,传统的日期格式:(系统默认的日期数据为美国日期格式“月/日/年”(mm/dd/yy),其中月、日、年各为两位数字。)如:10/08/01 对这个日期在不同的设置状态下,计算机会作出不同的
6、解释。2001年10月8日(月/日/年)、2001年8月10日(日/月/年)、2010年8月1日(年/月/日)注:上面的格式要受到命令语句SET DATE TO 和SET CENTURY设置的影响。,严格的日期格式yyyy-mm-dd,用此格式写的日期常量能表达一个确切的日期,它不受SET DATE等语句设置的影响。注:1)花括号内第一个字符必须是()2)年份必须用4位 3)年月日的次序不能颠倒、不能缺省。2003-12-03 日期型数据用8个字节表示,取值范围是:0001-01-019999-12-31,、的区别:除了在表中输入数据外,严格的日期格式可以在任何情况下使用,而传统的日期格式只能
7、在SET STRICTDATE TO 0状态下使用。所以使用严格的日期格式十分方便。,影响日期格式的设置命令A)SET MARK TO日期分隔符&用于指定日期分隔符“-”.”,系统默认“/”B)SET DATE TOAMERICAN|ANSI|BRITISH|FRENCH|&设置日期显示的格式 GERMAN|ITALIAN|JAPAN|USA|MDY|DMY|YMD,表3.1 常用日期格式,短 语,短 语,格 式,格 式,AMERICAN,BRITISHFRENCH,ITLIAN,USA,DMY,mm/dd/yy,dd/mm/yy,dd-mm-yy,mm-dd-yy,dd/mm/yy,ANSI
8、,GERMAN,JAPAN,MDY,YMD,mm-dd-yy,Yy/mm/dd,yy-mm-dd,C)SET CENTURY ON/OFF/设置年份的位数ON:4位,OFF:2位(系统默认)D)SET STRICTDATE TO012/设置是否对日期格式进行检查(传统日期格式)0表示不进行严格的日期格式检查,目的是与早期Visual Foxpro兼容。1表示进行严格的日期格式检查,它是系统默认的设置。2 表示进行严格的日期格式检查,并且对CTOD()和DTOT()函数的格式也有效。,例32设置不同的日期格式 SET CENTURY ON&设置4位数字年份 SET MARK TO&恢复系统默认的
9、斜杠日期分隔符 SET DATE TO YMD&设置年月日格式?2001-08-26 显示:2001/08/26,再在命令窗口键入4条命令,并分别回车执行:SET CENTURY OFF&设置2位数字年份SET MARK TO“.”&设置日期分隔符为西文句号SET DATE TO MDY&设置月日年格式?2001-08-26显示,接着在命令窗口键入如下两条命令,并分别回车执行:SET STRICTDATE TO 0&不进行严格的日期格式检查?2001-08-26,09.22.01显示在命令窗口键入如下两条命令,并分别回车执行:SET MARK TO“/”&设置日期分隔符为分号?2001-08-
10、26,09.22.01显示:08/26/01 09/22/01,5.日期时间型(Date Time),包括日期和时间两部分内容:,其中与日期型常量相似,也有传统和严格两种格式.部分的格式为 hh:mm:ssap,其中hh、mm、ss分别代表时、分和秒,默认值分别为12、0和0。a和p分别代表上午和下午,默认值为a。如果指定的时间大于等于12,则自然为下午的时间。,例3.3显示日期时间型常量SET MARK TO?2001-03-22,11:30p,1999-01-01,2000-10-1,3显示:03/22/01 11:30:00 PM 01/01/99 12:00:00 AM 10/01/0
11、0 03:00:00 AM注:日期时间型数据用8个字节存储,日期部分的取值范围与日期型数据相同,时间部分的取值范围是:00:00:00AM11:59:59PM,6.逻辑型(Logical),只有两个值:真和假。真的表示形式:.T.t.Y.y.假的表示形式:.F.f.N.n.,注:前后的定界符必不可少。否则会被误认为变量名,逻辑型数据只占用一个字节。,二变量变量是在程序运行过程中其值可以发生改变的量。VF分为字段变量,内存变量和系统变量.注:VF变量命名规则是:1)以字母、数字、下划线组成,中文版VF可以使用汉字做变 量名2)以字母或下划线开始,中文VF可以汉字开始3)长度为1254个字符4)不
12、能使用VF的保留字,字段变量:由于表中的各条记录对同一个字段名可能取值不同,因此,表中的字段名就是变量,称为字段变量。内存变量:内存变量是内存中一个存储区域,变量值就是存放在这个存储区域里的数据,变量的类型取决于变量值的类型。例:当把一个常量赋给一个变量时,这个常量就被存放到该变量对应的存储位置中而成为该变量新的取值。在Visual FoxPro中,变量的类型可以改变,也就是说,可以把不同类型的数据赋给同一个变量。内存变量的数据类型包括字符型(C)、数值型(N)、货币型(Y)、逻辑型(L)、日期型(D)和日期时间型(T)。,1.简单内存变量 每一个变量都有一个名字,可以通过变量名访问变量。如果
13、当前表中存在一个同名的字段变量,则在访问内存变量时,必须在内存变量名前加上前缀.(或-)变量的赋值命令有两种格式:=STORE TO 功能注释:等号一次只能给一个内存变量赋值。STORE命令可以同 时给若干个变量赋予相同的值,各内存变量名之间必须 用逗号分开。在VF中,一个变量在使用之前不需要特别的声明或定 义。当用命令给变量赋值时,如果该变量并不存在,那 么系统会自动建立它。可以通过对内存变量重新赋值来改变其内容和类型。,例3.4内存变量和字段变量的访问,这里用到一个表文件“学生.DBF”,其结构如下:学生(学号C(8),姓名C(6),性别C(2),出生日期D(8))在命令窗口键入命令:US
14、E 学生&USE是打开表的命令 LIST&LIST是显示表中各条记录的命令?姓名,性别,学号&显示内存变量,显示:STORE“赵小辉”TO 姓名&用字符串向内存变量姓名赋值=500&用数值型常量500赋值内存变量XM=姓名&用字段变量赋值内存变量XSTORE 8.88 TO X1,X2&对两个内存变量X1、X2赋予相同 值STORE.T.TO Q&用逻辑常量赋值内存变量?姓名,m.姓名,x1,x2,y,xm显示:刘明赵小辉8.88 8.88 500 刘明,2.数组 数组是内存中连续的一片存储区域,它由一系列元素组成,每个数组元素可通过数组名及相应的下标来访问。每个数组元素相当于一个简单变量,可
15、以给各元素分别赋值。在VF中,一个数组中各元素的数据类型可以不同。Dimension a(2,3,4)a(1,1)a(1,2)a(1,3)a(2,1)a(2,2)a(2,3)与简单内存变量不同的是,数组在使用之前一般要用DIMENSION或DECLARE命令来创建,规定数组的维数,数组名和数组大小。数组大小由下标值的上下限来决定,下限规定为。,创建数组的命令格式为:DIMENSION(,),DECLARE(,),以上两种格式的功能完全相同。数组创建后,系统自动给每个数组元素赋以逻辑假.F.整个数组的数据类型为(Array),而各个数组元素可以分别存放同类型的数据。使用时应注意:dimentio
16、n a(5),y(2,3)y(1,1)y(1,2)y(1,3)y(2,1)y(2,2)y(2,3),在一切使用简单内存变量的地方,均可以使用数组元素。在赋值和输入语句中使用数组名时,表示将同一个值同时赋给该数组的全部数组元素。在同一个运行环境下,数组名不能与简单变量名重复。在赋值语句中的表达式位置不能出现数组名。x=a 可以用一维数组的形式访问二维数组。如:数组y中的各元素用一维数组形式可依次表示为:y(1),y(2),y(3),y(4),y(5),y(6),其中y(4)与y(2,1)是同一变量。,三、内存变量常用命令1.内存变量的赋值 格式1 STORE TO 格式2=2.表达式值的显示格式
17、1:?区别 格式2:?3.内存变量的显示 格式:LIST MEMORYLIKETO PRINTER|TO FILE 格式:DISPLAY MEMORYLIKETO PRINTER|TO FILE,功能:显示内存变量的当前信息,包括变量名,作用域,类型,取值。LIKE只显示与通配符相匹配的内存变量。通配符包括*和?。TO PRINTER或TO FILE用于显示的同时送往打印机,或者存入给定文件名的文本文件中。文件的扩展名为.txt 区别:LIST MEMORY一次显示与通配符匹配的所有内存变量,如果内存变量多,一屏显示不下,则自动向上滚动。DISP MEMORY分屏显示与通配符匹配的所有内存变量
18、,如果内存变量多,显示一屏后暂停,按任意键之后再继续显示下一屏。,4.内存变量的清除清楚格式:CLEAR MEMORY格式:RELEASE格式:RELEASE ALLEXTENDED格式:RELEASE ALLLIKE|EXCEPT功能:格式清除所有内存变量。格式清除指定的内存变量。格式清除所有内存变量。一般情况下作用与格式相同。如果出现在程序中则应该加上短语EXTENDED,否则不能删除公共内存变量。格式选用LIKE短语清除与通配符相匹配的内存变量,选用EXCEPT短语清除与通配符不相匹配的内存变量。,例:RELEASE ALL LIKE A*RELEASE ALL EXCEPT A?例3.
19、5CLEAR MEMORYDIMENSION y(2,2)STORE xxx TO x1,y(1,1)y(3)=2001-03-23x2=$123.23LIST MEMO LIKE y*,显示如下:YPubA(注意显示结果)(1,1)C“xxx”(1,2)L.F.(2,1)D03/23/01(2,2)L.F.RELEASE ALL LIKE y*X=2001-08-22,11:30PLIST MEMO LIKE X*显示如下:XPubT08/22/01 11:30:00PMX1PubC“xxx”X2PubY123.2300,.表中数据与数组数据之间的交换 表文件的数据内容是以记录的方式存储和使
20、用的,而数组是把一批数据组织在一起的数据处理方法,为了使它们之间方便地进行数据交换,以利于程序的使用,Visual FoxPro提供了相互之间数据传递的功能,可以方便地完成表记录与内存变量之间的数据交换。将表的当前记录复制到数组 格式:SCATTERFIELDSMEMO TO BLANK格式:SCATTERFIELDS LIKE|FIELDS EXCEPTMEMO TO BLANK,格式1的功能:)是将表的当前记录从指定字段表中的第一个字段内容开始,依次复制到数组名中的从第一个数组元素开始的内存变量中。若不使用FIELDS短语指定字段,则复制除备注型M和通用型G之外的全部字段。)若事先没有创建
21、数组,系统将自动创建;若已创建的数组元素个数少于字段数,系统自动建立其余数组元素;若已创建的数组元素个数多于字段数,其余数组元素的值保持不变。)若选用MEMO短语,则同时复制备注型字段。若选项用BLANK短语,则产生一个空数组,各数组元素的类型和大小与表中当前记录的对应字段相同。,格式2的功能:是用通配符指定包括或排除的字段。FIELDS LIKE和FIELDS EXCEPT可以同时使用。例3.6打开表文件“职工.dbf”,包括个字段。职工号(C,4),姓名(C,6),性别(C,2)婚否(L),政治面貌(C,4),工作日期(D,8),职称(C,6),基本工资(N,6,2)简历(M).当前记录为
22、第一记录,把它复制到数组中。USE职工&打开职工表 SCATTER TO ZG?ZG(1),ZG(2),ZG(3),ZG(4),ZG(5),ZG(6),ZG(7),ZG(8),显示如下:1001 李小明 男.F.群众 10/12/95 助教 700.00SCATTER TO ZG MEMO&要求包括备注型字段?zg(1),zg(2),zg(3),zg(5),zg(9)显示如下:1001 李小明 男 群众 1994年北京大学计算机系毕业。SCATTER TO BB FIELDS LIKE 职*,将数组数据复制到表的当前记录格式:GATHER FROM FIELDSMEMO格式:GATHER FR
23、OM FIELDS LIKE|FIELDS EXCEPTMEMO格式1的功能:将数组中的数据作为一个记录复制到表的当前记录中。从第一个数组元素开始,依次向字段名表指定的字段填写数据。若缺省FIELDS选项,则依次向各个字段复制,若数组元素个数多于记录中字段的个数,则多余部分被忽略。若选用MEMO短语,则依次向备注型字段复制数据。,例3.7 打开表文件“职工.dbf”,追加一条空记录,将数组RR中的内容复制到空记录中,注意数组中各个数组元素的数据类型必须与字段的数据类型对应一致。DIMENSION RR(1,3)&创建一个二维数组RR(1,1)=1088RR(1,2)=”张友谊”RR(1,3)=
24、”女”USE 职工&打开职工表APPENDBLANK&在表中追加一条空记录GATHER FROM RR?职工号,姓名,性别&显示字段变量,3.2表达式,表达式是由同类型的各种数据(常量、变量和函数)通过特定的运算符按一定的规则连接起来的式子。表达式可分为数值表达式、字符表达式、日期时间表达和逻辑表达式、关系表达式,一、数值、字符与日期时间表达式.数值表达式 数值表达由算术运算符将数值型数据连接起来形成,其运算结 果仍然是数值型数据。数值型数据可以是数值型常量或者变量。算术运算优先级,表3.2算术运算符及其优先级,优先级,运算符,说 明,1,2,3,4,(),*或,*、/、,、,形成表达式内的子
25、表达式,乘方运算,乘、除运算、求余运算,加、减运算,例3.8 计算数学算式和的值。?(1/60-3/56)*18.4500结果为:-0.6809?(1+2(1+2)/(2+2)结果为:2.25,求余运算求余运算%和取余函数MOD()的作用相同。注:余数的正负号与被除数一致,当被除数与除数异号时,结果为余数除数。,例3.9求余运算:%?15%4,15%-4 15%-4商3余3结果为余数除数 结果为:31STORE 122 TO X,YZ=73?X%Z,MOD(X,Z),X%(Y-200)结果为:494934,2.字符表达式字符表达式由字符运算符将字符型数据(字符型常量,变量,函数)连接起来形成,
26、其运算结果仍然是字符型数据。运算符:前后两个字符串首尾连接形成一个新的字符串:连接前后两个字符串,并将前字符串的尾部空格移 到合并后的新字符串尾部。,例3.10字符串运算a=“Hello_ _”b=”everyone!”?a+b,a-b 显示为:Hello_ _everyone!Helloeveryone!_ _ use 职工&打开职工表?姓名“的职称是”职称显示为:李小明的职称是助教,3.日期时间表达式运算符:和注:日期时间表达式的格式有一定限制,不能任意组合.如:不能用运算符将两个连接起来。合法的日期 时间表达式格式如表3.3所示,其中和都是数值表达式。,表3.3日期时间表达式的格式,格式
27、,结果及类型,+,日期型。指定日期若干天后的日期,+,同上,+,+,-,-,日期型指定日期若干天前的日期,数值型。两个指定日期相差的天数,日期时间型。指定日期时间若干秒后的日期时间,同上,日期时间型。指定日期时间若干秒前的日期时间,数值型。两个指定日期相差的秒数,例3.11日期时间运算?2001-03-19+10,2001-03-19-2000-03-19显示:03/29/01 365?2001-03-19 11:10:10 am-2001-03-19 10:10:10 am显示:3600?2001-03-19 10:10:10 am+10显示:03/19/01 10:10:20 am,二、关
28、系表达式1.关系表达式由关系运算符将两个运算对象连接起来形成。运算符两边可以是表达式,但两边类型必须一致,最后落在逻辑假上.即,表3.4 关系运算符,子串包含测试,$,不等于,、#或!=,字符串精确比较,=,等于,=,大于等于,=,大于,小于等于,=,小于,说明,运算符,说明,运算符,注:前后两个运算对象的数据类型要一致。但日期和日期时间型数据可以比较,数值型和货币型数据比较 按数值的大小比较,包括负号。如0-1$150$105.(返回值的类型?)日期或日期时间型数据比较 越早的日期或时间越小,越晚的日期或时间越大。如:2002-01-102001-12-28逻辑型数据比较.T.F.t.子串包
29、含测试$格式:$若前者是后者的一个子字符串,结果为逻辑真(.T.),否则为逻辑假(.F.)。,例3.12关系运算符示例 store“计算机”to s1 store“微型计算机”to s2?s1$s2,s2$s1,(s1$s2)(s2$s1)结果为:.t.f.t.,2.设置字符的排序次序 当比较两个字符串时,系统对两个字符串的字符自左向右逐个进行比较,一旦发现两个对应的字符不同,就根据这两个字符的排序序列决定两个字符串的大小。对字符序列的排序设置有人机对话和命令两种方式。在人机对话方式(菜单)下设置 工具选项数据(选项卡)排序序列 命令方式设置,命令:SET COLLATE TO“”排序次序名有
30、三种:“Machine”(机器)、“PinYin”(拼音)、“Stroke”(笔画)“Machine”(机器):按照机器内码顺序排序,在微机中,西文字符是按照ASCII码值排列的,空格在最前面,大写字母ABCD序列在小写字母abcd序列的前面。因此,大写字母小写字母。对常用的汉字而言,根据它们的拼音顺序决定大小空格0.9AZaz汉字,“PinYin”(拼音):按照机器内码顺序排序,对西文字符而言,空格在最前面,小写字母abcd序列在大写字母ABCD序列的前面。因此,空格小写字母大写字母“Stroke”(笔画):无论中文、西文,均按照书写笔画的多少排序。,例3.13在不同的字符排序设置下比较字符
31、串大小。SET COLLATE TO“machine”?“a”你好”.f.t.f.t.SET COLLATE TO“pinyin”-?“a”你好”.f.f.f.t.SET COLLATE TO“stroke”?“a”你好”.t.f.f.t.,set collate to pinyin?12set collate to machine?1?2set collate to pinyin?2“set collate to pinyin?1a?a“set collate to machine?1a?a?1?1.t.f.f.t.t.f.t.f.f.t.,3.字符串精确比较与EXACT设置 在用运算符“=
32、”比较两个字符串时,只有当两个字符串完全相同(包括空格以及各字符的位置)时,运算结果才会是逻辑真.T.,否则为逻辑假.F.,在用“=”比较两个字符串时,运算结果与set exact on|off设置有关,该命令是设置精确匹配与否的开关.系统默认off状态.当处于off状态时,只要右边的字符串与左边字符串的前面部分内容相匹配,即可得到逻辑真.T.的结果.也就是说,字符串的比较以右面的字符串为目标,右字符串结束即终止比较.当处于on状态时,比较到两个字符串全部结束,先在较短字符串的尾部加上若干个空格,使两个字符串的长度相等,然后再进行比较.set exace设置详见下表示例。,例3.14字符串精确
33、比较与exact设置示例。SET EXACT OFFSTORE“计算机”TO S1STORE“计算机_ _”TO S2STORE“计算机世界”TO S3?S1=S3,S3=S1,S1=S2,S2=S1,S2=S1.f.t.f.t.f.SET EXACT ON?S1=S3,S3=S1,S1=S2,S2=S1,S2=S1.f.f.t.t.f.,三逻辑表达式 由逻辑运算符将逻辑型数据连接起来而形成,其运算结果仍然是逻辑型数据。逻辑运算符:NOT或!(逻辑非)、AND(逻辑与)、OR(逻辑或)逻辑运算符的优先顺序:NOT AND OR逻辑运算规则:,运算符的优先级:算术运算符、字符串运算符和日期时间运
34、算符关系运算符逻辑运算符 高 低,例:不同运算符组成的表达式示例。?122 and 人 民or.t.6 and ABabc.f.,函数:用程序来实现的一种数据运算或转换。每一个函数都有特定的数据运算或转换功能,它往往需要若干个变量,即运算对象,但只能有一个运算结果,称为函数值或返回值,函数可以用函数名加一对圆括号加以调用,自变量放在圆括号里,如LEN(x)分类:数值函数、字符处理函数、日期类函数、数据类型转换函数、测试函数5类。,数值运算函数1.绝对值和符号函数 ABS()返回指定数值表达式的绝对值。例:?abs(-5)结果为:5 SIGN()返回指定数值表达式的符号。例:?sign(-5)结
35、果为:-1数值表达式 正 函数返回值 1?sign(5)结果为:1 负 函数返回值-1?sign(0)结果为:0,2.求平方根函数SQRT()返回指定表达式的平方根。但自变量表达式的值不能为负。例:?sqrt(-5)(错误)3.圆周率函数PI():返回圆周率(数值型)。该函数没有自变量。4.求整数函数INT()返回指定数值表达式的整数部分。CEILING()返回大于或等于指定数值表达式的最小整数。FLOOR()返回小于或等于指定数值表达式的最大整数。,例:STORE5.8 TO X?INT(X),INT(-X),CEILING(X),CEILING(-X),FLOOR(X),FLOOR(-X)
36、5-56-5 5-6,5.四舍五入函数ROUND(,)返回指定表达式在指定位置四舍五入的结果。指明四舍五入的位置。若大于等于0,表示要保留的小数的位数;若小于0,表示的整数部分的舍入位数。,例:x=123.456?ROUND(x,2),ROUND(X,1),ROUND(X,0),ROUND(X,-1)123.46 123.5 123 120,6.求余数函数MOD(,)返回两个数值相除后的余数。是被除数,是除数。注:余数的正负号与除数相同。如果被除数与除数同号,那么函数值即为两数相除的余数。如果被除数与除数异号,则函数值为两数相除的余数再加上除数的值。例:15%-43-4=-1 MOD(15,4
37、),7.求最大值和最小值函数MAX(,))计算各自变量表达式的值,并返回其中的最大值。MIN(,)注:所有表达式的类型必须相同例:?MAX(2,12,05),MIN(汽车,飞机,轮船),字符处理函数1.求字符串长度函数 LEN()返回指定字符表达式值的长度,即所包含字符个数。函数值为数值型。例:x=”Hello!”?LEN(x),2.大小写转换函数 LOWER()将指定表达式值中的大写字母转换成小写字母,其他字符不变。UPPER()将指定表达式值中的小写字母转换成大写字母,其他字符不变。例:?LOWER(X1y2A*),UPPER(n=1)x1y2a*N=1,3.空格字符串生成函数SPACE(
38、)返回由指定数目的空格组的字符串。,4.删除前后空格函数TRIM()返回指定字符表达式值去掉尾部空格后形成的字符串。LTRIM()返回指定字符表达式值去掉前导空格后形成的字符串。ALLTRIM()返回指定字符表达式值去掉前导和尾部空格后形成的字符串。,5.取子串函数LEFT(,)从指定表达式值的左端取一个指定长度的子串作为函数值。RIGHT(,)从指定表达式值的右端取一个指定长度的子串作为函数值。SUBSTR(,)从指定表达式值的指定起始位置取一个指定长度的子串作为函数值。,例:STORE“GOOD BYE!”TO X?LEFT(X,2),SUBSTR(X,6,2)+SUBSTR(X,6),R
39、IGHT(X,3)GO BYBYE!YE!,注:在SUBSTR()函数中,若缺省第三个自变量,则函数从指定位置一直取到最后一个字符,6.计算子串出现次数函数 OCCURS(,)返回第一个字符串在第二个字符串中出现的次数,函数值为数值型。若第一个字符串不是第二个字符串的子串,函数值为0。7.求子串位置函数AT(,)ATC(,)功能:函数值为数值型。如果是的子串,则返回值的首字符在值中的位置;若不是子串,则返回0。ATC与AT功能类似,但在子串比较时字母不区分大小写。,例:STORE“This is Visual FoxPro”TO x?AT(“fox”,x),ATC(“fox”,x),AT(“i
40、s”,X,3),AT(“xo”,x)0 16100,8.子串替换函数STUFF(,)功能:用值替换中由 和指明的一个子串。替换和被替换的字符个数不一定相等。如果值是0,则插在由指定的字符前面。如果值是空串,那么中由和指明的子串被删去。,例:store good bye!to s1store morning to s2?stuff(s1,6,3,s2),stuff(s1,1,4,s2),stuff(s1,6,0,s2)good morning!morning bye!good morningbye!,9.字符匹配函数 LIKE(,)功能:比较两个字符串对应位置上的字符,若所有对应字 符都相匹配,
41、返回逻辑真(.T.),否则返回逻辑假(.F.)。中可以包含通配符*和?。,例:STORE“abc”TO xSTORE“abcd”TO yLIKE(“ab*”,x),LIKE(“ab*”,y),LIKE(x,y),LIKE(“?b?”,x),LIKE(“Abc”,x).T.T.F.T.F.,10.字符替换函数CHRTRAN(,)功能:该函数的自变量是三个字符表达式。当第一个字符串中的一个或多个字符与第二个字符串中的某个字符相匹配时,就用第三个字符串中的对应字符(相同位置)替换这些字符。如果第三个字符串包含的字符个数少于第二个字符串包含的字符个数,因而没有对应字符,那么第一个字符串中相匹配的各字符
42、将被删除。如果第三个字符串包含的字符个数多于第二个字符串包含的字符个数,多余字符被忽略。,例:y1=CHRTRAN(“计算机ABC”,”计算机”,”电脑”)z1=CHRTRAN(“大家好!”,”大家”,”您”)?y1,z1 电脑ABC您好!q1=CHRTRAN(“XYZXAD”,”XAZ”,”Q”)?q1QYQD,日期和时间函数1.系统日期和时间函数DATE()返回当前系统日期,函数值为日期型。TIME()以24小时制、hh:mm:ss格式返回当前系统时间,函数值为字符型。DATETIME()返回当前系统日期时间,函数值为日期时间型。例:?DATE(),TIME(),DATETIME(),2.
43、求年份、月份和天数函数YEAR(|)从指定的日期表达式或日期时间表达式中返回年份。MONTH(|)从指定的日期表达式或日期时间表达式中返回月份。DAY(|)从指定的日期表达式或日期时间表达式中返回月里面的天数。例:STORE 2001-08-05 TO d?YEAR(d),MONTH(d),DAY(d),3.时、分和秒函数HOUR()从指定的日期表达式中返回小时部分(24小时制)。MINUTE()从指定的日期表达式中返回分钟部分。SEC()从指定的日期表达式中返回秒数部分。例:STORE 2001-03-18 02:30:50 P TO T?HOUR(T),MINUTE(T),SEC(T)14
44、 30 50,求星期名函数:Dow()返回N型Cdow()返回C型,英文名称?cdow(1999/03/21 2:30:40 a),cdow(date(),数据类型转换函数1.数值转换成字符串STR(,)功能:将的值转换成字符串,转换时根据需要自动进行四舍五入。返回字符串的理想长度L应该是值的整数部分位数加上值,再加上1位小数点。如果值大于等于值的整数部分位数(包括负号)但又小于L,则优先满足整数部分而自动调整小数位数;如果值小于值的整数部分位数,则返回一串星号(*)。的默认值为0,的默认值为10。,例:STORE-123.456 TO N?“N=”+STR(N,8,3)结果是:N=-123.
45、456?STR(N,9,2),STR(N,6,2),STR(N,3),STR(N,6),STR(N)结果为:-123.46-123.5*-123-123,2.字符串转换成数值VAL()功能:将由数字符号(包括正负号、小数点)组成的字符型数据转换成相应的数值型数据。若字符串内出现非数字字符,那么只转换前面部分;若字符串的首字符不是数字符号,则返回数值零,但忽略前导空格。,例:STORE“-123”TO X STORE“45”TO Y STORE“A45”TO Z?VAL(X+Y),VAL(X+Z),VAL(Z+Y)-12345.00-123.00 0.00,3.数值转换成ASCII码字符函数 C
46、HR()?CHR(65),CHR(65+32)A a4.字符转换成ASCII码函数 ASC()?ASC(“A”),ASC(“a”),asc(“abc”)65,97,97,3.字符串转换成日期或日期时间CTOD()将值转换成日期型数据。CTOT()将值转换成日期时间型数据。例:SETDATETOYMDSETCENTURYONSETCENTURYTO 19 ROLLVER 51D1=CTOD(2001/03/18)T1=CTOT(2001/03/18+TIME()?D1,T1,CTOD(50/01/01),CTOD(51/01/01)2001/03/182001/03/18 10:31:54 PM
47、2050/01/011951/01/01,注:这里SET CENTURY TO语句指定:小于等于50的两位数年份属于21世纪(191),而大于50的两位年份属于20世纪(19)。,4.日期或日期时间转换成字符串DTOC(,1)将日期型数据或日期时间数据的日期部分转换成字符串。TTOC(,1)将日期时间数据转换成字符串。注:字符串中日期部分的格式与SET DATE TO语句的设置和SET CENTURY ON|OFF语句的设置有关。时间部分的格式受SET HOURS TO 12|24语句的设置影响。对DTOC()来说,如果使用选项1,则字符串的格式总是为YYYYMMDD,共8个字符。对TTOC(
48、)来说,如果使用选项1,则字符串的格式总是为YYYYMMDDHHMMSS,采用24小时制,共14个字符。,例:STORE DATETIME()TO T?T?DTOC(T),DTOC(T,1),TTOC(T),TTOC(T,1),5.宏替换函数&.功能:替换出字符型变量的内容,即的值是变量中的字符串。如果该函数与其后的字符无明确分界,则要用“.”作函数结束标识。宏替换可以嵌套使用。,例:STORE“职工”TO DB USE&DB XM=“姓名”?&XM-“你好!”李小明你好!SKIP?XM,&XM 姓名李新,测试函数:1.值域测试函数BETWEEN(,)功能:判断一个表达式的值是否介于另外两个表
49、达式的值之间。当值大于等于且小于等于时,函数值为逻辑真(.T.),否则函数值为逻辑假(.F.)。如果或有一个是NULL值,那么函数值也是NULL值。注:三个自变量的数据类型要一致。,例:STORE.NULL.TO X STORE 100 TO Y?BETWEEN(150,Y,Y+100),BETWEEN(90,X,Y).T.NULL.,2.空值(NULL值)测试函数ISNULL()功能:判断一个表达式的运算结果是否为NULL值,若是NULL值返回逻辑真(.T.),否则返回逻辑假(.F.)。例:STORE NULL TO X?X,ISNULL(X)NULL.T.,3.空值测试函数EMPTY()功
50、能:根据指定表达式的运算结果是否为“空”值,返回逻辑真(.T.)或逻辑假(.F.)。注:这里所指的“空”值与NULL值是两个不同的概念。函数EMPTY(.NULL.)的返回值为逻辑假(.F.)。其次,该函数自变量表达式的类型除了可以是数值型之外,还可以是字符型、逻辑型、日期型等类型。不同类型数据的“空”值,有不同的规定,如下表所示:,空(无内容),备注字段,0,整型,.F.,逻辑型,0,浮点型,空(如CTOT),日期时间,0,货币型,空(如CTOD(),日期型,空串、空格、制表符、回车、换行,字符型,0,双精度型,0,数值型,“空”值,数据类型,“空”值,数据类型,4.数据类型测试函数 VAR