第三章VF数据与数据运算.docx
《第三章VF数据与数据运算.docx》由会员分享,可在线阅读,更多相关《第三章VF数据与数据运算.docx(30页珍藏版)》请在冰点文库上搜索。
第三章VF数据与数据运算
第三章VFP数据与数据运算
(一)
VISUALFOXPRO的基本数据元素:
(1)常量、变量、表达式。
(2)常用函数:
字符处理函数、数值计算函数、日期时间函数、数据类型转换函数、测试函数。
1.常量常量是指在程序运行过程中始终不变化的数据,又称为常数。
在VFP中常量可分为六种类型:
名称
说明
字符型常量
字符型常量是用定界符括起来的由字符、空格或数字所组成的字符串,定界符可以是单引号(’’)、双引号(””)和方括号([])。
如果一种定界符本身已是字符型常量的一个组成部分,则应选择另一种定界符为该字符串定界。
例如:
’副教授’、”abc”、”[数据库系统]”是合法常量,而””xyz””、’It’s’是非法常量。
数值型常量
数值型常量又称为常数,可以是整数、实数或科学记数法。
例如85,-56.2,1.256E+3,3.8E-2等在程序中都是数值型常量。
货币型常量
在数字前加上货币符号“$”就是货币型常量,小数位系统固定为4位。
如$1254.56,表示货币值1254.5600。
逻辑型常量
逻辑型常量只有两个逻辑值:
“真”与“假”。
用.T.(.t.)、.Y.(.y.)表示逻辑“真”,用.F.(.f.)、.N.(.n.)表示逻辑值“假”。
在书写时应注意.T.或.F.两边的小圆点不能省略。
日期型常量
日期型常量用于表示日期的常量值。
在VisualFoxPro6.0中日期型常量用花括号“{}”作为定界符括起来,其书写格式视SETDATE命令的设置而定,系统默认格式为:
{^yyyy-mm-dd}(或{^yyyy/mm/dd}),例如:
{^2003/08/18}(或{^2003-10-18})。
日期时间常量
日期时间型常量用于表示日期时间的常量值。
日期时间常量也必须用花括号括起来,其书写格式视SETDATE命令的设置而定,系统默认格式为:
{^yyyy-mm-dd[hh[:
mm[:
ss]]][am|pm]}(或{^yyyy/mm/dd[hh[:
mm[:
ss]]][am|pm]}),例如:
{^2004/09/1910:
04am}、{^2004-06-2111:
32:
14pm}。
需要注意的是日期和时间之间必须有空格。
如果在时间日期型常量中只有时间,系统默认格式为:
[hh:
mm:
mmam|pm],例如:
[10:
12:
45pm]。
2.变量
变量是在操作过程中可以改变其取值或数据类型的数据项。
在VisualFoxPro系统中变量分为字段变量、内存变量(简单变量、数组变量)2类。
此外,作为面向对象的程序语言,VisualFoxPro在进行面向对象的程序设计中引入了对象的概念,对象实质上也是一类变量。
确定一个变量,需要确定其三个要素:
变量名、数据类型和变量值。
(1)命名约定
使用字母、下划线和数字命名。
内存变量一般建议不采用汉字命名;命名以字母或下划线开头;除自由表中字段名、索引的TAG标识名最多只能10个字符外,其他的命名可使用1~128个字符;避免使用VisualFoxPro的保留字;文件名的命名应遵循操作系统的约定。
(2)字段变量
字段变量是数据库管理系统中的一个重要概念。
它与记录一纵一横构成了数据表的基本结构。
一个数据库是由若干相关的数据表组成,一个数据表是由若干个具有相同属性的记录组成,而每一个记录又是由若干个字段组成。
字段变量就是指数据表中已定义的任意一个字段。
我们可以这样理解:
在一个数据表中,同一个字段名下有若干个数据项,而数据项的值取决于该数据项所在记录行的变化,所以称它为字段变量。
字段变量的数据类型与该字段定义的类型一致。
字段变量的类型有数值型、浮点型、整型、双精度型、字符型、逻辑型、日期型、时间日期型、备注型和通用型等。
使用字段变量首先要建立数据表,建立数据表时首先定义的就是字段变量属性(名字、类型和长度)。
字段变量的定义及字段变量数据的输入、输出需要在表设计器中进行
3.内存变量
内存变量可用来存储数据,定义内存变量时需为它取名并赋初值,内存变量是一个临时变量,内存变量建立后存储于内存中,以便在需要时引用它的内容。
当退出程序时,变量所占的内存自动释放。
VisualFoxPro6.0中共定义了6种类型的内存变量:
数值型、字符型、日期型、日期时间型、逻辑型和货币型。
内存变量可分为简单变量和数组变量两类。
(1)内存变量的建立建立内存变量就是给内存变量赋值。
内存变量赋值既可定义一个新的内存变量,也可改变已有内存变量的值或数据类型。
【格式1】:
〈简单变量〉=<表达式〉
【格式2】:
STORE<表达式>TO<简单变量表>
【功能】:
计算〈表达式〉,然后将计算结果赋给简单变量。
使用格式1,一次可给一个简单变量赋值;使用格式2,一次可给一批简单变量赋值,各变量之间用逗号分隔。
(2)内存变量的输出格式1:
?
<表达式表>格式1:
?
?
<表达式表>功能:
计算表达式的值,并将表达式的值显示在屏幕上。
【说明】:
①命令格式中的?
表示从屏幕下一行的第一列起显示结果,?
?
表示从当前行的当前列起显示结果。
②<表达式表>是表示用逗号隔开的多个表达式组,命令执行时遇逗号就空一格。
4.数组变量
数组是具有相同的变量名、不同下标值的一组变量。
数组中的每个数据值称为数组元素,数组中元素的顺序号称为下标,每个数组元素在数组中的位置是固定的,数组中的元素可以通过下标来进行区分。
数组在使用时要用DIMENSION或DECLARE命令来定义。
这两个命令完全相同,都是用于建立一维或二维数组。
在VisualFoxPro6.0中,同一个数组元素在不同时刻可以存储不同类型的数据,在同一数组中,每个数组元素可以被赋予不同数据类型的值。
(1)数组的定义
数组必须先定义后使用,定义数组是向系统申请数组元素在内存中的存储空间。
【格式】:
DIMENSION|DECLARE<数组名1>(<数值表达式1>[,<数值表达式2>])[,<数组名2>(<数值表达式3>[,<数值表达式4>])…]
【功能】:
定义指定的各个数组。
(2)数组的赋值与引用
数组元素的赋值与引用,与普通内存变量的规则相同。
5.系统变量系统变量是VisualFoxPro系统特有的内存变量,它由VisualFoxPro系统定义、维护。
系统变量有很多,其变量名均以下划线“_”开始,因此在定义内存变量和数组变量名时,不要以下划线开始,以免与系统变量名冲突。
系统变量设置、保存了很多系统的状态、特性,了解、熟悉并且充分地运用系统变量,会给数据库系统的操作、管理带来很多方便,特别是开发应用程序时更为突出,学习时可对此有所关注。
例题
(1)下面关于常量的叙述,不正确的一项是____。
A.常量用以表示一个具体的、不变的值
B.常量是指固定不变的值
C.不同类型的常量的书写格式不同
D.不同类型的常量的书写格式相同
【解析】本题考查的知识点是常量。
在VisualFoxPro中,常量用以表示一个具体的、不变的值,值固定不变。
常量的类型共有6种:
数值型、字符型、货币型、日期型、日期时间型、逻辑型,不同类型的常量,书写格式不相同。
本题的4个选项中,A,B,C的叙述都正确,选项D中认为不同类型常量的书写格式相同是错误的,因此正确答案为D。
【答案】D
(2)数值型常量在内存中用____个字节表示。
A.4 B.6 C.8 D.10
【解析】本题考查的知识点是数值型常量。
系统规定,数值型在内存中用8个字节表示。
掌握这一点,一看便知选择选项C。
这种类型的题主要靠记忆,没有技巧可言。
【答案】C
(3)货币型常量与数值型常量的书写格式类似,但也有不同,表现在____。
A.货币型常量前面要加一个“$”符号
B.数值型常量可以使用科学计数法,货币型常量不可以使用科学计数法
C.货币数据在存储和计算时采用4位小数,数值型常量在此方面无限制
D.以上答案均正确
【解析】本题考查的知识点是货币型常量同数值型常量书写格式的不同之处。
在VisualFoxPro中,货币型常量与数值型常量的书定格式大体相似,但也有区别:
货币型常量前面需要加一个前置符号;数值型常量可以用科学计数法表示,货币型常量不可以用科学计数据法表示;货币数据在存储和计算时采用4位小数,多余的小数按四舍五入处理。
选项A,B,C叙述都正确,因此正确答案为D。
【答案】D
(4)字符型常量的定界符不包括____。
A.单引号 B.双引号
C.花括号 D.方括号
【解析】本题考查的知识点是字符型常量的定界符。
在VisualFoxPro中,字符型常量的定界符有三种:
单引号、双引号、方括号。
选项A,B,D都是字符型常量的定界符,只有选项C中的花括号是日期型常量的定界符,因此正确答案为C。
【答案】C
(5)下列关于字符型常量的定界符书写格式,不正确的是____。
A.'我爱中国'
B.['20387']
C.'¥#123'
D.["VisualFoxPro6.0"]
【解析】本题考查的知识点是字符型常量的定界符的使用。
VisualFoxPro规定,字符型常量的定界符必须成对匹配,不能有一边单引号一边双引号等定界符不匹配的情况出现,选项A和D符合要求。
此外,如果某种定界符本身也是字符串的内容,则可以使用其他定界符,因此选项B正确;选项C中的定界符不匹配,一边是单引号一边是双引号,不符合要求。
因此正确答案为C。
【答案】C
(6)在命令窗口中输入下列命令:
?
"VisualFoxPro",'程序设计',[好帮手]
?
?
[学习VisualFoxPro],"的",‘好方法'。
主屏幕上显示的结果是____。
A.VisualFoxPro程序设计好帮手
B.学习VisualFoxPro的好方法
C.VisualFoxPro程序设计好帮手学习VisualFoxPro的好方法
D.VisualFoxPro程序设计好帮手学习VisualFoxPro的好方法
【解析】本题考查的知识点是单问号命令与双问号命令的区别。
在VisualFoxPro中,单问号命令的功能是在下一行显示若干个表达式的值,双问号命令的功能是在同一行显示表达式的值。
选项A和B只是显示结果的一部分。
选项C中显示的方式不正确,由于第2行是双问号命令,所以显示结果应该与第l行的显示结果在同一行中,所以选项C不正确。
选项D中两个命令的显示结果在同一行内,符合双问号命令的规则,因此正确答案为D。
【答案】D
(7)下列符号中____不能作为VisualFoxPro中的变量名。
A.abc B.XYZ
C.口xyz7 D.Good22luck
【解析】本题考查的知识点是变量名的书写规则。
题目中的口表示空格。
VisualFoxPro变量名的命名规则是变量名必须以字母、汉字、下划线开头,变量名中不能包括小数点,在同一个范围内必须是惟一的。
此题中的4个变量中,只有选项C中的口xyz7是以空格开头,它不可以作为变量名。
其他选项中的变量名都满足VisualFoxPro中变量名的命名规则,是合法的变量名。
因此正确答案为C。
【答案】C
(8)日期型常量的定界符是____。
A.单引号 B.花括号 C.方括号 D.双引号
【解析】本题考查的知识点是日期型常量的定界符。
VisualFoxPro规定,日期型常量的定界符是一对花括号。
本题选项A,C,D都是字符型常量的定界符,因此正确答案为B。
【答案】B
(9)下列符号中,不能作为日期型常量的分隔符的是____。
A.斜杠(/) B.连字号(-)C.句点(.) D.脱字符(^)
【解析】本题考查的知识点是日期型常量的分隔符的形式。
在日期型常量中,系统默认的分隔符为斜扛,常用的其他分隔符还有连字号、句点和空格。
本题4个选项中的A,B,C都可作为分隔符,只有选项D中的脱字符虽然是严格的日期格式中不可缺少的一部分,但它不可以作为分隔符。
因此正确答案为D。
【答案】D
(10)下面货币型常量的书写格式,正确的一项是____。
A.$666.666 B.1323.4228$
C.$123.45321 D.$123.45E4
【解析】本题考查的知识点是货币型常量的书写格式。
在VisualFoxPro中,货币型常理的书写格式要求如下:
前面需加一个前置符($)、小数点保留4位小数、不可以使用科学计数法。
本题中的选项B错误在于$符号写在了后面;选项C错误在于小数点后面没保留4位小数;选项D错误在于使用了科学计数法。
因此正确答案为A。
【答案】A
(11)下面严格日期书写格式正确的一项是____。
A.{2002-06-27} B.{06/27/02}
C.{^2002-06-27} D.{^02-06-27}
【解析】本题考查的知识点是严格日期的书写格式。
书写严格日期格式时要注意以下几点:
花括号中的第一个字符必须是脱字符(^);年份必须用4位表示;年、月、日的次序不能颠倒。
本题选项A中没有脱字符;选项B是传统的书写格式;选项D的年份只有两位,规定年份要4位;只有选项C符合书写要求。
因此正确答案为C。
【答案】C
(12)在命令窗口中输入下列命令:
SETMARKTO【-】
?
{^2004-06-27}
主屏幕上显示的结果是____。
A.06/27/04 B.06-27-04 C.2004-06-27 D.2004/06/27
【解析】本题考查的知识点是SETMARKTO命令的功能。
SETMARKTO命令的功能是指定日期分隔符。
如果执行SETMARKTO命令没有指定任何分隔符,表示恢复系统默认的斜扛分隔符。
本题指定了连接号作为分隔符,因此显示的结果中日期的分隔符应该为“-”,选项A和D被排除;选项C实际上是字符型常量{^2004/06/27}执行的结果,该选项主要用来迷惑考生;选项B符合命令指定的要求。
因此正确答案为B。
【答案】B
(13)下列常量中,只占用内存空间1个字节的是____。
A.数值型常量 B.货币型常量
C.日期型常量 D.逻辑型常量
【解析】本题考查的知识点是各种常量占用内存的空间。
在VisualFoxPro中,数值型常量在内存中占用8个字节;日期型常量占用8个字节,货币型常量占用8个字节,日期时间型常量占用8个字节,逻辑型常量占用1个字节。
本题中选项A,B,C都占用8个字节,只有选项D占用1个字节。
因此正确答案为D。
【答案】D
(14)下列关于变量的叙述不正确的一项是____。
A.变量值可以随时更改
B.变量值不可以随时更改
C.VisualFoxPro的变量分为字段变量和内存变量
D.在VisualFoxPro中,可以将不同类型的数据赋给同一个变量
【解析】本题考查的知识点是变量。
在VisualFoxPro中,变量是可以随时更改的。
变量分为字段变量和内存变量。
变量的类型可以改变,也就是说可以把不同类型的数据赋给同一个变量。
本题中选项A,C,D中的叙述都是正确的,只有选项B说变量值不可以随时更改是错误的。
因此正确答案为B。
【答案】B
(15)在VisualFoxPro中,T表示____内存变量。
A.字符型 B.数值型 C.日期型 D.日期时间型
【解析】本题考查的知识点是内存变量的数据类型的字母表示。
在VisualFoxPro的内存变量中,C表示字符型、N表示数值型、Y表示货币型、L表示逻辑型、D表示日期型、T表示日期时间型。
本题中选项A字符型内存变量用字母C表示;选项B数值型内存变量用字母N表示;选项C日期型内存变量用字母D表示;选项D日期时间型内存变量用字母T表示。
选项A,B,C都不正确,因此正确答案为D。
【答案】D
(16)下列内存变量的书写中,格式不正确的是____。
A..COMX B.Flash_8 C._MUMU D.好心情
【解析】本题考查的知识点是内存变量的书写格式。
在VisualFoxPro中,内存变量的命名规则有3条:
以字母、汉字和下划线开头;长度不行超过128个字符;由字母、汉字、下划线或数字组成。
选项B,C,D都符合内存变量的命名规则,只有选项A以英文句点开头,不符合规则,因此正确答案为A。
【答案】A
6.表达式在VisualFoxPro系统中,表达式是由常量、变量、函数及其他数据容器单独或与运算符组成的有意义的运算式子。
运算符是对数据对象进行加工处理的符号,根据其处理数据对象的数据类型,运算符分为算术(数值)运算符、字符运算符、日期时间运算符、逻辑运算符和关系运算符五类,相应的,表达式也分为算术表达式、字符表达式、日期时间表达式、逻辑表达式和关系表达式五类。
在一个表达式中可能包含多个由不同运算符连接起来的、具有不同数据类型的数据对象,但任何运算符两侧的数据对象必须具有相同数据类型,否则运算将会出错;由于表达式中有多种运算,不同的运算顺序可能得出不同结果,甚至出现运算错误,因此当表达式中包含多种运算时,必须按一定顺序施行相应运算,才能保证运算的合理性和结果的正确性、惟一性。
用户也可以通过给表达式加圆括号的方式,改变其默认运算顺序。
在VisualFoxPro系统中,各类运算的优先顺序如下:
圆括号>算术和日期运算>字符串运算>关系运算>逻辑运算。
同一类运算符也有一定的运算优先顺序,这在各类表达式中分别介绍。
如果多个同一级别的运算,则按在表达式中出现的先后顺序进行运算。
(1)算术表达式
算术表达式又称数值表达式,其运算对象和运算结果均为数值型数据。
数值运算符的功能及运算优先顺序,如表所示。
表中运算符按运算优先级别从高到低顺序排列。
表算术运算符
运算符
功能
表达式举例
运算结果
优先级别
()
圆括号
(2-5)*(3+2)
-15
最高
|
|
|
|
最低
-
取相反数
-(3-8)
5
**、^
乘幂
2**5、3^2
32、9
*、/
乘、除
2*10、25/5
20、5
%
取余数
20%5
0
+、-
加、减
36+19、29-47
55、-18
(2)字符表达式
字符表达式是由字符运算符将字符型数据对象连接起来进行运算的式子。
字符运算的对象是字符型数据对象,运算结果是字符常量或逻辑常量。
"+"与"-"都是字符连接运算符,都将两字符串顺序连接,但“+”是直接连接,“-”则将串1尾部所有空格移到串2尾部后再连接;“$”运算实质上是比较两个串的包含关系,因此有些书籍中将其归于关系运算,其作用是比较、判断串1是否为串2的子串,如果串1是串2的子串,运算结果为“真”,否则为“假”。
所谓子串,如果串1中所有字符均包含在串2中、且与串1中排列方式与顺序完全一致,则称串1为串2的子串。
表字符运算符
运算符
功能
表达式举例
运算结果
+
串1+串2:
两串顺序相连接
‘12‘+’56’
’1256’
-
串1-串2:
串1尾空格移到串2尾后再顺序相连接
‘12‘-‘56’
‘1256‘
$
串1$串2:
串1是否为串2子串
‘1234’$‘12345’
‘1234’$‘34512’
.T.
.F.
两个连接运算的优先级别相同,但高于$的比较运算。
例:
LEN1=”VisualFoxPro6.0”LEN2=”数据库教程”?
LEN1+LEN2&&结果为:
VisualFoxPro6.0数据库教程?
LEN1-LEN2&&结果为:
VisualFoxPro6.0数据库教程?
len(LEN1-LEN2)&&结果为:
28
(3)日期表达式
由日期运算符将一个日期型或日期时间型数据与一个数值型数据连接而成的运算式称为日期表达式。
日期运算符分为“+”和“-”两种,其作用分别是在日期数据上增加或减少一个天数,在日期时间数据上增加或减少一个秒数。
两个运算的优先级别相同。
日期时间操作符有:
+:
添加一个天数或秒数
-:
减少一个天数或秒数
例如:
?
{^2003-09-04}+10&&结果为:
09/14/03
?
{^2003-11-30}-15&&结果为:
11/15/03
?
{^2003-08-0410:
10a}+10&&结果为:
08/04/0310:
10:
10AM
?
{^2003-08-0410:
35p}-10&&结果为:
08/04/0310:
34:
50PM
注意:
日期和日期、日期时间和日期时间只能相减,不能相加。
(4)关系表达式由关系运算符连接两个同类数据对象进行关系比较的运算式称为关系表达式。
关系表达式的值为逻辑值,关系表达式成立则其值为“真”,否则为“假”。
表关系运算符
运算符
功能
表达式举例
运算结果
<
小于
15<4*6
.T.
>
大于
‘A’>’1’
.T.
=
等于
2+4=3*5
.F.
<>、#、!
=.
不等于
5<>-10
.T.
关系运算符的优先级别相同。
关系表达式运算时,就是比较同类两数据对象的“大小”,对于不同类型的数据,其“大小”或者是值的大小,或者是先后顺序。
日期或日期时间数据以日期或时间的先后顺序为序。
在VisualFoxPro系统中,字符型数据的比较相对复杂,默认规则为:
1)单个字符
单个字符的比较是以字符ASCII码的大小,作为字符的“大小”,也就是先后顺序。
2)汉字
系统默认按汉字的拼音排列汉字的顺序,也就是以汉字的拼音顺序比较“大小”。
3)字符串
两个字符串进行比较的基本原则是从左到右逐个字符进行比较。
当两串做“==”和“=”比较时,运算结果与SETEXACTON/OFF的设置有关。
默认是OFF状态。
●精确比较:
用运算符==进行两串的精确比较时,只有当两串长度相同,字符相同,排列一致时才成立;(EXACTON或OFF)
●相等比较:
用运算符=进行两串比较,当处于OFF状态时,只要右边的字符串与左边字符串的前部分内容相匹配,结果就为真.T.。
例如:
“abc”=“abd”为假,“abc”=“abcde”为假,“abcde”=“abc”为真;当处于ON状态时,先在较短字符串的尾部加上若干个空格,使两个字符串长度相等,然后再进行比较。
例如:
“abc”=“abcde”为假,“ab”=“ab”为真;
●大小比较:
用运算符<或>进行两串比较时,比较到第1个不相同字符为止,否则,长度较长的串较“大”;
●其他比较:
除上述运算符之外的其他运算符<>、<=和>=的比较,均可看作是两个运算符以逻辑“或”的关系构成的复合运算。
(5)逻辑表达式由逻辑运算将逻辑型数据对象连接而成的式子称为逻辑表达式。
逻辑表达式的运算对象与运算结果均为逻辑型数据。
表为逻辑运算符的功能。
逻辑运