基础及数据运算.ppt
2023/10/11,1,第四章数据运算,2023/10/11,2,第一节 数据及其运算,在Visual FoxPro系统中,数据可用常量、变量、数组表示,数据还可以用字段、记录和对象,由它们存储、使用各种类型的数据。,2023/10/11,3,一、Visual FoxPro的数据类型1字符型(character)用字母C表示,字符型数据包括中文字符、英文字符、数字字符和其他ASCII字符,其长度最长不超过254个字符。2数值型(Numeric)用字母N表示,用来表示数量并可以进行算术运算的数据类型。由阿拉伯数字、正负号、小数点组成。Visual FoxPro中,具有数值特征的数据类型还有整型、浮点型和双精度型,但这三种数据类型只用于字段变量。,2023/10/11,4,3日期型(Date)用字母D表示,用来表示日期的数据类型。日期的默认 格式为:mm/dd/yy 其中MM表示月,DD表示日,YY表示年。日期型数据的长度固定为8位。4日期时间型(Date Time)用字母T表示,是用来表示日期和时间,默认格式为:mm/dd/yy hh:mm:ss 其中mm,dd,yy的意义与日期型相同,hh,mm,ss分别表示时、分、秒。长度也固定为8位。5逻辑型(Logic)用字母L表示,用来描述客观事物真假或是非判断的数据类型。只有两个取值:真(.t.或.T.)和假(.f.或.F.),逻辑型数据长度固定为1位。,2023/10/11,5,6货币型(Currency)用字母Y表示,为存储货币值而使用的一种数据类型,它默认保留4位小数,占据8字节的存储空间。7备注型(Memo)用字母M表示,用来存放较多字符的数据类型。只用于表中字段类型的定义。字段长度固定为4个字节。实际数据存放在与表文件同名的备注文件(.ftp)中,其长度依实际需要而定。8通用型(General)用字母G表示,是用来存储OLE对象的数据类型。可以是电子表格、文挡、图形、声音等,跟备注型数据一样,它只用于表中字段类型的定义,通用型数据字段长度固定为4位。,2023/10/11,6,二、常量 常量是在命令或程序中可直接引用、具有具体值的数据项,其特征是在整个操作过程中它的值和表现形式保持不变。VFP中有6种类型,每种数据类型的常量的书写方法有所不同:数值型常量、字符型常量、逻辑型常量、日期型常量、日期时间型常量、货币型常量。,2023/10/11,7,1字符型常量 字符型常量又称为字符串。Visual FoxPro要求将字符串中所有字符,用一对双引号“”或单引号 或方括号 作为定界符对括起来。如:“I am a student.”,中华人民共和国,Visual FoxPro 6.0系统都是字符串。,2023/10/11,8,2日期型常量 日期型常量是表示日期值的数据,其默认格式是:mm/dd/yyyy 如10/01/02和10/01/2002均表示2002年10月1日这一日期常量值。严格的日期格式是:yyyy-mm-dd 符号表明该格式是严格的日期格式,并按照 YMD 的格式解释日期型和日期时间型数据,它是严格日期格式的标志,不可缺少。有效的日期型和日期时间型数据分隔符为:连字符“-”、正斜杠“/”、句点“.”和空格。如2002-10-01、2002/10/01/,分别表示2002年10月1日。,2023/10/11,9,3日期时间型常量日期时间型常量可以同时表示日期和时间。格式为:,。其中,的格式为:hh:mm:ssa/p。hh、mm、ss分别用于指定时、分、秒,a表示上午,p表示下午。例如:2006-09-21,2:30:5p表示2006年9月21日下午2点30分5秒。时、分、秒默认值是12、0、0。不指定a或p,则默认为a.例如:2006-09-21,10表示2006年9月21日上午10点。,2023/10/11,10,4逻辑型常量 逻辑型常量就是表示逻辑判断结果“真”或“假”的逻辑值。逻辑常量只有真和假两种,分别用(.t.或.y.)和(.f.或.n.)表示真和假。一般应在表示逻辑常量的字母左右加注圆点符“.”以示区别。逻辑型常量在内存中占用一个字节。,2023/10/11,11,5数值型常量 也称常数,用来表示一个数量的大小,由数字0-9、小数点和正负符号组成。例如,12.3,-67,3.14等。也可以使用科学计数法形式表示,例如:6.789*105可表示为6.789E5。,2023/10/11,12,6货币型常量 表示货币值。书写格式是在数值型常量之前加前缀$,但是不能使用科学记数法表示货币型常量。例如$-1212、$0.50都是正确的,但$4E-6是错误的。货币型常量的小数位不能超过4位,若超过4位,多余的位数将被四舍五入。,2023/10/11,13,三、变量 变量是在操作过程中可以改变其取值或数据类型的数据项。在Visual FoxPro系统中变量分为字段变量、内存变量、数组变量和系统变量4类。确定一个变量,需要确定其三个要素:变量名、数据类型和变量值。,2023/10/11,14,1命名规则 使用字母,下划线和数字命名。一般建议不采用汉字命名;命名以字母或下划线开头;除自由表中字段名、索引的TAG标识名最多只能10个字符外,其他的命名可使用1128个字符;避免使用 Visual FoxPro的保留字;文件名的命名应遵循操作系统的约定。,2023/10/11,15,2内存变量的赋值 内存变量是在内存中定义的一种单个数据元素的临时性变量。(1)内存变量的数据类型 内存变量的数据类型包括:数值型、字符型、逻辑型、日期型;(2)内存变量的建立 建立内存变量就是给内存变量赋值。内存变量赋值既可定义一个新的内存变量,也可改变已有内存变量的值或数据类型。命令格式一:STORE TO 命令功能:计算的值并赋值给各个内存变量。命令格式二:=命令功能:计算的值并赋值给指定内存变量。,2023/10/11,16,3.表达式的显示输出 可以用两个命令在屏幕上显示输出内存变量的值。命令格式:?|?:先回车换行,再计算并输出表达式的值;?:在屏幕上当前位置,计算并直接输出表达式的值;,2023/10/11,17,4内存变量的显示(1)变量的显示 用?/?命令可以分别显示单个或一组变量的值。a=“02001”?a 换行显示?a 接着显示,2023/10/11,18,5.内存变量的清除 Visual FoxPro系统对定义内存变量的数量是有限制的,应及时清理,尽量减少内存的占用,定义其他变量。命令格式:RELEASE,2023/10/11,19,6数组变量 数组是一组具有相同名称、以下标相互区分的有序内存变量。(1)数组元素 数组中各有序变量(数据元素)组成数组的成员,称为数组元素。,2023/10/11,20,数组元素的名称(变量名)用数组名加下标构成。如AA(1),BB(2,3)分别表示一维数组AA的第1个元素,二维数组BB中第2行第3列的元素;数组元素的数据类型决定于最后赋值的数据类型;同一数组中不同数组元素的数据类型可以不同;数组元素与普通内存变量一样操作,可以赋值和引用。,2023/10/11,21,(2)数组的定义 数组必须先定义后使用。命令格式:DIMENSION|DECLARE(,)(3)数组的赋值与引用 数组元素的赋值与引用,与普通内存变量的规则相同。,2023/10/11,22,四、Visual FoxPro的表达式,在Visual FoxPro系统中,表达式是由常量、变量、函数与运算符组成的有意义的运算式子。运算符分为算术(数值)运算符、字符运算符、逻辑运算符和关系运算符五类,相应的,表达式也分为算术表达式、字符表达式、逻辑表达式和关系表达式五类。常量、变量和函数可以作为表达式的特例。,2023/10/11,23,运算符两侧的数据对象必须具有相同数据类型,否则运算将会出错;各类运算的优先顺序如下:圆括号算术运算字符串运算关系运算逻辑运算,2023/10/11,24,1.算术表达式 算术表达式又称数值表达式,其运算对象和运算结果均为数值型数据。数值运算符的功能及运算优先顺序,如表2-2所示。表中运算符按运算优先级别从高到低顺序排列。表2-2 算术运算符,2023/10/11,25,2.字符表达式 字符表达式是由字符运算符将字符型数据对象连接起来进行运算的式子。字符运算的对象是字符型数据对象,运算结果是字符常量或逻辑常量。表2-3为字符运算符 的功能。,2023/10/11,26,表2-3 字符运算符 两个连接运算的优先级别相同,但高于$的比较运算。,2023/10/11,27,3.日期表达式 由日期运算符将一个日期型数据与一个数值型数据连接而成的运算式称为日期表达式。日期运算符分为“+”和“-”两种,其作用分别是在日期数据上增加或减少一个天数。例如:?2004-05-10+10?2004-05-10-2003-05-10主屏幕显示:05/20/04 366,2023/10/11,28,4.关系表达式 由关系运算符连接两个同类数据对象进行关系比较的运算式称为关系表达式。关系表达式的值为逻辑值,关系表达式成立则其值为“真”,否则为“假”。表2-4 关系运算符,2023/10/11,29,(1)单个字符 单个字符的比较是以字符ASCII码的大小作为字符的“大小”,也就是先后顺序。(2)字符串 两个字符串进行比较的基本原则是从左到右逐个字符进行比较,但因系统相关设置状态不同,比较的结果与预期的不完全相同。,2023/10/11,30,相等比较:用运算符“”进行两串比较时,SET EXACT OFF:到达右端串的末尾字符为止,表示相等,即左“包含”右。例如:“abc”=“ab”“abc”!=“bc”SET EXACT ON:完全相同才相等 恒同比较:用运算符=进行两串的恒同比较时,不论SET EXACT的设置如何,只有当两串长度相同,字符相同,排列一致时才成立;,2023/10/11,31,5.逻辑表达式 由逻辑运算将逻辑型数据对象连接而成的式子称为逻辑表达式。逻辑表达式的运算对象与运算结果均为逻辑型数据。表2-5为逻辑运算符的功能。逻辑运算符前后一般要加圆点“.”标记,以示区别。表2-5 逻辑运算符,2023/10/11,32,对于各种逻辑运算,其运算规则可由逻辑运算真值表确定,表2-6所示就是逻辑运算真值表。表2-6 逻辑运算真值表,2023/10/11,33,对于以逻辑型字段进行逻辑判断的情况,一般不用关系表达式而直接用逻辑表达式。如“性别”是一个逻辑型字段,并约定“真”表示男性,“假”表示女性。判断是否为男性:FOR 性别,不用FOR 性别=.T.判断是否为女性:FOR.NOT.性别,不用FOR 性别=.F.。,2023/10/11,34,6运算符优先级 先执行算术运算,字符运算和日期运算,再执行关系运算,最后执行逻辑运算。当然可以用括号来改变其优先级。括号括起来的应优先运算。例:多种表达式运算示例?93 AND 53 OR a$ab AND.NOT.f.主屏幕显示:.t.?(100%3=1)AND(15-4=0)OR 张=张三 主屏幕显示:.f.,2023/10/11,35,第三节 Visual FoxPro常用函数,Visual FoxPro系统中,按函数运算、处理对象和结果的数据类型,可分为数值型函数、字符型函数、逻辑型函数、日期函数、数据转换函数等。按函数的功能和特点,可分为数据处理函数、数据库操作函数、文件管理函数等。,2023/10/11,36,Visual FoxPro的函数由函数名与自变量两部分组成。有些函数可省略自变量,或不需自变量,但也必须保留括号。函数是一类数据项,不能像命令一样单独使用,只能作为命令的一部分进行操作运算。,2023/10/11,37,一、数值函数 数值函数用于数值运算,其自变量与函数都是数值型数据。1取绝对值函数ABS()【格式】ABS()【功能】计算nExp的值,并返回该值的绝对值。2指数函数EXP()【格式】EXP()【功能】求以e为底、nExp值为指数的幂,3取整函数INT()【格式】INT()【功能】计算nExp的值,返回该值的整数部分。,2023/10/11,38,4平方根函数SQRT()【格式】SQRT()【功能】求非负nExp的平方根。5求余数函数MOD()【格式】MOD(,)【功能】返回nExp1除以nExp2的余数,符号与nExp2相同。6四舍五入函数ROUND()【格式】ROUND(,)【功能】返回nExp1四舍五入的值,nExp2表示保留的小数位数。,2023/10/11,39,分析下例各命令的执行结果:MOD()函数与INT()函数使用示例 x=356 x1=INT(x/100)x2=INT(MOD(x,100)/10)x3=MOD(x,10)?x1,x2,x3,2023/10/11,40,二、字符函数 字符函数是处理字符型数据的函数,其自变量或函数值中至少有一个是字符型数据。函数中涉及的字符型数据项,均以cExp表示。1子串位置函数【格式】AT(,,)【功能】返回串cExp1在串cExp2中的起始位置。函数值 为整数。如果串cExp2不包含串cExp1,函数返回值为零。第三个参数数值表达式用于表明要搜索字符表达式1在字符表达式2中第几次出现,其默认值为1,可缺省。例如,a=This is Visual FoxPro?AT(fox,a),AT(“Fox,a),AT(is,a,3),AT(th,a)主屏幕显示:0 16 10 0,2023/10/11,41,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,2023/10/11,42,3字符串长度函数LEN()【格式】LEN()【功能】返回cExp串的字符数(长度)。函数值为N型。4删除字符串前后空格函数【格式】1)LTRIM()2)RTRIM|TRIM()3)ALLTRIM()【功能】1)删除cExp串的前导空格字符。2)删除cExp串尾部空格字符。3)删除字符串前导和尾部空格后的字符串。5空格函数SPACE()【格式】SPACE()【功能】返回一个包含nExp个空格的字符串。,2023/10/11,43,6大小写转换函数LOWER()和UPPER()【格式】LOWER()UPPER()【功能】LOWER()将cExp串中字母全部变成小写字母,UPPER()将cExp串中字母全部变成大写字母,其它字符不变。例如,?LOWER(ABCxyz),UPPER(abcefg123)主屏幕显示:abcxyz ABCEFG123 7宏替换函数&【格式】&.【功能】替换出字符型变量cVar中字符。,2023/10/11,44,8.计算子串出现次数函数格式:OCCURS(,)功能:返回第一个字符串在第二个字符串中出现的次数。例 STORE“THIS IS BOOK”TO X?OCCURS(“S”,X)29.空格字符串生成函数格式:SPACE()功能:返回由指定数目的空格组成的字符串。例:A=SPACE(5)?LEN(A)5 即A为5个空格的字符串。,2023/10/11,45,10.子串替换函数格式:STUFF(,)功能:用值替换中由和指明的一个子串。例:STORE GOOD BYE TO S1 STORE MORNING TO S2?STUFF(S1,6,3,S2)GOOD MORNING11.字符串匹配函数格式:LIKE(,)功能:比较两个字符串对应位置上的字符,若所有对应字符都相匹配,函数返回逻辑真(.T.),否则返回假(.F.)。中可以包含通配符*和?。*可与任何数目的字符相匹配,?可以与任何单个字符相匹配。例:STORE“abc”TO x STORE“abcd”TO y?Like(ab*,x),like(?b?,x),like(x,y).T.T.F.,2023/10/11,46,三、日期时间函数 日期时间函数是处理日期型或日期时间型数据的函数。1系统日期函数DATE()【格式】DATE()【功能】返回当前系统日期,此日期由Windows系统设置。函数值为D型。2系统时间函数TIME()【格式】TIME()【功能】返回当前系统时间,函数值为C型。,2023/10/11,47,3日期函数DAY()【格式】DAY()【功能】返回dExp式中的天数。函数值为N型 4月份函数MONTH()、CMONTH()【格式】MONTH()CMONTH()【功能】MONTH()函数返回dExp式中月份数。函数值为N型。CMONTH()函数则返回月份的英文名。函数值为C型。5年份函数YEAR()【格式】YEAR()【功能】函数返回dExp式中年份值。函数值为N型。,2023/10/11,48,四、转换函数 在数据库应用的过程中,经常要将不同数据类型的数据进行相应转换,满足实际应用的需要。Visual FoxPro系统提供了若干个转换函数,较好地解决了数据类型转换的问题。1字符日期型转换函数CTOD()【格式】CTOD()【功能】把“/”格式的cExp串转换成对应日期值。函数值为D型。,2023/10/11,49,2日期字符型转换函数DTOC()【格式】DTOC()【功能】把日期dExp转换成相应的字符串。函数值为C型。3数值字符型转换函数STR()【格式】STR()【功能】将nExp1的数值转换成字符串形式。函数值为C型。4字符数值型转换函数VAL()【格式】VAL()【功能】将cExp串中数字转换成对应数值,函数值为N型。,2023/10/11,50,5宏替换函数【格式】&字符型变量.【功能】替换出字符变量的内容。如果该函数与其后的字符无明确分界,则要用“.”作为函数结束标记。例如,a=5b=6c56=goodgood=123456?c&a.&b,&c56主屏幕显示:good 123456,2023/10/11,51,五、测试函数 在数据库应用的操作过程中,用户需要了解数据对象的类型、状态等属性,Visual FoxPro提供了相关的测试函数,使用户能够准确地获取操作对象的相关属性。1数据类型函数VARTYPE()【格式】VARTYPE()【功能】返回cExp 串表示的数据对象的数据类型,返回值是一个表示数据类型的大写字母。C:字符型,D:日期型,N:数值型,L:逻辑型,M:备注型,G:通用型,U:未定义。2文件查找函数FILE()【格式】FILE()【功能】根据cExp串中指定路径查找文件,如未指定路径,则在默认目录中查找。文件存在,返回逻辑真(.T.)值,否则为逻辑假(.F.)值。,2023/10/11,52,3条件测试函数IIF()【格式】IIF(,)【功能】逻辑表达式lExp值为真(.T.),返回表达式eExp1的值,否则返回表达式eExp2的值。eExp1和eExp2可以是任意数据类型的表达式。例:IIF()函数使用示例 a=10b=50?IIF(a10,a-5,IIF(b=50,b-20,b+20)主屏幕显示:30,2023/10/11,53,4表结束标志测试函数EOF()【格式】EOF()【功能】测试记录指针是否移到表结束处。如果记录指针指向表尾记录,函数返回真(.T.),否则为假(.F.)。注意:(1)文件尾不是表中的最后一条记录,而是最后一条记录的后面。(2)如指定工作区没有打开表文件,函数返回值为假。(3)表文件中不包含任何记录,函数返回值为真。例:EOF()函数使用示例USE STUD&打开学生表GO BOTTOM&将记录指针指向最后一条记录?EOF()&主屏幕显示:.f.SKIP&记录指针下移一条?EOF()&主屏幕显示:.t.USE&关闭学生表,2023/10/11,54,5表起始标识测试函数BOF()【格式】BOF()【功能】测试记录指针是否移到表起始处。如果记录指针指向表中首记录前面,函数返回真(.T.),否则为假(.F.)。6当前记录号函数RECNO()【格式】RECNO()【功能】返回当前工作区中表的当前记录的记录号。对于空表返回值为1。注意:(1)如果指定工作区没有打开表文件,返回函数值0。(2)如果记录指针指向文件尾,函数值为表文件的记录 数+1。(3)如果记录指针指向文件首,函数值为表文件中第一条记录的记录号。,2023/10/11,55,例:RECNO()函数使用示例 USE STUD GO BOTTOM?RECNO()&屏幕显示:5 此表总共5条记录SKIP&记录指针下移一条?RECNO()&屏幕显示:6GO 1SKIP 1?RECNO()&屏幕显示:1USE,2023/10/11,56,7.值域测试函数格式:BETWEEN(,)功能:判断一个表达式的值是否介于另外两个表达式的值之间.当值大于等于且小于等于)时,函数值为逻辑真(.T.)。否则为假(.F.)。8.空值(NULL值)测试函数格式:ISNULL()功能:判断一个表达式的运算结果是否为NULL值,若是NULL值返回逻辑真(.T.),否则为假(.F.)。例:STORE.NULL.TO X?X,ISNULL(X).NULL.T.9.”空”值测试函数格式:EMPTY()功能:根据指定表达式的运算结果是否为”空”值,返回逻辑真(.T.)或逻辑假(.F.)。,2023/10/11,57,注意:这里的“空”值与NULL值是两个不同的概念。NULL值表示不确定的数;而“空”值是一些特定的值:如 函数EMPTY(.NULL.)的返回值为逻辑假(.F.)。不同类型数据的”空”值规定,2023/10/11,58,结束,