1、第4章 Visual FoxPro语言基础,4.1 数据类型 4.2 常量 4.3 变量 4.4 数组 4.5 运算表达式 4.6 函数,数据是表示和记录信息的符号集合,也是计算机程序处理的对象和运算的结果。现实世界中的信息是极其复杂和多样的,表示和记录信息的数据也是如此。我们必须通过分析数据的内在性质,得出有限的几种数据类型,计算机才能规范有序地运算和处理数据,得出正确的结果。 在Visual FoxPro中定义了8种基本数据类型:字符型、数值型、逻辑型、货币型、日期型、日期时间型、备注型和通用型。数据在使用时必须明确其数据类型,分为常量和变量(包括内存变量和字段变量)两种形式。,4.1 数
2、据类型,返回,常量是在程序运行过程中始终保持不变的数据。Visual FoxPro定义了字符型、数值型、逻辑型、货币型、日期型和日期时间型6种常量。 4.2.1 字符型常量 字符型常量即字符串,由字母、数字、各种符号(包括空格)、汉字等组成,同时以字符串定界符前后定界引导。Visual FoxPro的字符串定界符有单引号、双引号和方括号。,4.2 常量,下一页,返回,Visual FoxPro中字符串的长度(字符个数)最大是254。定界符之间不出现任何字符的字符串,称为“空串”,例如:“。注意区分空串和由若干个空格组成的空格串,空串的长度为“0”,而空格串的长度等于组成该空格串的空格的数量。
3、4.2.2 数值型常量 数值型常量即常数,可以是整数或实数,表示形式上有定点形式和浮点形式两种。定点形式如125,3.1,0.5;浮点形式如7.5E+5,5E6,分别表示7.5105和5106。,4.2 常量,下一页,返回,上一页,4.2.3 逻辑型常量 逻辑型常量只有“逻辑真”和“逻辑假”两个值,凡是表示两种状态的数据都可以采用逻辑常量来表示,例如:已婚或未婚,团员或非团员等。逻辑型常量使用“”作为定界符,用.T.,.t.,.Y.,.y.表示逻辑真,用.F.,.f.,.N.,.n.表示逻辑假。 4.2.4 货币型常量 货币型常量的格式与定点形式的数值型常量类似,但是要前置一个货币符号“$”,
4、并四舍五入到小数点后4位,例如:$8.2703。,4.2 常量,下一页,返回,上一页,4.2.5 日期型常量 日期型常量必须用一对花括号“”和“”作为定界符。花括号中一般以分隔符“/”分割年、月、日三部分内容,严格的日期格式为yyyy/mm/dd,例如:2006年5月1日可表示为2006/05/01。空日期可表示为或/。Visual FoxPro默认的日期显示格式为mm/dd/yy,即分别以两位数字表示月、日、年,也可以通过命令设置日期显示格式。,4.2 常量,下一页,返回,上一页,4.2.6 日期时间型常量 日期时间型常量包括日期和时间两部分,日期部分的格式和设置与日期型常量类似。严格的日期
5、时间型格式为yyyy/mm/dd hh:mm:ssa|p。其中hh、mm和ss分别表示时、分和秒,它们的默认值分别为12,0和0。a和p分别表示上午和下午,默认为a。如果指定的时间大于等于12,则自然为下午的时间。时间部分也可以使用24小时制,此时则可以不指明上午或下午。日期与时间部分必须用空格分隔。,4.2 常量,返回,上一页,在命令操作和程序运行过程中,取值可以变化的量称为变量。在Visual FoxPro中主要有内存变量、数组变量、字段变量和系统变量4种形式的变量。内存变量是存放单个数据的内存单元;数组变量是存放多个数据的内存单元组,将在4.4节中介绍;字段变量是存放在数据表中的数据项;
6、系统变量是Visual FoxPro中有特定含义的变量。,4.3 变量,下一页,返回,4.3.1 内存变量 内存变量用来存储程序运行的中间或最终结果,也可以存储控制程序执行的各种参数。内存变量在定义时需要为之取名并赋初值,在赋初值的同时即决定了该内存变量的类型。内存变量建立后存储在计算机内存中,一般到程序运行结束或Visual FoxPro退出才释放。 内存变量是在程序运行过程中最常用的一类变量,在通常情况下,内存变量可以简称为变量。,4.3 变量,下一页,返回,上一页,4.3.2 字段变量 字段(Field)是包含在表文件记录(Record)中的数据项,即二维表的列;例如:学生情况表(stu
7、dent)中的学号、姓名、班级、性别、年龄等。不同记录的同一个字段可以取不同的值;例如:各个学生的学号是不同的,姓名一般也不相同。同一记录的同一字段在不同时也可以取不同的值,例如:学生的年龄每过一年递增1岁。所以字段是变量,称为字段变量,通常也可简称为字段。,4.3 变量,下一页,返回,上一页,4.3.3 系统变量 系统变量是Visual FoxPro自动生成和使用的系统内存变量。系统变量的特征为变量名的首字符是下画线。系统变量多用于控制外部设备和屏幕显示格式,处理有关计算器、日历、剪贴板的信息等。 4.3.4 变量的显示 变量可以通过以下两条命令显示变量的值。 1. ?|? 命令 格式:?|
8、? , , .,4.3 变量,下一页,返回,上一页,功能:计算并显示表达式的值。 说明: 单个变量名可作为最简单的表达式显示值。 “?”表示在主屏幕中另起一行显示表达式的值,“?”表示在主屏幕中光标的当前位置显示表达式的值。 该命令也可以显示常量。 2. LIST|DISPLAY MEMORY命令 格式:LIST|DISPLAY MEMORY LIKE TO PRINTER PROMPT|TO FLIE ,4.3 变量,下一页,返回,上一页,功能:显示变量的名称、作用范围、类型和值。 说明: 显示内存变量时,命令关键字LIST和DISPLAY等效。 LIKE 子句可以显示名称与通配符相匹配的内
9、存变量。通配符包括“?”和“*”两个;“?”表示不确定的一个字符,“*”表示不确定的一个或多个字符。如果省略LIKE子句,则全部已经定义的内存变量(包括系统自行定义的系统变量)都会显示。 TO PRINTER 子句将显示的内容打印输出,PROMPT 选项显示打印提示窗口。,4.3 变量,下一页,返回,上一页, TO FILE 子句将显示的内容保存到指定的文本文件(.TXT)中。 4.3.5 变量的释放 当不再需要使用某些内存变量时,可以通过RELEASE命令将其从内存中释放。 格式:RELEASE ,.ALL LIKE |EXCEPT 功能:释放指定的内存变量。,4.3 变量,下一页,返回,上
10、一页,说明: LIKE选项用于释放名称与通配符相匹配的内存变量,EXCEPT选项用于释放名称与通配符不相匹配的内存变量。如果两者都省略,则释放所有用户定义的内存变量。 可以使用CLEAR MEMORY命令释放所有用户定义的内存变量。,4.3 变量,返回,上一页,数组(Array)是按照一定顺序排列的一组变量。在Visual FoxPro中,将名称相同、用下标区分的内存变量称为数组。数组中的各个变量称为数组元素。数组的引入可以提高运算速度,简化许多复杂的编程问题。和变量一样,数组在使用前需要定义。 4.4.1 数组的定义 格式:DIMENSION|DECLEAR (,),(,). 功能:定义一维
11、(一元下标)或二维(二元下标)数组,并确定下标的上界。,4.4 数组,下一页,返回,4.4.2 数组的赋值和引用 格式1: 格式2:STORE TO , . 功能:计算表达式的值,并将值赋给数组的全部元素。 说明: 如果在命令格式中用数组元素名替代数组名,可以为某个或某些数组元素赋值。 没有赋值的数组元素的默认值是逻辑假(.F.)。,4.4 数组,下一页,返回,上一页, 同一数组内的各个数组元素可以有不同类型的取值,每个数组元素的具体类型由实际赋值决定,并随实际赋值类型的变化而改变。 数组一经定义,每个数组元素可以作为独立的内存变量使用,具有和内存变量相同的各种类型、赋值、显示和释放方式。 在
12、不同的场合,数组名既可以表示数组的全部元素,也可以表示数组的第一个元素。一般地,在STORE命令和“=”命令中“=”的左侧时,数组名表示数组的全部元素;在显示命令和“=”命令中“=”的右侧时,数组名表示数组的第一个元素。,4.4 数组,返回,上一页,表达式是由常量、变量和函数通过运算符连接起来的式子。单个常量、变量和函数可以认为是表达式的特例。一个表达式经过运算后可以得到一个确定的结果,根据运算结果的数据类型,表达式可以分为数值表达式、字符表达式、关系表达式、逻辑表达式和日期(时间)表达式。表达式的输出命令如下: 格式:?|? , . 功能:计算并显示一个或多个表达式的值。,4.5 运算表达式
13、,下一页,返回,4.5.1 数值表达式 数值表达式是由数值运算符连接常量、变量和函数组成,运算结果为数值型。数值型运算符包括: + :加法运算符,也可以表示正号。 :减法运算符,也可以表示负号。 * :乘法运算符。 / :除法运算符。 或*:乘方运算符。 % :取余运算符。,4.5 运算表达式,下一页,返回,上一页,数值运算符的优先级从高到低依次是:正、负乘方乘、除、取余加、减,同级运算从左到右依次进行,有括号则先计算括号内的部分。 说明: Visual FoxPro的数值表达式没有数学上的表达式的上、下标,例如x2 应写作x2,x*2或x*x。乘号不能省略。 表达式括号只能使用小括号,原因是
14、“ ”和“ ”分别是字符串和日期型数据的定界符,且必须成对出现。 例如:9%(24/(42+2*-5)的运算结果为1。,4.5 运算表达式,下一页,返回,上一页,4.5.2 字符表达式 字符表达式是由字符运算符连接字符型常量、变量和函数组成,运算结果是字符型数据。字符运算包括: +:完全连接运算,将两个字符串连接为一个字符串。 :不完全连接运算,将两个字符串连接为一个字符串,并将前一个字符串尾部的空格移到新字符串尾部。 例如:“Hello!“+“How are you?“ 的运算结果为“Hello!How are you?”;“black“-“board“的运算结果为“blackboard”(
15、“”表示空格)。,4.5 运算表达式,下一页,返回,上一页,4.5.3 关系表达式 关系表达式是由关系运算符连接字符表达式或数值表达式组成,运算结果是逻辑真或逻辑假。关系运算符包括:大于。 = :大于等于。 = :等于。 = :完全等于。,4.5 运算表达式,下一页,返回,上一页,|#=|!= :不等于。 $ :包含。 4.5.4 逻辑表达式 逻辑表达式是由逻辑运算符连接逻辑常量、变量和函数组成,是对一系列逻辑运算的判断,运算结果是逻辑真或逻辑假。逻辑运算包括以下几种。 AND:逻辑与。 OR:逻辑或。 NOT或!:逻辑非。,4.5 运算表达式,下一页,返回,上一页,设A、B为逻辑型数据,它们
16、之间的逻辑运算规则如表4.2所示。 逻辑运算符的优先级从高到低依次为:NOT AND OR。 4.5.5 日期(时间)表达式 日期(时间)表达式由数值运算符(“+”或“”)、数值表达式、日期(时间)型常量、变量和函数组成。日期(时间)型只能进行“+”或“”两种运算,可以有不同类型的数据参与运算,得出不同类型的返回值。日期(时间)在格式上有一定限制,不能任意组合。表4.3列出了合法的日期(时间)表达式格式。,4.5 运算表达式,返回,上一页,函数是Visual FoxPro的重要组成部分,用来实现某种特定的运算。函数的实质就是预先编写的子程序,通过函数调用来执行。充分合理地使用函数可以增强命令或
17、程序的功能,减少编写代码的工作量。 4.6.1 函数的基本概念 函数的一般格式:函数名(参数列表)。 1. 函数的组成 函数由函数名、参数和函数值3个要素组成。 函数名:函数的标识符,通过函数名调用函数。,4.6 函数,下一页,返回, 参数:可以是常量、变量、其他函数或表达式,是提供给函数运算的数据或对函数的控制信息。所有参数需写在函数名后的括号内,多个函数之间用逗号分隔。有些函数对参数的数量、类型和取值会有所要求。 函数值:是经过函数运算后返回的结果。函数值的类型决定函数的类型。 2. 函数的类型 函数的类型就是函数返回值的类型,调用函数时必须了解函数的类型,可以使用函数TYPE( )显示函
18、数的类型。,4.6 函数,下一页,返回,上一页,4.6.2 Visual FoxPro常用函数 Visual FoxPro提供了大量系统函数,认识和掌握常用的系统函数将极大地方便程序设计。 1. 数值型函数 表4.4 数值型函数 说明: “U”表示函数返回值是无符号整数,即非负整数。 函数SQRT( )的参数不能为负值。 三角函数的参数以弧度制表示。,4.6 函数,下一页,返回,上一页, 可以使用命令SET DECIMAL TO 设置数 值表达 式的小数 位数。 2. 字符处理函数 表4.5 字符处理函数 说明: 函数VAL( )的参数为非数值型字符表达式时,转化结果为0.00。当参数的左侧部
19、分为数值型字符表达式,而右侧部分不为数值型字符表达式时,则只转换左侧部分,右侧部分被忽略。,4.6 函数,下一页,返回,上一页, 数值型数据的宽度是10,显示时会占用10个字符的位置,多出的位置左补空格。若要使数值型数据在与之等宽的位置显示,可以将其转化成字符串再去除首尾的空格,即通过函数ALLTRIM(STR(数值型数据)实现。 3. 日期和日期时间处理函数 表4.6 日期和日期时间处理函数 说明: 函数CTOD( )的参数必须符合日期型数据的格式,否则转化为空日期。,4.6 函数,下一页,返回,上一页, 函数DAY( ),MONTH( )和YEAR( )的参数可以是日期型数据,也可以是日期时间型数据。 4. 逻辑测试型函数 表4.7 逻辑测试型函数,4.6 函数,返回,上一页,表4.2 逻辑运算规则,返回,表4.3 日期(时间)表达式格式,返回,表4.4 数值型函数,返回,下一页,表4.4 数值型函数,返回,上一页,表4.5 字符处理函数,返回,下一页,表4.5 字符处理函数,返回,上一页,表4.6 日期和日期时间处理函数,返回,下一页,表4.6 日期和日期时间处理函数,返回,上一页,表4.7 逻辑测试型函数,返回,