第二章VF的数据基础05.docx
《第二章VF的数据基础05.docx》由会员分享,可在线阅读,更多相关《第二章VF的数据基础05.docx(20页珍藏版)》请在冰豆网上搜索。
第二章VF的数据基础05
第三章VF的数据基础
3.1数据类型
1、数据类型
常用数据类型
(1)字符型(Character,简写为C)
由数字、字母等ASCII字符和汉字组成。
最多可达254个字符。
注:
字符型数据使用时必须用定界符(“”,‘’或[])括起来。
(2)数值型数据(Numeric,简写N)
由0~9、小数点和正负号组成。
最大长度为20位
(3)逻辑型数据(Logic,简写为L)
(4)日期型数据与日期时间型数据(Date和DateTime,分别简写为D和T)
注:
书写时必须按照格式{^MM/DD/YY}或{^YYYY/MM/DD}
(5)备注型数据(Memo,简写为M)
用于数据中需要进行备注、说明的不定长或大量的字符型数据。
注:
备注型数据存放在与表文件同名、扩展名为FPT的备注文件中。
表中存放的是指向备注型数据在备注文件中存放的具体位置的指针。
(6)通用型数据(General,简写为G)
用于存放数据表中引入的OLE(对象连接与嵌入)。
如文档、表格、图片等。
存放方法和备注型相同不常用数据类型
(1)浮点型数据(Float,简写为F)
用F(Float)表示,它是数值型数据的一种。
增设浮点型数据主要目的是使计算精度提高。
(2)整型数据(Integer,简写为I)
(3)双精度型数据(Double,简写为B)
(4)货币型数据(Currency,简写为Y)
(5)屏幕型数据
用S(Screen)表示,专用于保存屏幕显示信息。
3.2常量
一、常量
1、概念:
指在命令操作或程序运行过程中其只值始终保持不变的数据。
2、类型
(1)字符型常量:
(定界符""''[])
(2)数值型常量
(3)日期型常量:
(定界符{})
(4)逻辑型常量:
(定界符.t..F.)
(5)浮点型常量
注:
判断常量的唯一标准是定界符!
3.3变量
概念和分类
(1)概念
命令操作和程序运行过程中其值可以改变的量。
(2)分类
分为:
字段变量、内存变量、数组变量和系统变量
1、字段变量
即数据表中的字段,是在建表的时候定义的一类变量。
2、内存变量
(1)概念:
用来保存所需要的常数、中间结果或对数据表和数据库进行某种处理后的结果。
(2)类型:
字符型、数值型、日期型、日期时间型、逻辑型、货币型和屏幕型。
注:
当内存变量和字段变量同名时,若要使用内存变量必须在内存变量必须在内存变量前面加“M.”或者“M->”
(3)内存变量的命名规则
可以用数字、字母(大小写通用)、汉字和下画线组成。
注:
定义变量名时必须以字母或汉字开头,内存变量名不能与VisualFoxPro的保留字同名。
例如:
正确:
a、kill123、ss_ss、姓命、中123a_ss
不正确:
'sss、1a、l*ss、k$ss、年_@龄
(4)内存变量的赋值
格式:
①STORE<表达式>TO<内存变量名表>
功能:
将表达式的值赋给内存变量名表中的一个或多个变量.
例如:
STORE2+3TOA,B,C
②<内存变量名>=<表达式>
功能:
将表达式的值赋给内存变量,同时定义内存变量并确定其类型.
例如:
X=“X”
(5)内存变量的显示输出命令
①格式:
DISPLAY/LISTMEMORY[LIKE<通配符>][TOPRINTER/TOFILE<文件名>]
功能:
显示内存变量的当前内容,并可将这些内容打印或送到一个文本文件中。
例如:
X1=12
X2=“12”
XYZ=.T.
Y=X1
LISTMEMORYLIKEX?
LISTMEMORYLIKEX*
注:
DISP是分屏显示,LIST是滚动显示
②格式:
?
/?
?
<内存变量名表>
功能:
换行或在当前位置显示内存变量名表中每个内存变量的值.
例如:
?
X1,XYZ
?
?
X2,Y
?
XYZ
(6)内存变量的保存与恢复
①保存命令格式:
SAVETO<内存变量文件名>[ALLLIKE<通配符>/ALLEXCEPT<通配符>]
功能:
将当前内存中的内存变量存放到内存变量文件中
说明:
内存变量文件的扩展名为.MEM
②恢复命令格式:
RESTOREFROM<内存变量文件名>[ADDITIVE]
(7)内存变量的删除
格式:
①CLEARMEMORY
②RELEASE〈内存变量名表〉
③RELEASEALL[LIKE/EXCEPT〈通配符〉]
3、数组变量
(1)概念
数组变量〈数组〉是按一顶顺序排列的一组内存变量的集合。
(2)数组的定义
格式:
DIMENSION/DECLARE〈数组名1〉(〈数值表达式〉1……)
例如:
DIEMA(6),B(3,2)
(3)数组的赋值
注:
数组定义好后,数组中的每个数组元素自动被赋予逻辑值.F.
例如:
DIMEA(3,4)
STORE5*6TOA(1,2),A(3,3)
A
(1)={^2002/02/03}
A(2,4)=[TRU]+’E’
LISTMEMOLIKEA
4、系统变量
由VF自动生成和维护的内存变量,以下画线“_”开头,用于控制输出和显示信息的格式,其名称由系统规定。
三、运算符
1、算术运算符
参与运算的对象为数值型数据,得到的结果也为数值型数据。
例如:
1+-2=-15%2=1
2^3=2**3=8
2、字符运算符
参与运算的对象为字符型数据,得到的结果也为数值型数据。
注:
“+”表示原样连接
“-”在连接字符串时会将前面字符串最后的空格移到连接后字符串的最后。
例如
(1)?
“THI?
?
”+”S”
(2)?
”?
?
THI”+”s”(3)?
”THI?
?
”+”?
?
S”
结果为:
THI?
?
S?
?
THISTHI?
?
?
?
S
(1)?
”THI?
?
”+”S”
(2)?
”?
?
THI”-”s”(3)?
”THI?
?
”-”?
?
S”
结果为:
THIS?
?
?
?
THISTHI?
?
S?
?
“?
”表示空格
3、关系运算符
参与运算的对象类型必须相同或相容,得到的结果为逻辑值。
注:
(1)字符型数据按照相应位置上的两个字符ASCII码值进行比较。
汉字按照拼音进行比较。
(“A”的ASCII码值为65,“a”的为97)
(2)模糊比较:
在SETEXACTOFF状态下,用“=”比较两个字符串时,只要“=”右边的字符串与左边的字符串的左端部分相同,即认为是相等。
精确比较:
如是在SETEXACTON状态下,则要完全相同才是相同。
(3)“$”字符串包含运算符,功能:
比较“$”右边的字符串是否包含左边的字符串.
例如:
?
“abc”$”a”,”a-c”$”abc”,”a”$”ab”
输出结果为:
.F.,.F.,.T.
4、日期运算符
注:
日期型数据只能和整数相加,两个日期型不能进行相加。
在和整数做运算时都是那照天来计算
例如:
?
{^2004/02/29}+20
结果为:
2004/03/20
5、逻辑型运算符
要求参与运算的对象为逻辑型数据,得到的结果为逻辑型数据。
(3)逻辑运算:
真值表。
ABANDORNOTA
.t..t..t..t..f.
.t..f..f..t.
.f..t..f..t..t.
.f..f..f..f.
结论:
对于and来讲,如果其中一边为.F.,那么结果都为.F.
对于or来讲,如果其中一边为.T.,那么结果都为.T.
也就是说可以将.t.->1,.f.->0,and看做*,or看做+
优先级:
not>and>or
例如:
x=10
x>23and“this”==”this”andx>(2+13)/23*11and(max(12,22)>min(22,22)orx>0)
x>23and“this”==”this”andx>(2+13)/23*11andmax(12,22)>min(22,22)orx>0
3.4表达式
1、概念
由若干运算符将常量、变量和函数等连接在一起的有意义的式子。
注:
单个的常量、变量和函数均是形式简单的表达式。
例如:
3、"语言"、max(x,y)>min(j,k)and.t.、(a-12)/234+34等都是表达式
根据表达式运算结果的数据类型不同,VFP表达式分为以下四种:
1)数值表达式
由算术运算符、数值型常量、数值型内存变量和字段变量、返回值的类型为数值型的函数组成,其运算结果是数值型数据。
(2)字符表达式
由字符运算符、字符型常量、字符型内存变量和字段变量、返回值的类型为字符型的函数组成。
其运算结果是字符型数据。
(3)关系表达式
由关系运算符和VFP的各种表达式组成,关系运算符两边的数据类型必须一致,其运算结果是一个逻辑值。
(4)逻辑表达式
由逻辑运算符、逻辑型常量、逻辑型内存变量和字段变量、关系表达式、返回逻辑值的函数组成,其运算结果是一个逻辑值
思考:
**50岁以上的女的**
性别=”女”and年龄>50
**入校总分在450分以上的男同学和在400分以上的女同学**
所有基本工资在800元以上的女讲师
3.5常用函数
调用函数格式:
<函数名>([参数表])
使用函数时应注意以下几点:
1、函数名
2、除了&宏函数外,所有函数必须加()
3、函数的作用
4、函数的参数
5、函数的返回值及其类型
(1)每一个函数必然有一个具有确定数据类型的返回值。
(2)函数可以和其它数据进行操作运算。
(2)函数所要求的参数也有一定的数据类型,参数类型不匹配时,将会出现语法错误
数值运算函数:
INT()、ABS()、MAX()、MIN()、SQRT()、ROUND()、MOD()
字符处理函数:
LEN()、AT()、SPACE()、SUBSTR()、LEFT()、RIGHT()
TRIM=RTRIM(TRIM\ALLTRIM\LTRIM\RTRIM)、STUFF()、&:
宏函数
转换函数:
LOWER()、UPPER()、CTOD()、DTOC()、STR()、VAL()ASC()、CHR()
日期时间函数:
DATE()、TIME()、YEAR()、MONTH()、DAY()
测试函数:
RECNO()、BOF()、EOF()、FOUND()、FILE()、DBF()、RECCOUNT()、SELECT()、TYPE()、IIF()、
其它:
ROW()、COL()、INKEY()、READKEY()
1.数值处理函数
(1)求绝对值函数ABS()
【格式】ABS()
【功能】返回的绝对值,参数的类型为N型,得到的函数值的类型为N型。
【例如】输入语句:
?
ABS(-13.5),ABS(13.5),ABS(-50)
显示结果:
13.513.550
注意:
语句?
||是非格式输出语句,具有计算功能。
语句在命令窗口输入。
2)取整函数INT()
【格式】INT()
【功能】返回的整数部分。
【例如】输入语句:
?
INT(-8.99+3),INT(26.9),INT(-26.2),INT(26.2)
显示结果:
-526-2626
(3)求四舍五入函数ROUND()
【格式】ROUND(,)
【功能】返回按所指定的保留小数位数进行四舍五入的值。
若的值为负,则返回小数点左边为绝对值个数零的整数值。
【例如】:
输入语句:
?
ROUND(68.345,2),ROUND(68.745,0),ROUND(68.345,-1),ROUND(68.345,-2)
显示结果:
68.356970100
(4)求平方根SQRT()
【格式】SQRT()
【功能】返回的平方根。
【说明】的值必须为正数或零。
【例如】输入语句:
?
SQRT(25.9),SQRT(8*8),SQRT(ABS(-36))
显示结果:
5.098.006.00
(5)求余函数MOD()
【格式】MOD(,)
【功能】返回除以的余数。
【说明】函数值的符号与相同。
【例如】输入语句:
?
MOD(10,3),MOD(-10,-3),MOD(10,-3),MOD(-10,3)
显示结果:
1-12-2
(6)求指数函数EXP()
【格式】EXP()
【功能】返回以e为底,为幂次的指数值。
【例如】输入语句:
?
EXP(5.5),EXP
(1),EXP(-5),EXP(2*2)
显示结果:
244.692.720.0154.60
(7)求对数函数LOG()
【格式】LOG()
【功能】返回的自然对数值。
【说明】值必须大于零。
【例如】输入语句:
?
LOG(16.5),LOG(10),LOG
(1)
显示结果:
2.802.300.00
(8)求最大值函数MAX()
【格式】MAX(,[,…])
【功能】返回表达式串,[,…]中的最大值。
【说明】这些表达式必须具有相同数据类型(可以同是字符、数值或日期)。
【例如】输入语句:
?
MAX(-23,3.56,12.8,5*9)
?
MAX('BOOK','PEN','READ')
显示结果:
45READ&&比较字符的ASCII大小
9)求最小值函数MIN()
【格式】MIN(,[,…])
【功能】返回表达式串,[,…]中的最小值。
【说明】这些表达式必须具有相同数据类型(可以同是字符、数值或日期)。
【例如】输入语句:
?
MIN(-23,3.56,12.8,5*9)
?
?
MIN('BOOK','PEN','READ')
显示结果:
-23BOOK
2.字符处理函数
(1)宏代换函数&
【格式】&[.]
【功能】将存储在字符型内存变量中的字符串替换出现。
此外,利用可选的句号分隔符“.”及,还可将额外的值添在其尾端,而且本身也可以是一个宏。
【例如】输入下列语句序列
Name=“李小红”
A1=“你好!
&NAME”
?
A1
显示结果:
你好!
李小红
输入语句:
?
”你是&NAME吗?
”
显示结果:
你是&NAME吗?
?
“你是&NAME.吗?
”
显示结果:
你是李小红吗?
输入语句序列:
A=“123”
?
&A+123
显示结果:
246
X1=“STUD.DBF"
USE&X1
结果:
打开STUD.DBF表
注意:
赋值语句的功能是将表达式的值送到变量中。
(2)删除字符串空格函数
①删除字符串前置空格及尾部空格函数ALLTRIM()
【格式】ALLTRIM(<字符表达式>)
【功能】返回删除了<字符表达式>的前置空格及尾部空格的字符串。
②删除字符串前置空格函数LTRIM()
【格式】LTRIM(<字符表达式>)
【功能】返回删除了<字符表达式>的前置空格的字符串。
③删除字符串尾部空格函数RTRIM()或TRIM()
【格式】RTRIM(<字符表达式>)
【功能】返回删除了<字符表达式>的尾部空格的字符串。
例如:
A=“ABC”
B=“XYZ”
?
ALLTRIM(A),B
?
LTRIM(A),B
?
RTRIM(A),B
?
TRIM(A),B
(3)、查找字符串起始位置函数AT()和ATC()
【格式】AT(<字符表达式1>,<字符表达式2>[,<数值表达式>])
【功能】返回<字符表达式1>第一次出现在<字符表达式2>中的整数位置值(从左到右计数)。
若<字符表达式1>未出现在<字符表达式2>中,则返回零值。
如果有可选项<数值表达式>,则在<字符表达式2>中从<数值表达式>值代表出现<字符表达式1>的次数开始查找。
函数AT()和ATC()功能相同,只是AT()要区分大小写,ATC()不区分大小写。
例如:
?
AT(“n”,”Internet”)
?
AT(“N”,”Internet”)
?
AT(“n”,”Internet”,2)
输出结果:
206
(4)、取子串函数
①左截子串函数LEFT()
【格式】LEFT(<字符表达式>,<数值表达式>)
【功能】返回从<字符表达式>最左边计起的<数值表达式>值个字符。
②右截子串函数RIGHT()
【格式】RIGHT(<字符表达式>,<数值表达式>)
【功能】返回从<字符表达式>最右边计起的<数值表达式>值个字符。
如果<数值表达式>值小于或等于零,则返回空字符串。
③截子串函数SUBSTR()
【格式】SUBSTR(<字符表达式>,<数值表达式1>[,<数值表达式2>])
【功能】返回<字符表达式>中,从<数值表达式1>值开始,由<数值表达式2>值指定个数的字符串。
如果无<数值表达式2>选项,则从<数值表达式1>值位置开始直到<字符表达式>值尾部。
【例如】:
?
SUBSTR(“MicrosoftPowerPoint”,11,5)
输出结果:
Point
?
SUBSTR(“面向对象程序设计”,9,4)
输出结果:
程序
?
left(“面向对象程序设计”,8)
输出结果:
面向对象
?
right(“面向对象程序设计”,8)
输出结果:
程序设计
(5)、空格生成函数SPACE()
【格式】SPACE(<数值表达式>)
【功能】返回一个由<数值表达式>值确定的空格组成的字符串。
【例如】:
?
“首都”+“北京”
输出结果:
首都北京
?
“首都”+SPACE(3)+“北京”
输出结果:
首都?
?
?
北京
注:
?
表示空格,一个空格表示一个字符
(6)、转换字符串函数
①字符插入或替换函数STUFF()
【格式】STUFF(<字符表达式1>,<起始位置>,<长度>,<字符表达式2>)
【功能】在<字符表达式1>中插入或替换一字符串。
在<字符表达式1>中从<起始位置>决定的位置开始,删除由<长度>决定的字符个数,然后在该位置插入<字符表达式2>。
如果<长度>为零,则仅将<字符表达式2>插入<字符表达式1>中。
如果<字符表达式2>为一空字符串,则仅从<字符表达式1>中清除<长度>个字符而不加入任何字符。
【例如】:
A=“FOXPRO”
B=“BASE”
?
STUFF(A,4,4,B)
显示结果:
FOXBASE
?
STUFF(A,4,3,"")
显示结果:
FOX
?
STUFF("DISLAY",4,0,"P")
显示结果:
DISPLAY
②大写字母转小写字母函数LOWER()
【格式】LOWER(<字符表达式>)
【功能】将<字符表达式>中的所有大写字母转换成小写字母,其它字符不变。
返回值为字符型。
【例如】:
?
LOWER(“FoxPro”)
显示结果:
foxpro
③小写字母转大写字母函数UPPER()
【格式】UPPER(<字符表达式>)
【功能】将<字符表达式>中的所有小写字母转换成大写字母,其它字符不变
【例如】:
?
UPPER(“FoxPro”)
显示结果:
FOXPRO
(7)、ASCII码转换函数
①求ASCII字符对应数值函数ASC()
【格式】ASC(<字符表达式>)
【功能】返回<字符表达式>值最左边字符对应的ASCII码(十进制)。
【例如】:
?
ASC(“ABC”)
输出结果:
65
②求数值对应的ASCII字符函数CHR()
【格式】CHR(<数值表达式>)
【功能】返回<数值表达式>值对应的ASCII字符
【例如】:
?
CHR(97)
输出结果:
a
(8)、测试字符串长度函数LEN()
【格式】LEN()
【功能】返回值的字符个数。
可以是一个字符串、备注字段或字符类型字段。
若为一空字符串,则返回数值零。
【例如】输入语句:
?
LEN("AppendBlank")
显示结果:
12
X=“计算机等级考试”
?
LEN(X)
显示结果:
14
(9)条件赋值函数IIF()
【格式】IIF(<逻辑表达式>,<表达式1>,<表达式2>)
【功能】按<逻辑表达式>的逻辑值决定返回<表达式1>的值或<表达式2>的值。
若<逻辑表达式>的逻辑值为真,则返回<表达式1>的值,若<逻辑表达式>的逻辑值为假,则返回<表达式2>的值。
【例如】输入语句:
X=2
Y=3
?
IIF(X>Y,X>0,10+Y)
输出结果:
13
?
IIF(X0,10+Y)
输出结果:
.T.
3.日期和时间处理函数
(1)、DATE()函数
【格式】DATE()
【功能】返回当前的系统日期。
返回的日期格式可用SETCENTURY、SETDATETO命令来更改。
(2)、TIME()函数
【格式】TIME()
【功能】返回当前的系统时间。
(3)、YEAR()函数
【格式】YEAR(<日期表达式>)
【功能】返回以数值类型表示的<日期表达式>所代表的公元4位年份。
<日期表达式>可以为系统日期函数、内存变量或数据库字段。
(4)、MONTH()函数
【格式】MONTH(<日期表达式>)
【功能】返回以数值类型表示的<日期表达式>的月份值。
(5)、DAY()函数
【格式】DAY(<日期表达式>)
【功能】返回以数值类型表示的<日期表达式>所代表该月的第几日。
(6)、DOW()函数
【格式】DOW(<日期表达式>)
【功能】返回以数值类型表示的<日期表达式>所代表该星期的第几天,星期日是第1天,星期六是第7天。
<日期表达式>可以为系统日期函数、内存变量或数据库字段。
4.数据类型转换函数
(1)、STR()函数
【格式】STR(<数值表达式1>[,<数值表达式2>[,<数值表达式3>]])
【功能】先计算<数值表达式1>的值,然后将此值转换成长度为<数值表达式2>(如果指定了<数值表达式2>)的字符串;如果指定了<数值表达式3>,则此字符串在小数点右边有<数值表达式3>个数字字符。
<数值表达式2>包括整数个数、小数点及右边的小数数字个数。
【例如】输入语句:
?
STR(256.40,6,2),STR(256.40,5),STR(256.40),
STR(256.47,5,2),STR(10256.40,4,2)
输出结果为:
256.40256256256.5****
(2)、VAL()函数
【格式】VAL(<字符表达式>)
【功能】从<字符表达式>的最左边字符开始,在忽略前置空格的情形下由左向右将阿拉伯数字字符转换成数值,直到遇到一个非数字字符为止。
如果<字符表达式>的第一个字符不是阿拉伯数字,则VAL()函数返回数值零
【例如】输入语句:
?
VAL(“A18”)
输出结果:
0
?
VAL(“18A18”)
输出结果:
18.00
Y=VAL(143.1592)
?
Y
输出结果:
143.16
?
STR(Y,8,4)
输出结果:
143.1592
(3)、CTOD()函数
【格式】CTOD(<日期格式字符表