第 2章,VFP语言基础
1 数据类型
2
3
4
5
运算符和表达式数据存储函数命令单词准备:
本章所用到的单词:
Store release set skip declare
dimension MDY/DMY/YMD century
memory exact caption space type
bottom bof fields top
第 2.1节
1
数据类型概念常用数据类型 (1)
字符型 (Character):
例:,China”,“类型,,[VFP],?12345?
数值型 (Numeric):
例,12345,-0.65,3.1416…
常用数据类型 (2)
日期型 (Date):
例,{^2006/01/01},{^2006-01-01},
{^2006 01 01},{},{/}
日期时间型 (DateTime):
例,{^2006/10/29 09:30:56}
常用数据类型 (3)
逻辑型 (Logical):
例,.T.,.t.(Truth);,F.,.f.(False);
,Y.,.y.(Yes);,N.,.n.(No)
货币型 (Currency,简写为 Y):
通用型 (General)
备注型 (Memo)
常量与变量:
前面所举的例子都是常量 。
常量:固定不变的量 。
举例:字符型常量,数值型常量,日期型常量,
逻辑型常量 …… 注意定界符 。
变量,可赋值,可变 。
变量的类型由所赋值的数据类型决定 。
赋值语句
X=.T.
A1=?hello,world!?
李明 =100
等号:一次给一个变量赋值
Store 0 to x,y,z
Store?money? to m
Store,一次可以给多个变量赋值第 2.2节
2
运算符和表达式掌握数值运算符及数值表达式:
17*3^2/7
58%2,58%3
输出的时候,逗号处显示为空格 。
58%2可以用函数 mod(58,2)代替 。
思考:如何判断一个数是否能被 3整除?
如何判断一个数是否是 5的倍数?
字符串运算及字符表达式:
‘ 中国 ’ +’ China?
VFP?+?6.0?+”数据库,
‘ 下雨 ’ +’ 天留人 ’
‘下雨 ’ -’天留人’
屏幕输出结果是:
– 中国 China
– VFP6.0数据库
– 下雨 天留人
– 下雨天留人日期运算符及日期表达式:
D-D &&两个日期之间相差的天数
D+N &&从 D开始,N天以后的日期
D- N &&从 D开始,N天以前的日期日期表达式思考题
设小王的出生日期为 x,小李的出生日期为 y。 x,y为日期型变量,今天的日期
(date())。 思考:
如何求小王的年龄?
小李和小王相差几岁?
从今天到五一还有多少天? ( 列出各表达式 )
关系运算符 /关系表达式 (1)
4>5,4<=5 &&.F.,T.
4!=5,4#5,4<>5 &&.T.,T.,T.
‘ a?>?b? &&.F.
字符 (串 )比较大小按字典顺序从左至右进行 。
在运算的时候,必须保证数据类型之间的一致 。
例如:
‘ abc?+123 &&表达式错误,因为类型不匹配 。
关系表达式
abc?
53?
127
{^2006/01/01}? {^2007/01/01}
ad?
你知道它们之间有什么关系吗?
关系表达式
关系运算符,>,=,<,<=,>=,
==,!=(#,<>),$
关系表达式:由关系运算符组成的表达式,
用来比较两个数据或表达式之间的关系。
对于不同的数据类型,比较的意义不同。
例如:
两个数值比较:比较大小
两个日期比较:比较年月日
字符串比较:比较顺序或是否存在包含关系 ……
关系运算符,=,==
在非精确匹配模式 (set exact off,默认 )下,只要等于号 (=)
右边字符串是左边字符串的前缀,则结果为,T.;
在精确匹配模式 (set exact on)下,要对应字符完全相等,
结果才为,T.,此时等于号 (=)相当于 ==。 精确比较运算符
==的比较结果与设置无关,需要字符串完全相等 。
‘foxpro’=’fox’,’foxpro’== ’fox’,’foxpro’ =’Fox’
set exact on
‘foxpro’=’fox’,’foxpro’== ’fox’ 显示结果是,.T.,F.,F.
.F.,F.
关系运算符,$(包含 )
字符串包含运算符 $:左边的字符串是否包含在右边的字符串当中 。 如果是,结果为真,T.; 否则为假,F.。
‘ foxpro?$?fox?,?fox?$?foxpro?
Fox?$?foxpro?
输出,.F.,T.,F.
要点:类型一致
关系运算符左右两边的数据类型必须保持一致。不同类型的数据之间不能进行比较。
今天天气鸡蛋
>
<
=

‘abc’>12 &&表达式错误,因为类型不匹配根据类型确定意义
(1)数值型数据?比较大小关系如,5+4>6 7! =3……
(2)日期型数据?依次比较年月日,按照数值大小比较如,date()<date()+1 {^2007/01/01}>{^2006/01/01}
由于日期比较的特殊性,出生日期越小,年龄越大
(3)字符型数据?比较字符在计算机内的排列顺序。
一级汉字按拼音顺序,字母、数字按 ascII码顺序排列。
如,’中国’ >’日本’ ’ a’<’b’ ‘9’>’1’……
设置不同的区别
大小写字母比较要注意:在 VFP中,存在一种设置,设置不同,大小写字母的排列顺序不同。
(1)拼音 (PINYIN)?’A’>’a’
(2)机内码 (MACHINE)?‘a’>’A’
(? Asc(‘a’)?97?asc(‘A’)?65)
Set collate to ‘machine’|’pinyin’
菜单方式,工具?选项?数据?排序序列字符串比较方法
在进行字符串的比较时,由于是比较排列顺序,系统会按字符串从左到右的顺序逐个比较,直至分出先后为止。
比如,’abc’<’ad’
很容易误解为长度比较,从而’ abc’>’ad’
又如,’127’<’53’
很容易误解为数值大小比较关系运算的结果
关系运算的结果将产生一个逻辑型常量:逻辑真值,T.(或逻辑假值,F.)。
比如,7+2<5?.F.
‘abc’$’abc123’?.T.
‘123’>’23’?.F.
date()<date()+1?.T.
127>’27’?错误的表达式关系运算小结
>,>=
<,<=
=,==
!=,#,<>
$
数值型 N 数值大小 是否相等日期型 D 日期大小 是否相等字符型 C 排列顺序
(从左到右 )
是否相等
(精确匹配 )
是否包含类型运算符思考题:
有如下命令序列,请写出结果:
store?5? to x,y
x=?abc?
x=?5?,x=?abc?,x,y
y=x+x &&能否简写为 2x?
set exact off
x,y,y=x,x=y,y==x
逻辑运算符 (1):
用 and,or和 not(或 !)连接的表达式,表达式的值为,T.或,F.
And?逻辑与 。 只有左右两边都为真,结果才为真,T.,否则为假,F.
Or?逻辑或 。 只要左右两边有一个为真,结果为真,只有都为假,才为,F.
Not?逻辑非 。 取反 。 将真值变假,假值变真 。
逻辑运算符 (2):
逻辑运算符优先级:
Not > and >or
Not?单目运算符,即只有一个表达式参与运算。一般来说:单目运算符优先级高于双目运算符。
在没有括号的情况下,先计算 and,后计算 or。
例如
性别 =‘男 ’ or 性别 =‘女 ’ and 成绩 >=60
如果没有优先级,从左到右计算,意义为:所有及格的学生。
由于 and>or,则表示:
所有男学生和及格的女学生。
思考题:
有关系模式:职工 (姓名 (C),性别 (C),部门
(C),工资 (N),工作日期 (D)),写出下面的逻辑表达式 (求年份,year(D型变量 )):
1)