vfp3.docx
- 文档编号:30540358
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:34
- 大小:62.75KB
vfp3.docx
《vfp3.docx》由会员分享,可在线阅读,更多相关《vfp3.docx(34页珍藏版)》请在冰豆网上搜索。
vfp3
第3章 数据、表达式与函数
根据计算机系统处理资料的形式来划分,VisualFoxPro有常量、变量、表达式和函数4种形式的资料。
常量和变量是资料运算和处理的基本对象,而表达式和函数则体现了VisualFoxPro语言对资料进行运算和处理的能力及功能。
3.1 数据类型及其存储方式
每个数据都有一定的数据类型,数据类型决定了数据的存储方式和运算方式。
VisualFoxPro将数据划分为13种类型,各种数据类型介绍如下。
1.字符型(Character)
字符型数据是由字母、数字、空格、符号和标点等组成的。
字符型数据的特点是没有数量多与少的概念,不能进行数值相关的算术运算,只是一种字符信息的描述。
每个字符占用一个字节的存储空间。
2.数值型(Numeric)
数值型数据是用于表示数量的一种数据类型,由数值0~9及符号(+和-)和小数点组成。
数值型数据的特点为:
数据之间可以进行相加、相减、相乘、相除等算术运算。
在内存中,数值型数据占用8个字节的存储空间。
3.浮点型(Float)
浮点型与数值型数据的使用完全一样,只是输出结果以浮点数的形式显示。
4.货币型(Currency)
货币型数据用于代替数值型数据的货币值。
通常用8个字节的存储空间存储货币型数据,且只允许最多有4位小数。
5.日期型(Date)
日期型数据是用于存储关于年、月、日数据的一种数据类型。
每一个日期型数据的存储形式均为“yyyy/mm/dd”,其中yyyy表示年份,占用4个字节;mm表示月份,占用2个字节;dd表示日期,占用2个字节。
日期型数据的格式可以通过“选项”窗口设定。
6.日期时间型(DateTime)
日期时间型数据用于存储日期和时间值。
日期时间型数据存储格式为“yyyymmddhhmmss”,其中yyyy表示年,mm(第一个)表示月,dd表示日,hh表示小时,mm(第二个)表示分钟,ss表示秒(必须为整数)。
日期时间型可以表示一个日期值,也可以表示一个时间值,或者表示一个日期时间值。
日期时间型数据与日期型数据一样在内存中用8个字节存储。
7.双精度型(Double)
双精度型数据是指精度要求较高的数据,或真正的浮点数。
双精度型数据占用8个字节存储空间,取值范围为0.90465645841247×10-324~±0.988456743115×10307。
8.整数型(Integer)
整数型数据用于存取不包含小数部分的数值。
整数型数值不用转换成ASCII字符来存储,而数值型数据是要进行二进制转换的。
整数型占用4个字节,取值范围为-2147483647~2147483646。
9.逻辑型(Logical)
逻辑型用于存储只有两个值的数据,即存入的值为真(.T.)或假(.F.)两种状态,是一种高效的存储方法,在内存中占一个字节。
10.备注型(Memory)
备注型数据只用于表中,表示数据块的存储。
备注型字段只包含4个字节,并用这4个字节来引用备注的实际内容。
备注的实际内容只受内存可用空间的限制,并以块的方式来存储。
由于备注型字段的实际内容变化很大,不能将备注的内容存于表文件中,因此必须用一个相对独立的文件来存储这些备注内容,这个文件的扩展名为.dbt。
11.通用型(General)
通用型数据用于存储OLE对象。
每个OLE对象的具体内容可以是电子表、图像,也可以是Word文档,这些OLE对象由其他支持OLE的应用程序建立。
通用型字段在表中的长度为4个字节,而OLE对象的实际内容、类型和数据则取决于建立OLE对象的服务器,以及连接或嵌入的OLE对象。
12.字符型(二进制)
与字符型的使用方法相同,只是采用二进制存储。
13.备注型(二进制)
与备注型的使用方法相同,只是采用二进制存储。
3.2 常量和变量
3.2.1 常量
常量是固定不变的数据,它具有数值型、字符型、日期型、日期时间型、逻辑型和货币型等多种类型。
1.数值型常量
整数、小数或用科学计数法表达的数都是数值型常量。
例如,10,-100,2.81828,0.281828E1等。
2.字符型常量
字符型常量是用双引号、单引号或方括号等定界符括起来的字符串。
例如,“微机”,‘PC机’,[计算机],“3.14159”等。
VisualFoxPro字符串的最大长度为254个字符。
若字符串中含有定界符,则需用另一种定界符括起来,例如,“I’mastudent”。
3.日期型和日期时间型常量
日期型常量或日期时间型常量必须用花括号括起来。
例如,{06/30/1999},{9/15/998:
45}。
空白的日期可表示为{}或{/},空白的日期时间可表示为{/:
}。
还有一种“严格的日期格式”为:
^yyyy-mm-dd[,][hh[:
mm[:
ss]]][a|p]
格式中的符号“^”表明该日期格式是严格的,并按照YMD的格式来解释日期和日期时间。
其中的“-”号可用正斜杠“/”代替,例如,{^2001/08/30}。
必须注意,在执行命令时,VisualFoxPro默认使用严格的日期格式,如果要使用通常的日期格式,必须先执行SETSTRICTDATETO0命令,否则会引起出错。
若要设置严格的日期格式,可执行命令SETSTRICTDATETO1。
4.逻辑型常量
逻辑型常量只有真和假两种值,例如,.T.、.t.、.Y.和.y.都表示真,而.F.、.f.、.N.和.n.都表示假。
5.货币型常量
货币型常量以$符号开头,在存储与计算时采用4位小数的格式。
例如,货币型常量$100.12345,系统将会四舍五入为$100.1235。
3.2.2 变量
在命令操作和程序运行过程中,其值允许变化的量称为变量。
变量包括内存变量、字段变量和系统内存变量3种。
1.内存变量
内存变量可用来存储数据,定义内存变量时需要为它取名并赋初值,内存变量建立后存储于内存中。
1)VisualFoxPro的命名规则
在VisualFoxPro中,除字段和文件外,所有的用户命名,如内存变量、函数的取名,均遵守以下规则:
以字母(也可以是汉字)或下划线开头;由字母、数字、下划线组成,至多128个字符;不可与系统保留字同名。
所谓系统保留字,是指VisualFoxPro语言使用的字,例如,USE命令中的USE就是一个系统保留字。
2)内存变量赋值命令
命令格式1:
〈内存变量〉=〈表达式〉
命令格式2:
STORE〈表达式〉TO〈内存变量表〉
功能:
计算表达式,然后将计算结果赋给内存变量。
【例3-1】 定义内存变量S,N1,N2,N3。
用下面两条命令定义内存变量:
S="VFP" &&字符串VFP赋给S,S为字符型变量
STORE2*4TON1,N2,N3 &&将8分别赋给各变量
说明:
①命令后的符号&&,表示该符号后跟随的是本命令行的注解,它只对命令起注释作用,与命令执行无关。
本书中用来解释命令功能。
②内存变量在赋值时定义了它的值及类型,其类型与所赋的值的类型相同。
③STORE命令的〈内存变量表〉可包括多个内存变量,但需用逗号来分隔。
该命令可将同一值赋给多个内存变量,而“=”命令仅可为一个内存变量赋值。
3)表达式值输出命令
命令格式:
?
|?
?
〈表达式表〉
功能:
计算表达式的值,并将其输出到屏幕。
说明:
①命令格式中的符号“|”表示“或”。
②?
表示从屏幕下一行的第一列起显示结果。
例如,显示例2-1中变量S和N1的值:
?
S &&在VisualFoxPro主窗口中显示VFP
?
N1 &&换一行后显示8
③?
?
表示从当前行的当前列起显示结果。
例如,
?
S &&显示VFP
?
?
"数据库应用" &&紧接在上一命令显示结果VFP的后面显示数据库应用
④〈表达式表〉表示可用逗号来隔开多个表达式,命令执行时遇逗号就空一格。
例如,
?
"S=",S &&显示S= VFP
2.数组
数组是按一定顺序排列的一组内存变量,数组中的各个变量称为数组元素。
数组必须先定义后使用。
1)数组的定义
命令格式:
DIMENSION|DECLARE〈数组名〉(〈下标1〉[,〈下标2〉])
[,〈数组名〉(〈下标1〉[,〈下标2〉])…]
功能:
定义一维或二维数组,及其下标的上界。
说明:
①VisualFoxPro系统规定,数组的下标下界为1。
例如,命令DIMENSIONx(3),a(2,3)分别定义了数组名为x的一维数组与数组名为a的二维数组。
数组x下标的上界为3,由于下界规定为1,故该数组有3个数组元素,表示为x
(1),X
(2)与x(3)。
对于二维数组,常将第1个下标称为行标,第2个下标称为列标,故数组a具有2行3列6个元素,分别表示为:
a(1,1),a(1,2),a(1,3),a(2,1),a(2,2)与a(2,3)。
②理论上,VisualFoxPro中最多可定义65000个数组,且每个数组最多可包含65000个元素。
实际上,最大数将受可用内存的制约。
2)数组的赋值
在一般高级语言中,同一数组各元素的类型必须相同。
VisualFoxPro则不然,它不仅允许同一个数组各元素取不同的数据类型,而且同一个元素的前、后类型也允许改变。
在定义数组时,系统将各数组元素的初值设置为.F.。
用赋值命令可为数组元素分别赋值,也可以整体赋相同的值。
例如,执行命令:
a=8,可为上面定义的二维数组a的6个元素都赋同样的初值8。
二维数组中,各元素在内存中按行的顺序存储,而且也可按一维数组来表示其数组元素。
例如,上述数组a中的元素a(2,2)排在第2行第2列,由于每行有3个元素,所以该元素也可用a(5)来表示。
3.字段变量
表的每一个字段都是一个字段变量。
说字段是变量,是由于对于某一字段,它的值因记录而异。
字段变量在建立表结构时定义,修改表结构时可重新定义,或增删字段变量。
如果内存变量与字段变量同名,则优先访问字段变量;要想访问内存变量,则必须在变量名前加上前缀M.或M->。
内存变量常简称为变量,而字段变量则直接以字段来称呼。
4.系统变量
VisualFoxPro提供了一批系统内存变量,它们都以下划线开头,分别用于控制外部设备(如打印机、鼠标等)及屏幕输出格式,或者处理有关计算器、日历、剪贴板等方面的信息。
系统变量举例如下。
①_DIARYDAT:
存储当前日期。
②_CLIPTEXT:
接收文本并送入剪贴板,例如,执行命令_CLIPTEXT="VFP"后,剪贴板中就存储了文本VFP。
5.内存变量的显示
命令格式:
LIST|DISPLAYMEMORY[LIKE〈通配符〉][TOPRINTER|TOFILE〈文件名〉]
功能:
显示当前已定义的内存变量名、作用范围、类型和值。
说明:
①LIKE子句表示将选出与通配符相匹配的内存变量,通配符有“?
”和“*”两种,前者代表单个字符,后者代表一个或多个字符。
若要显示例2-1中建立的内存变量,执行:
DISPMEMORYLIKE?
?
主窗口中便显示下列内容:
S Pub C "VFP"
N1 Pub N 8(8.00000000)
N2 Pub N 8(8.00000000)
N3 Pub N 8(8.00000000)
省略该选项,则选出全部内存变量(此时包括系统内存变量),并同时显示当前内存变量总的个数、字节数等。
②选项TOPRINTER能将屏幕显示内容输出到打印机,选项TOFILE〈文件名〉能将显示内容存入指定文件。
6.内存变量的清除
命令格式:
RELEASE[〈内存变量表〉][ALL[LIKE|EXCEPT〈通配符〉]]
功能:
从内存清除指定的内存变量。
例如,
RELEASEa,b &&清除内存变量a和b
RELEASEALLLIKEa* &&清除首字母为A的所有内存变量
RELEASEALLEXCEPT?
b* &&清除第二个字符不为B的所有内存变量
RELEASEALL &&清除用户定义的所有内存变量
3.3 运算符与表达式
VisualFoxPro共有5种运算符:
算术运算符、关系运算符、逻辑运算符、字符运算符和日期与日期时间运算符。
1.算术、关系、逻辑运算
现将算术、关系、逻辑这3种运算的运算符列在表3-1中,并简要说明如下。
表3-1 VisualFoxPro算术、关系、逻辑运算符
运算
优先级
运算符
意义
运算举例(注解表示显示结果)
算术
8
()
圆括号
7
^或**
乘方
?
3^2 &&9
6
×
乘
/
除
%
取模:
取两数相除的余数
?
15%4 &&3
5
+
加
-
减
关系
4
<
小于
?
63<54 &&.F.
<=
小于等于
?
{01/01/92}<={01/01/91}&&.F.
>
大于
?
"ABC">"AAAA" &&.T.
续表
运算
优先级
运算符
意义
运算举例(注解表示显示结果)
关系
4
>=
大于等于
?
"大专">="大学" &&.F.
=
相等:
右串包含于左串时为真
?
"ABC"="AB" &&.T.
==
完全相等:
两串全同时为真
?
"ABC"=="AB" &&.F.
<>,#或!
=
不相等
?
.T.<>.F. &&.T.
$
包含:
左串是右串的子串时为真
?
"BC"$"ABCD" &&.T.
逻辑
3
NOT或!
非:
结果是右边逻辑值的反
?
NOT"BC"$"ABCD" &&.F.
2
AND
与:
两边都真才为真
?
.T.AND"ABC">"AB" &&.T.
1
OR
或:
两边有一边为真就为真
?
.T.OR4=5 &&.T.
①算术运算的操作数必须是数值,运算的结果也是数值。
运算顺序是:
圆括号→乘方→乘除与取模→加减,同一级别从左向右计算。
②关系运算两操作数的类型应一致,比较的结果是逻辑值。
数值型数据按数值大小进行比较,日期型数据按年、月、日的先后进行比较,字符型数据按相应位置上两个字符ASCII码值的大小进行比较。
③逻辑运算的操作数应是能得出逻辑值的表达式,运算结果也是逻辑值。
若操作数类型不符合要求,将会出现“操作符/操作数类型不一致”的出错提示。
关系运算常用来描述某种条件,而逻辑运算可用于描述复合的条件。
若需求两个条件中有一个成立便算成立,则应使用OR运算符;若要求两个条件同时成立才算成立,则应使用AND运算符;至于NOT运算符,则用于否定一个条件。
④表达式计算按优先级从高到低执行。
例如,计算表达式
.T.AND"ABC">"AB"
VisualFoxPro将先比较字符串"ABC"和"AB"的大小,然后进行AND运算,结果为真。
⑤表达式值的类型决定了表达式的类型,运算结果为数值的表达式称数值表达式,运算结果为逻辑值的表达式称逻辑表达式。
例如,表达式
.T.AND"ABC">"AB"
的值为.T.,该表达式的类型为逻辑型。
VisualFoxPro还允许使用字符表达式、日期表达式和日期时间表达式,这将在下文介绍。
2.字符、日期与日期时间运算
在表3-1中,“+”和“-”两个算术运算符也可用作字符运算符、日期与日期时间运算符。
1)字符运算符
“+”运算符:
用于连接两个字符串。
“-”运算符:
用于连接两个字符串,并将前一个字符串尾部的空格移到结果字符串的尾部。
例如,
?
"信息 "+"技术" &&显示:
信息 技术
?
"信息 "-"技术" &&显示:
信息技术
2)日期与日期时间运算符
日期或日期时间的运算,以运算符“+”表示数据相加,以运算符“-”表示数据相减。
对日期型数据进行运算是指日期相减,或者加减某个天数;对日期时间型数据进行运算是指日期时间相减,或者加减某个秒数(注意:
两个日期型或日期时间型数据不能相加)。
3.4 常用函数
函数具有特定的功能,VisualFoxPro提供了200余种函数,具有强大的功能。
1.函数的要素
函数有函数名、参数和函数值3个要素。
①函数名起标识作用。
②参数是自变量,一般是表达式,写在括号内。
③函数运算后会返回一个值,称为函数值,这就是函数的功能。
函数值会因参数值不同而不同。
例如,平方根函数,其函数名为SQRT(参见表3-2),下面计算参数值为4的函数值:
?
SQRT(4) &&显示函数值2.00
有的函数省略参数,称为哑参,但仍有返回值,例如,函数DATE()能返回系统当前日期。
2.函数的类型
函数类型就是函数值的类型。
在表达式中嵌入函数时,需了解函数值的类型,免得发生数据类型不一致的错误。
使用TYPE函数能返回表达式的类型,也能测出函数的类型。
例如,
?
TYPE("DATE()") &&显示D,表明函数DATE()是日期型函数
3.常用函数
表3-2~表3-6分类介绍了VisualFoxPro的常用函数,包括数值型函数,字符处理函数,日期处理函数,逻辑型函数和其他函数。
表中,N代表数值表达式,C代表字符表达式,D代表日期表达式。
表3-2 数值型函数
函 数
功 能
例子(注解表示结果)
ABS(N)
求N的绝对值
?
ABS(-4) &&4
SQRT(N)
求N的平方根
?
SQRT(4) &&2.00
EXP(N)
求e的N次方的值
?
EXP
(2) &&7.39
INT(N)
返回N的整数部分
?
INT(7.5) &&7
MAX(N1,N2)
返回N1、N2较大者
?
MAX(4,7) &&7
MOD(N1,N2)
取模,返回N1除以N2所得的余数
?
MOD(8.7,3) &&2.7
ROUND(N1,N2)
将N1四舍五入,保留N2位小数
?
ROUND(3.1415,3) &&3.142
RAND(N)
返回伪随机数
?
RAND() &&随机数,如0.854
说明:
①STR函数中,N2的默认值为10,N3的默认值为0。
例如,STR(3.1415)的值是" 3",该字符串之中有9个空格。
②AT函数中N3的默认值为l,即求第一次出现的位置。
③SUBSTR函数中,若N2被省略,则子串取到C的最后一个字符。
例如,SUBSTR("ABCDEF",3)的值是"CDEF"。
表3-3 字符处理函数
函 数
功 能
例子(注解表示结果)
SUBSTR(C,N1[,N2])
返回C中第N1位起的长度为N2的子串
?
SUBSTR("ABCD",2,2) &&BC
LEFT(C,N)
返回C左起N个字符的子串
?
LEFT("ABCD",2) &&AB
RIGHT(C,N)
返回C右起N个字符的子串
?
RIGHT("ABCD",2) &&CD
LEN(C)
返回字符串的长度
?
LEN("ABCD") &&4
AT(C1,C2[,N])
返回C1在C2中第N次出现的位置
?
AT("BC","ABCD",1) &&2
ALLTRIM(C)
删除C前导和末尾的空格
?
ALLTRIM("ABCD") &&ABCD
SPACE(N)
返回N个空格
?
SPACE(4)
UPPER(C)
将小写字母转换为大写字母
?
UPPER("aBc") &&ABC
LOWER(C)
将大写字母转换为小写字母
?
LOWER("aBc") &&abc
VAL(C)
将字符串转换成数值
?
VAL("3.14") &&3.14
STR(N1[,N2[,N3]])
将数值N1转换为长度为N2位,具有N3位小数的字符串
?
STR(3.14,5,1) && 3.1
CHR(N)
返回ASCII码为N的对应字符
?
CHR(65) &&A
ASC(C)
返回字符C的ASCII码值
?
ASC("A") &&65
表3-4 日期处理函数
函 数
功 能
例子(注解表示结果)
CTOD(C)
将C转换为日期
?
CTOD("09/09/04") &&09/09/04
DTOC(D)
将D转换为字符串
?
DTOC({09/09/04}) &&09/09/04
DTOS(D)
将D转换为yyyymmdd格式的字符串
?
DTOS({09/09/04}) &&20040909
TIME()
以hh:
mm:
ss的格式返回系统当前时间
?
TIME() &&21:
12:
14
DATE()
返回系统当前日期
?
DATE() &&07/26/04
YEAR(D)
返回年份
?
YEAR(DATE()) &&2004
表3-5 逻辑型函数
函 数
功 能
例 子
BOF([〈工作区〉])
记录指针指向首记录之前时返回真值
参阅4.2.2节
EOF([〈工作区〉])
记录指针指向末记录之后时返回真值
FOUND([〈工作区〉])
用LOCATE,CONTINUE,SEEK,FIND查到时返回真值
FILE([C])
文件C存在时返回真值
MDOWN()
按下鼠标左键时返回真值(用于程序中)
表3-6 其他函数
函 数
功 能
例 子
DBF([〈工作区〉])
返回工作区中打开表的名称
RECNO([〈工作区〉])
返回工作区中当前记录的记录号
参阅4.2.2节
TYPE(C)
返回表达式类型,以N,C,D,L之一表示
3.5 实战演练
3.5.1 内存变
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- vfp3
![提示](https://static.bdocx.com/images/bang_tan.gif)