VisalFoxPro语言基础.ppt
第2章 Visual FoxPro基础,2.1 Visual FoxPro的数据2.2 常量与变量2.3 运算符与表达式2.4 Visual FoxPro的函数,2.1Visual FoxPro的数据,字符型,字符型(Character)数据是不能进行算术运算的文字数据类型,用字母C表示。字符型数据包括中文字符、英文字符、数字字符和其他ASCII字符,其长度(即字符个数)范围是0254个字符。注意:字符型数据也有可能由数字组成 在数据处理中,经常用到字符型数据,比如姓名、学号、电话号码等。,数值型,数值型(Numeric)数据是表示数量并可以进行算术运算的数据类型,用字母N表示。数值型数据由数字、小数点和正负号组成。注意:判断一个数据是否为数值型,关键在于他能否参与数值运算。例:十六进制的5A 电话号码:,货币型,货币型(Currency)数据是为存储货币值而使用的一种数据类型,它默认保留4位小数,占据8字节存储空间。货币型数据用字母Y表示。,日期型,日期型(Date)数据是表示日期的数据,用字母D表示。日期的默认格式是mm/dd/yy,其中mm表示月份,dd表示日期,yy表示年度,年度也可以是4位。日期型数据的长度固定为8位。日期型数据的显示格式有多种,它受系统日期格式设置的影响。如:05/23/92表示92年5月23日此日期也可以写成1992/05/23,日期时间型,日期时间型(Date Time)数据是表示日期和时间的数据,用字母T表示。日期时间的默认格式是mm/dd/yy hhmmss,08/16/03 103530表示2003年8月16日10时35分30秒这一日期和时间。,逻辑型,逻辑型(Logic)数据是描述客观事物真假的数据类型,表示逻辑判断的结果,用字母L表示。逻辑型数据只有“真”和“假”两种结果,长度固定为1位。,备注型,备注型(Memo)数据是用来存放较多字符的数据类型。可以把它看成是字符型数据的特殊形式,用字母M表示。,通用型,通用型用字母G表示。通用型数据中的对象可以是电子表格、文档、图形、声音等。它只用于表中字段类型的定义。通用型数据字段长度固定为4位,二进制字符型和二进制备注型,这两类数据是以二进制格式存储的数据类型,只能用在表中字段数据的定义中。所存储的数据不受代码页改变的影响。,刚介绍的都是Visual FoxPro的数据类型,类型是同种形式的数据的归类,我们使用到的还是实际的数据,接下来我们一起学习数据的具体表现形式。,2.2 常量与变量,常量是以直观的数据形态和意义直接出现在程序中的数据。因此,在程序中,常量一旦定义,其值就不再改变。,字符型常量,字符型常量是用定界符括起来的一串字符。在Visual FoxPro中,定界符有3种:单撇号、双撇号和方括号。如Central South University,410075,教授等都是字符型常量。如果某一种定界符本身是字符型常量中的字符,就应选择另一种定界符。例如,Thats right!表示字符常量:Thats right!,含有13个字符。,数值型常量,数值型常量就是平时所讲的常数,由数字、小数点和正负号组成,货币型常量,货币型常量的书写格式与数值型常量类似,但要加上一个前置的$。如:$3.1416,$-3.1416,日期型常量,日期型常量要放在一对花括号中,花括号内包括年、月、日3部分内容,各部分内容之间用分隔符分隔。分隔符可以是/,-,.等。Visual FoxPro的默认日期格式是mm/dd/yyyy。如:03/26/06,此日期也可以写成:2006/03/26),日期时间型常量,日期时间型常量也要放在一对花括号中,其中既含日期又含时间。日期的格式与日期型常量相同,时间包括时、分、秒,它们之间用“:”分隔。日期时间型常量的默认格式是:mm/dd/yyyy,hh:mm:ssap 其中hh,mm,ss的默认值分别为12,0和0。a和p分别表示AM(上午)和PM(下午),默认为AM。,03/26/06,表示06年3月26日上午12点,日期格式设置,日期格式中的世纪值设置:SET CENTURY ON|OFF|TO n Century 其中,ON表示日期值输出时显示10位,年份占4位。TO n Century指定日期数据所对应的世纪值,n 是一个199的整数。设置日期显示格式:SET DATE TO AMERICAN|ANSI|BRITISH|FRENCH|GERMAN|ITALIAN|JAPAN|USA|MDY|DMY|YMD 设置日期分隔符:SET MARK TO 日期分隔符(/、-、.等)严格的日期格式:yyyy-mm-dd,hh:mm:ssa|p日期格式检测设置:SET STRICTDATE TO 0|1|2 其中,0不进行严格的日期格式检测。1进行严格的日期格式检测(默认值)。2进行严格的日期格式检测,且对CTOD和CTOT函数格式也有效。,逻辑型常量,逻辑型常量表示逻辑判断的结果,只有“真”和“假”两种值.逻辑真用.T.,.t.,.Y.或.y.表示 逻辑假用.F.,.f.,.N.或.n.表示 注意:字母前后的圆点一定不能少,变量的命名规则,使用字母、汉字、下划线和数字命名。命名以字母或下划线开头。除自由表中字段名、索引的TAG标识名最多只能10个字符外,其他的命名可使用1128个字符。为避免误解和混淆,不应使用Visual FoxPro的保留字。,字段变量,字段变量就是指数据表中已定义的任意一个字段。字段变量的数据类型有数值型、浮点型、货币型、整型、双精度型、字符型、逻辑型、日期型、日期时间型、备注型和通用型等。,指向不同的记录,每个字段的取值就不一样,所以称之为字段变量,内存变量,内存变量是一般意义下的简单变量。每一个内存变量都必须有一个固定的名称,以标识该内存单元的存储位置。用户可以通过变量标识符使用内存单元存取数据。内存变量的类型有数值型、浮点型、字符型、逻辑型、日期型和日期时间型6种,它的定义是通过赋值语句来进行的。,内存变量的赋值,内存变量的赋值:内存变量=表达式 STORE 表达式 TO 内存变量表该命令先计算表达式的值,然后将表达式的值赋给指定的内存变量。第一种格式只能给一个内存变量赋值。第二种格式可以同时给多个内存变量赋相同的值,各内存变量名之间用逗号分隔。,内存变量的显示,内存变量的显示:DISPLAY MEMORYLIKE通配符 TO PRINTERTO FILE 文件名LIST MEMORY LIKE 通配符 TO PRINTERTO FILE 文件名 其中,LIKE选项表示显示与通配符相匹配的内存变量,在中允许使用符号?和*,分别代表单个字符和多个字符。,内存变量使用示例,STORE 中南大学 TO xx,dx d=20050716 LIST MEMORY LIKE d?此时在Visual FoxPro主窗口中显示以下信息:Dx Pub C 中南大学D Pub D 07/16/05,内存变量文件的建立,SAVE TO内存变量文件名ALL LIKEEXCEPT 通配符 其中,ALL表示将全部内存变量存入文件中。ALL LIKE 通配符表示内存变量中所有与通配符相匹配的内存变量都存入文件。ALL EXCEPT 通配符表示把与通配符不匹配的全部内存变量存入文件中。,内存变量的恢复与清除,内存变量的恢复是指将已存入内存变量文件中的内存变量从文件中读出,装入内存中。RESTORE FROM内存变量文件名ADDITIVE,清除内存变量所采用命令的格式为:CLEAR MEMORYRELEASE内存变量表ALLLIKEEXCEPT通配符其中第一条命令用于清除所有的内存变量,第二条命令用于清除指定的内存变量。,数组变量,在Visual FoxPro中,数组变量被定义为一组变量的集合,这些变量可以具有不同的数据类型。数组由数组元素组成,每个数组元素就相当于一个内存变量,它可以用数组名后接顺序号来表示,顺序号也叫下标。,数组的定义,DIMENSION 数组名(下标上界1,下标上界2),DECLARE数组名(下标上界1,下标上界2),两条命令的功能完全相同,用于定义一维或二维数组。下标上界是一个数值量,下标的下界由系统统一规定为1。例如:DIMENSION a(10),b(2,3)分别定义了一维数组a和二维数组b。一维数组a有10个元素,分别为a(1),a(2),a(10),二维数组b有6个元素,分别为b(1,1),b(1,2),b(1,3),b(2,1),b(2,2),b(2,3)。,给数组元素赋值,数组在使用之前必须定义,只有定义好的数组才能用来赋值和使用.在没有向数组元素赋值之前,数组元素的初值均为逻辑假值。赋值的方式有两种:数组名=表达式数组名(下标)=表达式Store 表达式 to 数组名/数组名(下标),数组的赋值以及使用示例,CLEAR MEMORYDIMENSION x(2,3)STORE Goodbye TO x(1,2)STORE 99 TO x(2,3)STORE.T.TO x(1,1)STORE 数组的赋值 TO x(2,1)LIST MEMORY LIKE x?,命令执行结果将会是什么?,清除所有自定义内存变量,定义一个两行三列二维数组,给第1行第2个变量赋值,给第2行第3个变量赋值,给第1行第1个变量赋值,赋值,显示所有以X开头的内存变量,系统变量,系统变量是由Visual FoxPro自身提供的内存变量。系统变量名都是以下划线开始,它与一般变量有相同的使用方法。系统变量设置和保存了很多系统的状态信息。,2.3 运算符与表达式,将常量、变量和函数用运算符连接起来的式子称为表达式。根据运算对象的数据类型不同,表达式可以分为算术表达式、字符表达式、日期和时间表达式、关系表达式以及逻辑表达式等。,算术表达式,用算术运算符将数值型数据连接起来的式子叫算术表达式。算术运算符有(按优先级从高到低的顺序排列):()(括号),*或(乘方),*(乘),/(除),%(求余数),+(加),-(减)。书写Visual FoxPro算术表达式要根据运算符运算的优先顺序,合理地添加括号,以保证运算顺序的正确性。特别是分式中的分子、分母中有加减运算时,或分母中有乘法运算,要加括号表示分子、分母的起始范围。,字符表达式,连接运算 连接运算符有完全连接运算符“+”和不完全连接运算符“”两种。“+”运算的功能是将两个字符串连接起来形成一个新的字符串。“”运算的功能是去掉第一个字符串尾部的空格,然后将两个字符串连接起来,并把第一个字符串末尾的空格放到结果字符串的末尾。?姓名-李小四+张得富,字符表达式,包含运算 包含运算的结果是逻辑值。一般格式为:字符串1$字符串2若字符串1包含在字符串2之中,其表达式值为.T.,否则为.F.。例如:zhch=副教授?教授$zhch 输出为.T.。,日期和时间表达式,日期和时间表达式是指含有日期型或日期时间型数据的表达式。其运算符只有“+”和“-”两种。日期型数据+天数天数+日期型数据 日期型数据-天数 日期型数据1-日期型数据2 日期时间型数据+秒数秒数+日期时间型数据 日期时间型数据-秒数 日期时间型数据1-日期时间型数据2,关系表达式,关系表达式是由关系运算符将两个同类型的数据连接起来的式子。关系表达式表示两个量之间的比较,其值是逻辑型数据。关系运算符有:(大于)、=(大于等于)、=(等于)、=(精确等于)、或#或!=(不等于)。关系表达式表示一个条件,条件成立时值为.T.,否则为.F.,关系表达式,各种类型数据的比较规则如下。(1)数值型和货币型数据根据其代数值的大小进行比较。(2)日期型和日期时间型数据进行比较时,离现在日期或时间越近的日期或时间越大。(3)逻辑型数据比较时,.T.比.F.大。(4)对于字符型数据,Visual FoxPro可以设置字符的排序次序。比较字符串时,先取两字符串的第一个字符比较,若两者不等,则各取第二个字符比较,依次类推,直到最后。,关系表达式,“=”和“=”两个关系运算符的区别“=”为精确比较,“=”示为非精确比较 精确等于是指只有在两字符串完全相同时才为真,而非精确等于是指当“=”号右边的串与“=”号左边的串的前几个字符相同时,运算结果即为真。SET EXACT OFFzc=教授?zc=教授,教授=zc,教授=LEFT(zc,4),zc=教授,逻辑表达式,逻辑表达式是由逻辑运算符将逻辑型数据连接起来的式子。其值仍是逻辑值。逻辑运算符有:.NOT.或!(逻辑非)、.AND.(逻辑与)、.OR.(逻辑或)。运算优先级是非最高,或最低。L1 AND L2:只有L1和L2同时为真,表达式值才为真,只要其中一个为假,则结果为假。L1 OR L2:L1和L2中只要有一个为真,表达式即为真,只有L1和L2均为假时,表达式才为假。NOT L1:当L1为真(假)时,表达式结果为假(真),2.4 Visual FoxPro的函数,为了增强系统的功能和方便用户使用,Visual FoxPro提供了许多内部函数,每个函数实现某项功能或完成某种运算。函数调用的一般形式为:函数名(参数表)其中参数表用方括号括起来表示有些函数不需要参数。,数值函数,求绝对值函数:ABS(数值型表达式)命令:?ABS(-110)在屏幕上显示110求平方根函数:SQRT(数值型表达式)SQRT(225)结果为15取整函数:INT(数值型表达式)CEILING(数值型表达式)FLOOR(数值型表达式)INT函数取数值型表达式的整数部分。CEILING函数取大于或等于指定表达式的最小整数。FLOOR函数取小于或等于指定表达式的最大整数。,数值函数,取整函数示例:INT(53.6):53CEILING(53.6):54FLOOR(53.6):53INT(-53.6):-53CEILING(-53.6):-53FLOOR(-53.6):-54,数值函数,求余数函数:MOD(数值型表达式1,数值型表达式2)求数值型表达式1除以数值型表达式2所得出的余数,所得余数的符号和表达式2相同。?MOD(25,7),MOD(25,-7),MOD(-25,7),MOD(-25,-7)输出的函数值依次为4,-3,3,-4。,数值函数,四舍五入函数:ROUND(,)对数值型表达式1求值并保留n位小数,从n+1位小数起进行四舍五入。n的值由数值型表达式2确定。若n小于0,则对数值型表达式1的整数部分按n的绝对值进行四舍五入。例如:?ROUND(3.1415*3,2),ROUND(156.78,-1)输出的函数值分别为9.42和160。,数值函数,求最大值和最小值函数 MAX(,)MIN(,)函数 PI()返回圆周率的近似值 例如:在命令窗口输入“?PI()”则屏幕上显示3.1415926,字符函数,宏代换函数&字符型内存变量.字符表达式 例如:m=245*SQRT(4)?34+&m输出为524.00。,字符函数,求字符串长度函数 LEN(字符型表达式)注意:函数括号中一定要是字符型数据.?LEN(“china”),LEN(“中国你好”)输出结果:5 8求子串位置函数 AT(字符型表达式1,字符型表达式2)ATC(字符型表达式1,字符型表达式2)两个函数的区别在于:ATC函数在子串比较时不区分字母的大小写。,Visual FoxPro,49,【例2.17】xm=李小龙?AT(李,xm)?AT(PRO,Visual FoxPro)?ATC(y,you are sorry,2)输出的函数值分别为1,0,13。设xm代表职工的姓名,显然若AT(李,xm)的值为1,则说明该职工姓“李”。应注意,在字符型常量或变量中,同一字母的大小写为不同的字符。,字符函数,取子串函数 LEFT(字符型表达式,数值型表达式)RIGHT(字符型表达式,数值型表达式SUBSTR(,)删除字符串前后空格函数 LTRIM(字符型表达式)RTRIM(字符型表达式)ALLTRIM(字符型表达式),字符函数,生成空格函数:SPACE(数值型表达式)字符串替换函数:STUFF(字符型表达式1,数值型表达式1,数值表达式2,字符型表达式2)STUFF(Goodboy,5,3,girl)输出结果应为多少?产生重复字符函数 REPLICATE(,)重复给定字符串若干次,次数由数值型表达式给定,字符函数,大小写字母转换函数 LOWER(字符型表达式)大写字母转换成小写 UPPER(字符型表达式)小写字母转换成大写,日期和时间函数,系统日期和时间函数 DATE()TIME()DATETIME()求年份、月份和天数函数 YEAR(日期型表达式日期时间型表达式)MONTH(日期型表达式日期时间型表达式)DAY(日期型表达式日期时间型表达式),日期和时间函数,求时、分和秒函数 HOUR(日期时间型表达式)MINUTE(日期时间型表达式)SEC(日期时间型表达式),数据类型转换函数,将字符转换成ASCII码的函数 ASC(字符型表达式)将ASCII值转换成相应字符函数 CHR(数值型表达式)将字符串转换成日期或日期时间函数 CTOD(字符型表达式)CTOT(字符型表达式),数据类型转换函数,将日期或日期时间转换成字符串函数 DTOC(日期表达式日期时间表达式,1)TTOC(日期时间表达式,1)将数值转换成字符串函数 STR(,)将字符串转换成数值函数 VAL(字符型表达式),测试函数,数据类型测试函数 VARTYPE(表达式,逻辑表达式)表头测试函数 BOF(工作区号 别名)表尾测试函数 EOF(工作区号别名)记录号测试函数 RECNO(工作区号别名),测试函数,记录个数测试函数 RECCOUNT(工作区号别名)查找是否成功测试函数 FOUND(工作区号别名)文件是否存在测试函数 FILE(文件名)判断值介于两个值之间的函数 BETWEEN(被测试表达式,下限表达式,上限表达式),测试函数,条件函数IIF IIF(逻辑型表达式,表达式1,表达式2)若逻辑型表达式的值为.T.,函数值为表达式1的值,否则为表达式2的值。例如:xb=女?IIF(xb=男,1,IIF(xb=女,2,3)显示结果应为多少?,