660 likes | 865 Views
第三章 Visual Foxpro 的语言基础. 教学目的 : 1 .掌握数据类型、变量、常量、表达式等基本概念。 2 .学会变量的建立和输出。 3 .掌握常用的几个函数 :Int , Sqrt , Mod , Max , Min , Left , Right , Substr , Len , Ltrim , Trim , Alltrim , Val , Str , Date , Time , Year , Ctod , Dtoc , Bof , Eof , Recno , RecCount , & 。 教学重点: 数据类型、变量、常量的基本概念 教学难点:
E N D
教学目的: 1.掌握数据类型、变量、常量、表达式等基本概念。 2.学会变量的建立和输出。 3.掌握常用的几个函数:Int,Sqrt,Mod,Max, Min,Left,Right,Substr,Len,Ltrim, Trim,Alltrim,Val,Str,Date,Time,Year, Ctod,Dtoc,Bof,Eof,Recno,RecCount, &。 教学重点: 数据类型、变量、常量的基本概念 教学难点: 几种表达式的概念、区别
要处理的数据是海量的,为了更好的管理这些数据,将数据按照其特点进行了分类,分成了多种不同的数据。要处理的数据是海量的,为了更好的管理这些数据,将数据按照其特点进行了分类,分成了多种不同的数据。 2.1 数据类型 数据类型是简单数据的基本属性,是一个重要的概念。数据类型一旦被定义,就确定了其存储方式和使用方式。 Visual FoxPro系统提供了十三种数据类型。
1、字符型 字符型数据由字母(汉字)、数字、空格等任意ASCII码字符组成。 字符数据的长度为0~254字节,每个ASCII码占一个字节,每个汉字占两个字节。 例如:姓名为字符型字段,存放的“李钢” ……就是字符型数据 ,长度为4个字节 <字母(汉字)> 学号为字符型字段,存放的“95001” ……就是字符型数据,长度为5 个字节 <数字>
2、数值型 它由数字0~9、符号(+或-,+号可省略)和小数点(.)组成。数值型数据的长度为1~20字节(数据中的每个数字、小数点和正负号都各占一个字节)。 例如:年龄为数值型字段,存放的20、19就是数值型数据 ,长度为2 语文为数值型字段,存放的95.5就是数值型数据,长度为4 3、 浮点型 与数值型数据完全等价,数据精度要比数值型数据高,数据范围比数值型要广(用科学记数法)。 例如:总成绩为数值型字段,存放的576.55为浮点型数据,长度为6 234567000表示成浮点数是2.34567E8
4、整型 不包含小数点部分(整数) 只用于字段类型的定义,占用4个字节。 5、双精度型 更高精度的数值型数据 只用于数据表中的字段类型的定义,占用8个字节。 6、日期型 表示日期的数据,长度固定为8个字节 包括年、月、日三个部分,由于各部分的排列顺序及分隔符不同,日期型数据的表现形式也很多。 例如:出生日期为日期型字段,02/13/1979
7、日期时间型 是描述日期和时间的数据,长度固定为8个字节 除了包括年、月、日外,还包括时、分、秒以及上午、下午等 默认格式为“mm/dd/yyyy hh:mm:ss[A/P]” 8、逻辑型 描述客观事物真假的数据 只有真和假两种值,长度固定为1个字节 例如:党员否字段就是逻辑型字段 .F. .T. ( .Y. .N.)
9、备注型 用于存放较长(大于254字节)的字符型数据 长度仅受磁盘空间的限制,它只用于数据表中的字段类型的定义,长度固定为4个字节 实际数据一般是大于4个字符的,他们实际上是被存放在与数据表文件同名的备注文件(FPT)中,4个字节存放的是指向该备注文件的指针。 例如:备注说明字段就是备注型字段 10、通用型 用于存储OLE对象的数据。通用型数据中的OLE对象可以是电子表格、文档、图片等。只用于数据表中的字段类型的定义。 通用型数据长度固定为4个字节,实际数据存放到了磁盘空间内,保存在与数据表文件同名的备注文件(FPT)中。 例如:相片字段就是通用型字段
11、 货币型 是一种特殊形式,在数据的第一个数字前冠一个货币符号($),小数位超过4个字符的数据,系统将会按四舍五入原则自动截取 占用8个字节例如:月花费为货币型字段,$500.0000为货币型数据若输入500.483880 系统将自动保存为 $500.4839
3.2 常量与变量 一、常量(数据) 常量:一旦存放到计算机中,它的值就不再发生变化,不管对它进行什么操作,值都不发生变化。 常量的类型:数值型、字符型、逻辑型、日期型和日期时间型 1、数值型常量 由数字(0-9)、小数点和正负号组成。 例如:以下是合法的数值型常量 -123.56 768 +32 567.67 -123e+12 -3645e-89 表示:-123*1012和-3645*10–89
2、字符型常量 用双引号“”、单引号‘’或方括号[ ]等定界符括起来的字符串(汉字和ASCII码) 例如:“武汉大学” [Foxpro] ‘123.456’ 3、逻辑型常量 逻辑型常量只有真和假两种值。要用定界符(.) 例如: .T.,.t.,.Y. 和.y.都表示真; .F.,.f.,.N.和.n.都表示假。
4、日期常量 常用的系统输入格式:{^yyyy/mm/dd} 常用的系统输出格式:mm/dd/yy (显示格式) 其中,mm代表月,dd代表日,yy或yyyy代表年。 例如:以下是合法的日期型常量 04/12/98 (显示格式) {^2002/03/01}
6、日期时间型常量 日期时间常量常用的系统输入格式:{^yyyy/mm/dd hh:mm:ss}日期时间常量常用的系统输出格式:mm/dd/yy hh:mm:ss 其中:mm代表月,dd代表日,yy或yyyy代表年,hh代表小时,后两个mm代表分钟,ss代表秒。、 例如:以下是合法的日期时间型常量 ?{^1997/06/23 09:16:36}
二、变量 在命令操作和程序运行过程中其值允许变化的量称为变量,变量包括系统变量、内存(数组)变量、和字段变量3种。 1、系统变量 系统自动定义生成的变量,变量名由系统定义并且是以”-“开头,有特殊用途。 display memory &&显示所有系统变量
2、内存变量 内存变量可用来存储数据,定义内存变量时需为它命名并赋初值,内存变量建立后存储于内存中。 由于内存变量是存放在内存当中的,所以除非将内存变量以文件的形式保存,否则,当退出visual foxpro系统后,内存变量的值也会与系统一起从内存中消除。 内存变量的类型有数值型、浮点型、字符型、逻辑型、日期型和日期时间型。 每个内存变量有一个唯一的名字。
(1) 内存变量的命名规则 内存变量名最长不超过254个字节长度,可以字母(汉字)、下划线开头,由字母(汉字)、数字及下划线组成。 内存变量名的命名尽量要有意义,以便识别和具有可读性。 哪些是正确的变量名: ABC LIST 12K #1234 _ASD K&12 A_123
(2 ) 内存变量赋值命令 ①可直接用 = 赋值 内存变量=<表达式> 例如: m=4 n=5 a=m-n ②可采用STORE 间接赋值 STORE <表达式> TO 内存变量 例如: STORE 1.2 TO a,c STORE “武汉大学”TO b STORE {^1995/05/30} TO d
说明: 内存变量在赋值时定义了它的值及类型,其类型与所赋的值的类型相同。 STORE命令的内存变量表可包括多个内存变量,但必须用逗号来分隔。该命令可将同一值赋给多个内存变量。 而“=”命令仅可为一个内存变量赋值。 (3)内存变量的显示 命令格式:?| ??<表达式> 功能:计算表达式的值,并将其显示在屏幕上。 说明: 命令格式中的符号| 表示或。
?表示从屏幕下一行的第一列起显示结果, 例如: STORE 1.2 TO a,c STORE “武汉大学”TO b ?a && VFP主窗口里显示 1.2 ?b &&换一行后显示武汉大学 ??表示从当前行的当前列起显示结果。 例如: ?a &&显示1.2 ??“武汉大学” &&紧接在上一命令显示结果1.2的后面显示武汉大学 ??? :将表达式的值输出到打印机进行打印
注: <表达式表>表示可用逗号来隔开多个表达式,命令执行时遇逗号就空一格。 写出执行以下命令后屏幕上输出的结果: A=12 B=5 ?"a=",a ??"b=",b ?"a+b=",a+b
(4)内存变量的全面信息显示 Display Memo [Like<通配符>] [To Printer][To File<文件名>] 参数说明: ◆ 该命令可以显示所有内存变量的名称、作用域、类型、值等 信息。 ◆ 如果选择[Like<通配符>]选项,则仅显示有关内存变量的信 息。 ◆ 如果选择[To Printer] 选项,表示送打印机对于打印。 ◆ 如果选择[To File<文件名>]选项,表示把内存变量的有关信 息保存到一个文本文件。 例3-12 内存变量的信息显示示例。 Disp Memo &&显示所有的内存变量的信息 Disp Memo Like A* &&显示以A开头所有的内存变量的信息
(4) 内存变量的删除 内存变量会占用一定的内存空间。在程序运行的过程中,如果某些内存变量使用后不再需要,为了节省内存空间,应进行删除。 Release <内存变量名表/All> [Like<通配符>] Clear Memory (该命令与Release All命令相同) 例:前面我们已经建立了A1,A2,A3,B1变量,现在来进行内存变量的释放。 Release A1,A2,A3 Dispay Memory &&A1,A2,A3变量被释放,只有B1变量存在
3、字段变量 一个数据库由若干相关的数据表组成,一个数据表又是由若干个具有相同属性的记录组成,而每一个记录又是由若干个字段组成的。 字段变量(字段名变量):用户在定义表结构时所定义的变量。 是一种多值变量,它随着数据表记录指针的移动而不同。 例如:
3.3 运算符和表达式 运算符:表示数据之间运算方式的符号 VFP运算符包括算术运算符、逻辑运算符、关系运算符和字符运算符 表达式:数据之间运算关系的表达形式,由常量、变量、函数及运算符组成, 单个数据是表达式的特例 表达式按参与运算的数据类型,可划分为算术表达式、逻辑表达式、关系表达式、日期表达式、字符表达式和五种。 注:表达式各个部分的数据类形必须一致
一、算术表达式 算术运算符:包括:();^或** ;* /; %;+-; 算术运算符及运算规则(按优先权列出) 算术表达式:对象必须是数值型数据(常量、内存变量等),运算结果仍然是数值型。
例: 算术表达式示例。 10+20/4+SQRT(16) &&正确的表达式,SQRT()为开方函数 A1=”24” 2+6/3+VAL(A1)\5+25%5 &&正确的表达式,VAL()为字符串转换为数值函数 5*(3-SQRT(4)+ABS(15-60)) &&正确的表达式 A=”123” B=123 2*A+3*B-5 &&错误的表达式
二、字符表达式 字符运算符:(对字符型数据进行各种操作的运算符) + 完全连接运算 - 将前串尾空格移至后串的尾部再连接 $ 测试前串是否包含在后串中 字符表达式:包含字符型数据(常量、内存变量、数组、字段),字符运算符。 + ① 完全连接格式为:“字符串1”+“字符串2”+... 例如: ?"中国 "+"辽宁 "+"大连"&&结果为: 中国 辽宁 大连 ?“234”+A1 &&错误的表达式
- ② 不完全连接格式:“字符串1”-“字符串2”-。。。“字符串N” 例如: ?"中国 "-"辽宁 ","大连“ &&结果为:中国辽宁 大连 $ ③ 包含运算格式:“〈字符串1〉”$ “〈字符串2〉” 如果<字符串2>包含<字符串1>,则其运算结果为“.T.”,否则为“.F.” 例如: ?”计算机”$”计算机概论” &&结果为.T. ? “or” $ “girl” &&结果为? ? "good"$"FoxPro for windows is Good" &&结果为.F.
三、日期表达式 日期运算符: +: 日期与数值相加,结果为该日期之后几天的日期。 日期加日期,非法 -: 日期减数值时,其结果为该日期之前的某天的日期 日期减日期,其结果为两日期之间相差的天数。 数值减日期是不合法的。 日期表达式:包含日期型、数值型的常量、变量、函数、及日期型运算符,其运算结果为日期型数据或数值型数据
例如: ?DATE()+15 ?{^1998/10/10}+5 &&结果为10/15/98 ?{^1998/10/10}-20 &&结果为09/20/98 ?{^1998/10/15}-{^1998/10/10} &&结果为? ?20-{^1998/10/10} &&结果为? ?DATE()+{^1998/10/15} &&结果为?
四、日期时间表达式 日期时间运算符: +:在已给的日期上再加上秒数 -:在已给的日期上前去秒数 或 计算已给的两个日期相差的秒数 日期时间表达式:由日期运算符和日期时间型常量、变量和返回日期时间型数据的函数组成。 例如: ?{^1998/10/10 9:15:20}+200 &&结果为10/10/98 9:18:40 ?{^1998/10/10 9:18:40}-{^1998/10/10 9:15:20} &&结果为200 ?{^1998/10/10 9:15:20}-20 &&结果为?
五、关系表达式 关系运算符: <, >, = , <>(#、!=), <=,>=,= =(完全相等) 用于比较大小, 产生逻辑值。 它们的运算优先级是相同的,由先后次序和括号来确定先运算那一步。
=:在系统默认的情况下,只要=右边的字符串与左边字=:在系统默认的情况下,只要=右边的字符串与左边字 符串的左端的部分相同,则系统判断为相同。 ==:要求两个字符串的长度相同且各对应的字符都相同 时,系统才判断为相同。 关系表达式:由字符表达式、日期表达式、或者算术表达式及关系运算符组成,其运算结果为逻辑值 运算规则: 非汉字字符串按ASCII码值大小进行比较。 汉字字符串按区位码大小进行比较。 日期型数据,前小后大。 逻辑数据.T.大于.F.
关系运算最基本也是最重要的是:关系运算符两边的数据类型必须一致,只有同一类型的数据才能相比较。关系运算最基本也是最重要的是:关系运算符两边的数据类型必须一致,只有同一类型的数据才能相比较。 例如: ?5+3*2>3*1.5+1 &&结果为.T. ? DATE()>{^1999/12/30} &&结果为.T. ? 2<>2 &&结果为.F. ?"a"<"AB" &&结果为.F. ?"计算机概论"="计算机" ?"计算机概论"$"计算机“ ?"计算机概论"=="计算机"
六、逻辑表达式 逻辑运算符: .not. 取反运算 .and. 与运算 仅当两个分量的值均为真时,其运算结果才为真。 .or . 或运算 当两个分量至少有一个为真时,其运算结果就为真。 运算优先顺序:not 最高,or 最低。 逻辑运算的真值表见P36表3-5 逻辑表达式: I.由逻辑运算符和逻辑型常量、变量、返回逻辑型数据的函数和关系表达式组成,其运算结果是逻辑值真“.T.”“.Y.”或假“.F.”“.N.”。 II.逻辑运算符的优先级按非(NOT)、与(AND)、或(OR)的次序执行。
例如: ?.not.‘d’<’a’ &&结果为.T. A=5 B=10 C=”ABCD” ? A>10 AND B>5 &&结果为.F. ? NOT A=5 &&结果为.F. ? A>10 OR B>5 &&结果为.T. ?.T. And C=”AB” &&结果为.T. ? A>C OR B>5 &&错误的表达式
七: 各种表达式之间的运算优先级 不同类型表达式的运算优先级别为: 圆括号>函数>算术运算符>字符运算符 > 关系运算符>逻辑运算符。 习题: 设a=[123],B=[234],表达式的值为假(.F.) 是 。 A).Not.A=B.Or."B" $ [Abc] B) .Not.A$[Abc].And.A<>B C).Not.A<>B D).Not.A>=B
3.4 函数 VFP定义的标准函数十分丰富,共有200余个。灵活运用这些函数,不仅可以简化许多运算,而且能够加强VFP的许多功能。 按函数功能可将函数划为:数值型函数、字符型函数、日期和时间函数、数据类型转换函数、字符处理函数、测试函数及宏替换函数。 <函数名>(参数)
一、数值型函数 1、Int(<数值表达式>) 返回数值表达式的整数部分,不四舍五入。 常用于奇、偶数的判断。 例:取整函数示例。 ? Int(5/2) &&结果为2 A=24 b=1 ? Int(A/2)=A/2 &&结果为? ? Int((A+B)/2)=(A+B)/2 &&结果为?
2.取模函数 Mod(<数值表达式1>,<数值表达式2>) 例: ?MOD(21,4) A=6 B=3 ? A+B%2 &&结果为7 ? Mod(A,2)=0 &&结果为.T. ? A+B%2=0 &&结果为.F.
3.伪随机数 Rand(<数值表达式>) 产生一个0.1到1之间的伪随机数。 例:产生一个小于100的伪随机数示例。 ?Int(Rand()*100) MAX()、MIN()、SQRT()、ABS()、EXP()、ROUND()、LOG()
二、字符型函数 1.字符串截取函数 Substr(<字符表达式>,<数值表达式1>[,<数值表达式2>]) 例:字符串截取函数示例。 ?Subs("东华理工学院",5,4) &&结果为理工 ?Subs(“2008年北京奥运会”,7) &&结果为北京奥运会 A=”VISUAL FOXPRO” ? Substr(A, 8,3) &&结果为:?
2.产生空格函数 Space(<数值表达式>) 按<数值表达式>的值,产生空格字符串赋给内存变量。 例:空格函数示例。 k=Space(3) ?Len(K) &&求K变量字符串的长度,结果为3 ?‘'Visual"+k+"Foxpro'’ &&结果为Visual Foxpro
3.左截子串函数 Left(<字符表达式>,<数值表达式>) 从字符表达式左边第一个字符开始截取<数值表达式>个字符,生成一个新的字符串。 例 左截子串函数、右截子串(Right )函数示例。 ? Left(“ABCDE",2) &&结果为AB ?Right(“ABCDE",2) &&结果为DE A=”FOXPRO 2.6 FOR WINDOWS” ?Left(A,10) &&结果为:FOXPRO 2.6
4.子串查找函数 At(<字符表达式1>,<字符表达式2>[,数值表达式]) 查找<字符表达式l>在<字符表达式2>中第<数值表达式>次出现的起始位置。 例:子串查找函数示例。 ?At(‘D’,’ADCDB',2) &&结果为4 5.求字符串长度函数 Len(<字符表达式>)求字符表达式的长度。 例: 求字符串长度函数示例。 ?Len(“Foxpro") &&结果为6 ?Len(“东华理工大学”) &&结果?
6.删除字符表达式前后的空格函数 AllTrim(<字符串表达式>) 返回删除<字符表达式>前置空格及尾部的空格的字符串。 例:删除字符表达式前后的空格函数示例。 A=” ABCDEF “ ? Len(A) &&结果为11 ? Alltrim(A) &&结果为ABCDEF B=Alltrim(A) ?Len(B) &&结果为6 其它函数: Ltrim()、trim()、replicate()
三、日期和时间函数 1.系统日期函数 Date() 返回系统当前日期。 例:系统日期函数示例。 ?Date() &&返回系统当日日期 2.系统时间函数 Time() 以时:分:秒的形式返回系统当前的时间。。 例:系统时间函数示例。 ?Time() &&结果为14:45:55
3.Year函数 Year(<日期表达式>) 返回<日期表达式>中的年份,它是一个四位数的数值型数据。 例: Year函数示例。 A={^1985/05/26} ? Year(date())-Year(A) &&结果为? Cdow() 、Dow ()、 Month()、 Cmonth()、 day()
四、数据类型转换函数 1.字符型的数据转换数值 函数VAL() Val<字符表达式> 将以纯数字表示的<字符表达式>或以数字开头的<字符表达式>中的开头数字字符串转换为数值型数据,精度为小数二位,会四舍五入。 如果不是以纯数字表示的或不是以数字开头的字符串,则转换为0.00。