VFP程序设计第三章.ppt
第三章VFP6.0的数据基础主要内容,数据类型常量变量运算符与表达式常用函数,返 回,下 页,3.1 数据类型,VFP中主要有下列类型数据 1.字符型(Character),简称C型 由英文字母、数字等ASC和汉字组成,最大长度为254个字符。使用时必须给定界符。2.数值型(Numeric),简称N型 3.逻辑型(Logic),简称L型 逻辑真.t.T.或.y.Y.逻辑假.f.F.或.n.N.注意:其宽度系统固定为一个字符。,返 回,下 页,4.日期型与日期时间型(Date,Date Time),简称D与T型格式:美式mm/dd/yy(默认)欧式dd/mm/yy 中国式yy/mm/dd改变格式的命令:set date to ymd/mdy/dmy注意:其中的“/”也可以用“-”代替,日期型的宽度系统固定为8个字符。,返 回,下 页,5.备注型(Memory),简称M型 它是用来存放记录中较大的文本,以弥补C型数据不能超过254个字符的缺陷。其在数据库结构中宽度固定为4个字节,用于存放指向具体数据的指针。(具体数据在.FPT文件中)6.通用型(General),简称G型 是指在数据表中引如的OLE(对象链接与嵌入)对象其在数据库结构中宽度固定为4个字节,用于存放指向具体数据的指针。(具体数据在.FPT文件中),返 回,下 页,3.2 常量,常量在程序执行过程中其值保持不变的数据称为常量1.字符型常量用“”或 或括起来的一串字符。“This is a computer”、88.88、数据库系统2.数值型常量3.逻辑型常量两边有小圆点“真”:.t.T.y.Y.“假”:.f.F.n.N.,返 回,下 页,4.日期型常量用CTOD()或来表示例:“1998年10月15日”可表示为:ctod(“03/10/06”)或2006/03/10 不能写成 06/03/10或06-03-10,返 回,下 页,3.3 变量,变量在程序执行过程中其值随时可以发生变化的数据称为变量变量的三种基本属性:名称、类型、值变量名的构成原则:由字母、数字、下划线组成,但必须以字母、汉字开头长度不超过10个字符不与FoxPro的保留名(命令、函数名等)相同,返 回,下 页,一、字段变量(N、C、D、L、M、G型)实际上是指二维表的列,即数据表的字段二、内存变量(N、C、D、L和S(屏幕)型)独立于数据库和表之外的变量,用于存放临时数据和中间结果。1内存变量的命名规则 2内存变量的赋值格式1:store to 格式2:=,返 回,下 页,例:store 25 to A1,A2,A3 例:A1,A2,A3=25 错误!应为 A1=25 A2=25 A3=25 3内存变量值的显示:格式1:DISPPLAY/LIST MEMORY LIKE通配符 TO PRINTER/TO FILE文件名,返 回,下 页,格式2:?|?注意:、若“姓名”是字段变量名,用姓名=“张三”不能把它放到数据库中,而需要修改记录则用Replace命令。、当一个内存变量名与当前打开的数据库中的字段变量名同名时,要选用内存变量,可在内存变量名前加前缀m.或m。,返 回,下 页,4内存变量的保存与恢复格式:save to all like/except 例:store“12345”to ab,ac,bc store 12345 to ad,bd,be e=“right”display memory save to f1&ab,ac,ad,bc,bd,be,e 存入文件f1 save all like a?To file2&ab,ac,ad 存入文件file2 save all except a*to f3&bc,bd,be,e 存入文件f3,返 回,下 页,内存变量的恢复格式:restore from 内存变量文件名.additive注意:无additive,先清除内存中已有的内存变量,再恢复 有additive,不清除内存中现有的内存变量,把文件中的变量追加到内存中,当文件中有与内存中同名变量时,用文件中的变量值替换已在内存的同名内存变量的值。,返 回,下 页,例:clear memo A=“file”B=12.345 AA=1998/03/19 save to f4 Disp memo restore from file2 disp memo&内存中原有变量a,aa,b已删除 restore from f3 disp memo&文件file2中变量ab,ac,ad已删除 restore from f4 additive disp memo&文件f3中变量bc,bd,be仍在内存中,返 回,下 页,5内存变量的删除格式:clear memory格式:release 内存变量名格式:release all like/except 通配符 注意:clear memory=release all 删除用户定义的所有内存 变量。Clear all 删除用户定义的所有内存变量,关闭打开的数据库及其附属文件(索引文件、格式文件等),返 回,下 页,三、数组变量具有相同变量名而下标不同且按一定顺序排列的一组数或变量称为数组。每个数组有一个作为标识的名字称为数组名,数组中元素的顺序号称为下标。数组名及其不同的下标值表示了不同的数组元素。由于数组中的元素是由下标来进行区别的,所以数组元素也称为下标变量,下标放在数组名后面的括号内。数组被使用前要对数组进行定义。一维数组A:a(1),a(2),a(3),.,a(n)二维数组B:,返 回,下 页,1数组的定义格式:DIMENSION(下标1,下标2),(下标1,下标2)功能:定义一个或多个数组中下标变量的个数。说明:语句中的下标是指所定义数组中下标的上限值,下标可以是常量、变量或表达式,但必须大于0,如果是非整数,则系统自动取整。,返 回,下 页,例如:dimension ast(5),bst(2,5)数组ast排列顺序为:ast(1),ast(2),ast(3),ast(4),ast(5)数组bst排列顺序为:bst(1,1),bst(1,2),bst(1,3),bst(1,4),bst(1,5)bst(2,1),bst(2,2),bst(2,3),bst(2,4),bst(2,5),返 回,下 页,2数组的赋值格式1:S TORE TO|格式2:|=功能:将表达式的值赋给数组或数组元素。说明:格式1可以将表达式的值同时赋给多个数组或数组元素,而格式2只能赋给一个数组或数组元素。若语句中使用数组名,则表示将表达式的值赋给数组中的每一个下标变量。注意:若定义的数组尚未赋值时,系统将给每个数组元素赋以初值.F.,返 回,下 页,四、系统变量 以下划线开头,它是全局变量(Public)由Foxpro系统定义,通常由Foxpro系统使用,返 回,下 页,3.3 运算符与表达式,表达式是指用运算符将常量、变量和函数连接起来的有意义的式子运算符和表达式FOXPRO共有5类运算符,相应有5类表达式1算术运算符和表达式()、+和-、*和/(乘除)、*或(乘方)、%,返 回,下 页,2字符串运算符和表达式只有两个:+和-str1+str2:将字符串str1的尾部与字符串str2的首部连接起来构成一个新的字符串。Str1-str2:将两个字符串首尾相连构成新的字符串时,str1尾部的空格移到新字符串的尾部。,返 回,下 页,例:在命令窗口下输入str1=“abcd“str2=“12345“s1=str1+str2s2=str1-str2disp memo请观察内存变量s1与s2的差别。,返 回,下 页,3关系运算符和表达式=、和$(字符串包含)关系表达式的值是一个逻辑型数据:.T.或.F.若为数值型数据则按数值的大小进行比较 例:?1312 显示.T.?1312 显示.F.若为字符型数据则将每个字符转换为其ASCII码值后再进行比较,返 回,下 页,例:?“user”ARTIFICIAL INTELLIGENCE 显示输出.T.注意:在命令set exact off下有例:?“ABC”=”AB”显示输出.T.右边字符串是左边字符串从左开始的一部分,则为.T.?“AB”=”ABC”显示输出.F.,返 回,下 页,在命令set exact on下均显示输出.F.“=”是精确比较,不管是set exact on 还是set exact off状态,两个字符串必须一模一样才为.T.str1$str2:字符串str1包含在字符串str2中,为.T.,否则为.F.?“com”$”telecommunition”显示输出.T.?“Pentium586”$”pentium586”显示输出.F.若为日期型数据则按日期先后次序比较,后者为大 例:?1990-08-12 1998-08-12 显示输出.F.若为汉字则按其机内码的大小进行比较,返 回,下 页,4日期运算符和表达式只有两个:+和-例:在set date to ymd下?ctod(“99/02/12”)+20 显示:99/03/04?ctod(“99/05/05”)-ctod(“99/04/20”)显示:15,返 回,下 页,运算符优先级高 括号()算术运算符*或*、/+、-字符运算符+、-关系运算符$其它关系运算符低 逻辑运算符.not.and.or.,返 回,下 页,5逻辑运算符和表达式.NOT.AND.OR.?.not.(510).and.”Electractic-Mail”“electractic-mail”显示输出.F.,返 回,下 页,3.3 常用函数,一、数值函数 1取绝对值函数 ABS(数值表达式)2取整函数 INT(数值表达式)3求平方根函数 SQRT(数值表达式)4求最大值函数 MAX(表达式1,表达式n)5求最小值函数 MIN(表达式1,表达式n)6求余数函数 MOD(表达式1,表达式2)例:?MOD(10,-3)显示:-2注意:余数的符号与除数的符号相同;余数的绝对值比除数的绝对值小。7四舍五入函数 ROUND(表达式1,表达式2)例:?ROUND(3.141519,3)显示:3.142?ROUND(15/7,4)显示:2.1429,返 回,下 页,二、字符函数 1宏替换函数&字符型内存变量 例:ab=12345 x=“ab”?&x 2求字符串的长度 LEN(字符串)例:x=“computer”?LEN(x)显示:8 3求一个字符串在另一个字符串中的起始位置 AT(字符串1,字符串2)例:?AT(“bc”,”abcd”)显示:2?AT(“bc”,”acbd”)显示:0,返 回,下 页,4产生空格 SPACE(N)5取子字符串 SUBSTR(字符串,起始位,子串长)Note:“子串长”参数可以省略,表示取到尾部;若“起始位”大于“字符串”的长度,则出错。例:c=substr(“computer”,4,3)?c 显示:put?Substr(“中华人民共和国”,5,4)显示:人民 6取左/右子串 LEFT/RIGHT(字符串,子串长)例:?left(“computer”,4)显示:comp,返 回,下 页,三、转换函数 1大小写转换 UPPER/LOWER(字符串)例:?upper(“FoxPro”)显示:FOXPRO?Lower(“FoxPro”)显示:foxpro 2ASCII码符 CHR(数值表达式)ASC(字符串)Chr(70),chr(102)显示:F f 3数值转字符函数 STR(数值式,长度,小数位)例:x=str(45.67,6,3)y=str(3.1415926535,8,4)?X,y 显示:45.670 3.1416 disp memo可见:x=“45.670”,y=“3.1416”?,返 回,下 页,4字符转换数值 VAL(字符串)Note:对字符串的要求:是可识别的0,1,2,9+和-只能放在最前面表示正负号e可以放在数字中间,表示幂次例:?val(“-3a2”)显示:-3.00?val(“3+2”)显示:3.00?val(“a3”)显示:0.00,返 回,下 页,5字符转日期 CTOD(日期格式的字符串)set date to ymd cc=“98/10/28”cd=Ctod(“98/10/28”)?Cc,cd 显示:98/10/28 98/10/28 disp memo 可见cc为字符型,cd为日期型6日期转字符 DTOC(日期表达式)日期表达式有两种:yyyy/mm/dd CTOD(“yy/mm/dd”)ccd=1998/09/18 ccc=dtoc(ccd)disp memo,返 回,下 页,四、日期时间类 1TIME()C型 2DATE()D型 3YEAR(日期型表达式)返回年份,是N型 例:?year(date()+2 4MONTH(日期型表达式)5DAY(日期型表达式)6DOW(日期型表达式)返回星期,是N型 例:?dow(date()日 一 二 三 四 五 六 1 2 3 4 5 6 7,返 回,下 页,五、测试函数 1测试记录号 RENCO(工作区编号)例:go 4 skip 1?recno()2测试文件开始 BOF(工作区编号)Note:若当前记录为第一条,则SKIP 1时为真。3测试文件末尾 EOF(工作区编号)Note:若当前记录为最后一条,则SKIP 时为真。4查询测试 FOUND(工作区编号)Note:用SEEK,FIND,LOCATE函数可以查找记录,找到与否用此函数测试。,返 回,下 页,5测试文件的存在 FILE(文件名)例:(program.prg)accept“输入文件名”to fm if file(fm)use&fm list else?”文件未找到”Endif 6测试数据表文件存在 DBF(工作区号和别名)7测试记录个数 RECCOUNT(工作区号和别名),返 回,下 页,8测试工作区号 SELECT(0/别名)9数据类型 TYPE(“表达式”)例:?type(“date()”)显示:D?type(date()出错 10编程控制函数 INKEY(数值表达式)功能:返回一个整数值,是用户击键所对应的ASCII码。此函数规定运行至此等待。Note:击键时间是以秒记,若超时未击键,则返回0值。若数值表达式为0,表示无限等待直到击键为止。若数值表达式省略,则不等待。,返 回,下 页,11选择函数 IIF(,)例:x=3?iif(x=0,sqrt(x),”不能开方”)相当于下面这段程序:If x=0?sqrt(x)else?”不能开方”endif,