计算机课件第3章 Visual FoxPro6.语言基础_第1页
计算机课件第3章 Visual FoxPro6.语言基础_第2页
计算机课件第3章 Visual FoxPro6.语言基础_第3页
计算机课件第3章 Visual FoxPro6.语言基础_第4页
计算机课件第3章 Visual FoxPro6.语言基础_第5页
已阅读5页,还剩96页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章VisualFoxPro6.。语言基础

1

3.1数据类型、常量及变量

3.1.1数据类型

数据是DBS的操作和管理对象.

数据内容:指所描述客观事物的具体特性,即数据值.

数据形式:数据存储形式和运算方式,即数据类型,每一个

数据都有一定的类型.

为使用户建立和操作数据库更加方便,在VFP系统中提供

了多种不同的数据类型。下面主要介绍11中常用的数据类型。

1)字符型(Character,C)

字符型(Character)数据是由中英文字符、数字

字符和其他ASCII字符组成的字符序列

2)数值型(Numeric,N)

数值型数据由数字。〜9以及正负号(+和-)和小

数点(.)组成。

3)浮点型(Float,F)

与数值型数据完全等价,只是在存储形式上采

取浮点格式且数据的精度要比数值型数据高。只能

用于字段定义.

4)货币型(Currency,Y)

数据的第一个数字前冠一个货币符号($)。默认小数位4位,

小数位超过4个字符的数据,系统将会按四舍五入原则自动截取。

占8个字节.

5)双精度型(Double,B)

它只用于数据表中的字段类型的定义,并采用固定长度浮点

格式存储。

6)整型(Integer,I)

只用于数据表中的字段类型的定义,不带小数点的数值类型,

占4个字节。只能用于字段定义。在表中整型数据以二进制形式

存储。

7)日期型(date,D)

长度固定为8个字节。日期型数据包括年、月、日三个部分,

每部分间用规定的分隔符分开。A

8)日期时间型(dateTime,T)

描述日期和时间的数据,长度固定为8个字节。除包括日期数据的

年、月、日夕卜,还包括时、分、秒以及上午、下午等内容。

9)逻辑型(Logic,L)

逻辑型数据是描述客观事物真假的数据,用于表示逻辑判断结果。

逻辑型数据只有真和假两种值,长度固定为1个字节。

10)备注型

用于存放较长的字符型数据类型。备注型数据没有数据长度限制,

仅受限于现有的磁盘空间。其字段长度固定为4个字符,用于存储备

注文件的地址(指针),而实际数据被存放在与数据表文件同名的备注

文件(*.dpt)中,长度根据数据的内容而定。只能用于字段定义

11)通用型(General,G)

通用型数据是用于存储OLE对象的数据。通用型数据中的OLE(对

象链接嵌入)对象可以是电子表格、文档、图片等。只能用于字段定

义.

通用型数据长度固定为4个字符,实际数据长度仅受限于现有的

磁盘空间。只能用于字段定义.

根据处理数据的形式来划分,VF中有常量,变量,表达式和函数四

种形式的数据.

3.1.2常量

常量用以表示一个具体的、不变的值.

1)数值型常量

表示一个数量的大小,由数字0〜9、小数点和正负号构成。用

科学记数法形式表示很大或很小的数值型常量.数值型数据在内存中

用8个字节表示.

・2)货币型常量

用来表示货币量,书写时须加上前置的符号($)采用4位小数。

如一个货币型常量多于4位小数,那么系统会自动将多余的小数位四

舍五人。如$123.456789将存储为$123.4568,没有科学记数法形式,

在内存中占用8个字节。

3)字符型常量

♦表示一系列字符序列

♦定界符:单引号、双引号或方括号。许多常量都有定界符,不作为

常量本身的内容,但它规定了常量的类型以及常量的起始和终止界

限。

注:(1)定界符必须成对匹配,不能一边用单引号而另一边用双

相号.(2)空串(不包含任何字符的字符串其长度为零)和空格串(包

含若干空格的字符串)是有区别的。即”"”

4)日期型常量

♦定界符:一对花括号{}。

♦花括号内包括年、月、日三部分内容,各部分内容之间用分隔

符分隔。分隔符可是斜杠(/)、连字号(-)、句点(.)和空格,其中

是系统在显示日期型数据时使用的默认分隔符。

日期型常量的格式:

①传统的日期格式

系统默认的日期型数据为美国日期格式“mm/dd/yy”(月/日/年),

传统日期格式中的月、日各为2位数字,而年份可是2位也可是4位

数字,如{10/08/06}、{10-08-06}.{10.08.2006}

②严格的日期格式:{Ayyyy-mm—dd}

花括号内第一个字符必须是脱字符O;年份必须用4位(如

2001、1999等);年月日的次序不能颠倒、不能缺省。如{八2006-

10-08}

③影响日期格式的设置命令

命令格式:setmarkto[日期分隔符]

命令功能:用于设置显示日期型数据时使用的分隔符,如

•命令格式:setdateto

命令功能:设置日期显示的格式

•命令格式:setcenturyon/off

命令功能:用于设置显示日期型数据时是否显示世纪即是否

用4位数字显示年份

•命令格式:setstrictdateto[01112]

命令功能:用于设置是否对日期格式进行检查。0表示不进行严

格的日期格式检查:1表示进行严格的日期格式检查,它是系统

默认的设置;2表示进行严格的日期格式检查,并且对ctod()和

ctot()函数的格式也有效。

10

「■常用日期格式

短语格式短语格式

AMERICANmm/dd/yyBRITISHdd/mm/yy

FRANCE

MDYmm/dd/yyDMYdd/min/yy

USAmm-dd-yyGERMANdd.mm.yy

ITALIANdd-mm-yy

JAPANyy/mm/ddANSIyy.mm.dd

YMDyy/mm/dd

1一

yU"5)日期时间型常量

日期时间型常量包括日期和时间两部分内容:

{〈日期〉,〈时间》。〈日期)部分与日期型常量相似,也有传

统的和严格的两种格式。

〈时间》部分的格式为:[hh[:mm[:ss]][aIp]].其中hh、mm和ss

分别代表时、分和秒,默认值分别为12、0和0。AM和PM分别代表上

午和下午,默认值为AM。如果指定的时间大于等于12,则自然为下

午的时间。

【例3.1]设置不同的日期格式。

SETCENTURYON&&设置4位数字年份

SETMARKTO&&恢复系统默认的斜杠日期分隔符

SETDATETOYMD&&设置为“年/月/日”格式

?{八2006-05-15,09:25:45a}

主窗口显示:2006/05/1509:25:45AM

1

6)逻辑型常量

逻辑型数据只有逻辑真和逻辑假两个值.

逻辑真:.T.、.t.、.Y.和.y.

逻辑假:.F.、.f.、.N.和.n.

注:前后两个句点作为逻辑型常量的定界符是必不可少的,

否则会被误认为变量名。

■V3,13变量

♦定义:在命令执行过程中,其值可变化的量称为变量。变量值在使用

过程中可改变.

♦分类:在VFP中变量分为系统变量、字段变量和内存变量。

字段变量:字段变量就是表中的字段名,其值是表中对应的记录值。

内存变量:它是一种临时变量

注意:若字段变量名与内存变量相同,则默认访问字段变量,要

访问内存变量,则采用M.内存变量或者M一内存变量

1.变量命名规则

♦以字母或汉字或下划线开头的字母,下划线,汉字和数字的组

合;

♦避免使用VFP的保留字;

2字段变量

与其他变量不同的是,字段变量是定义在表中的变量,随表的

存取而存取,因而是永久性变量。字段名就是变量名;字段变量

的数据类型为VisualFoxPro中13种数据类型中的任意数据类型,

字段值就是变量值。不参与运算的数字定义为C。

3.内存变量

(1)内存变量的数据类型(6种)

内存变量的数据类型包括:数值型、字符型、货币型、逻辑

型、日期型和日期时间型;

(2)内存变量的赋值

命令格式1:STORE〈表达式》TO〈内存变量表)

功能:把一个相同的值同时赋值给多个内存变量。

命令格式2:<内存变量>=<表达式)

功能:计算<表达式》的值并赋值给指定一个内存变量。

注:内存变量的类型为最后赋值的值的类型。

内存变量的类型取决于变量值的类型变量的类型可以改变,

可把不同类型的数据赋给同一个内存变量。

学【例3.2]变量赋值。

在命令窗口输入命令:

aa="abcdef"

STORE"DFASDFAS"TOaa

STORE1TOsi,s2,s3

?si,s2,s3,aa

主窗口显示:111DFASDFAS

用5101^和=都可以赋值,但是用STORE可以一次给

多个内存变量赋值。在上面的例子中,aa、si、s2、s3都

是内存变量。aa的数据类型为字符型,而si、s2、s3是数

值型内存变量。

,(3)内存变量值的输出

格式:?I??<表达式表〉[AT<列号>]

?:先回车换行,再计算并输出表达式的值;

??:在屏幕上当前位置,计算并直接输出表达式的值;

<表达式表):用逗号两两分隔的表达式,各表达式的值输出时,

以空格分隔;

AT〈列号>子句指定表达式值从指定列开始显示输出。AT的定位

只对它前面的一个表达式有效,多个表达式必须用多个AT子句分别定

位输出。

(4)内存变量的显示(显示变量名,作用域,类型,值)

格式:list|displaymemory

Listmemory一次显示与通配符匹配的所有内存变量,

displaymemory分屏显示与通配符匹配的所有内存变量,如内存变量

多,显示一屏后暂停,按任意键之后再继续显示下一屏。

(5).内存变量的清除

格式1:clearmemory

功能:清除所有内存变量

格式2:release<内存变量名表》

功能:清除指定的内存变量

格式3:releaseal1[1ike<通配符>Iexcept〈通配符>]

功能:选用LIKE短语清除与通配符相配的内存变量,选用except短

语清除与通配符不相匹配的内存变量。

VF中有两个通配符:?代表任意一个字符

*代表任意个字符

格式4:clearal1

功能:清除所有的内存变量,并关闭所有打开的库文件及相关文件,

设置1区为当前工作区。

⑹内存变量的存储与恢复

由于内存变量是建立在内存中的,一旦退出VFP系统或关

机,内存变量便消失了。为了保存内存变量,以备以后再使用,

VFP系统提供了建立和恢复内存变量文件的命令。

①建立内存变量文件

格式:SAVETO<内存变量文件名>ITOMEM0<备注字段名》[ALL

LIKE|EXCEPT<通配式>]

功能:将内存变量保存到内存变量文件或指定的备注字段中去。系统自

动给内存变量文件加上扩展名.MEMO

②恢复内存变量文件

格式:RESTOREFROM内存变量文件名〔FROMMEMO备注字段名

[ADDITIVE]

功能:从指定的内存变量文件或备注字段中,将保存的内存变

量恢复到内存中来。若无ADDITIVE选项,则先清除当前内存中

的全部内存变量后,再恢复;否则不清除,只将同名的内存变

量覆盖。

4.数组变量

数组变量被定义为一组变量的集合,它是具有相同名称而下标不

同的一组有序内存变量,这些变量可以具有不同的数据类型。VFP允

许定义一维和二维数组,在使用数组时应遵循先定义后使用的原则。

(1)数组定义

格式:DIMENSIONRJB<1|]DECLARE<数组名1>(〈下标上界1>[,

<下标上界2>])[,<数组名2》(<下标上界3>[,〈下标上界

功能:定义一个或多个一维数组或二维数组。

说明:

①下标上界是一数量值,下标的下界由系统统一规定为1。

②命令DIMENSION和DECLARE的功能完全相同。数组一旦定义,数组的每

个元素的初值均为逻辑值.F.o

③在定义数组时,数组名不能与同一环境下的简单变量同名。

■(2)数组元素的赋值与引用y

■数组下标应使用圆括号,二维数组的下标之间使用逗号隔开。

■数组的下标可以是常量、变量和表达式,如A(l)、A(bl)、A(a+b)o

■数组元素的类型为最近一次被赋值的类型。

■每个数组元素可通过数组名及相应的下标来访问

DIMENSIONx⑸,y(2,3)命令定义了两个数组:

一维数组x含5个元素:x(l)、x(2)、x(3)、x(4)、x(5)o

二维数组y含6个元素:y(1,1),y(1,2),y(1,3),y(2,1),y(2,2),y(2,3)

y(1),y(2),y(3),y(4),y(5),y(6)

-在赋值语句中也可使用数组名将同一个值赋给数组的所有元素。

■可用一维数组的形式访问二维数组。例如上面定义的数组y中的各元

素用一维数组形式可依次表示为:y(l)y(2)y(3)y(4)y(5)y(6)o

其中y(4)与y(2,1)引用的是同一变量。

【例3.3]定义数组、赋值并输出。

DIMENSIONA(2),B(2,2),C(2)

A(1)=,,ABCD"

A(2)=T.

B(1,2)=A(1)

B(2,2)=123

B(2,1)=11.1

C=2

?A⑴,A⑵,B(1,2),B(2,2),C⑴,C⑵

主窗口显示:ABCD.T.ABCD12322

系统变量

系统变量是由VFP系统自动生成的变量,它的名字是系统

已定义好的,均以“J(下划线)字符开头。例如.CLIPTEXT表示接

受文本并送入剪贴板。

系统变量与一般变量有相同的使用方法。在定义内存变

量名时,不要以“丁字符开头以避免重名。合理地运用系统变量,

会给数据库系统的操作、管理带来许多方便。在使用DISPLAY

MEMORY命令显示内存变量时,可以看到这些系统变量的当前值。

■孟

3.2运算符与表达式

运算符:是在VFP中用来进行运算的符号。

表达式:就是常量,变量和函数用运算符连接起来的式子,

根据运算对象的数据类型不同,表达式可以分为算术表达式、字

符表达式、日期和时间表达式、关系表达式和逻辑表达式。

常量、变量和函数本身可以就是一个表达式。

3

3.2.1算术表达式

数值表达式由算术运算符与数值型常量、变量、函数构成,运

算结果仍为数值型。又称数值表达式,其运算对象和运算结果均为

数值型数据。数值运算符的功能及运算优先顺序,如下表所示:

优先级运算符说明

1()形成表达式内的子

表达式

2**人乘方运算

3*、/、%乘、除运算、求余

运算

4+、-加、减运算

27

gm.m7

【例3.4]写出数学式.2所对应的算术表达式

2+r

提示:在书写VFP表达式时,需将数学式子中的所有运算符

和运算量改写为VPF所规定的运算符和运算量,并将所有的字

符写在同一水平线上。同时为保证数学式子和VFP的表达式的

一致性,需在必要时需加()。为此,该数学式子对应的VFP

算术表达式为:

g*ml*m2/(2+r**2)或g*ml*m2/(2+rA2)

或g*ml*m2/(2+r*r)

3

3.3.2字符表达式

字符表达式由字符运算符与字符型常量、变量、函数构成,

运算结果仍为字符型。VFP字符运算有两类:连接运算和包含运算。

它们的优先级相同:

1)连接运算

连接运算符有完全连接运算符和不完全连接运算符“-"2种。

十:前后两个字符串首尾连接形成一个新的字符串。

-:连接前后两个字符串,并将前字符串的尾部空格移到合并后的

新字符串尾部。

29

【例3.5]字符连接运算示例。

字符串表达式运算结果

〃计算机世界〃计算机世界

,,inhavenannn+,,BooknI□have□a□□Book

"计算机口□"-"世界"计算机世界口□

Hinhavennann-"BooknIDhaveDDaBookn

注:表中“口”表示空格。

2)包含运算

“$”是字符串的包含运算符,其运算的结果是逻辑值。

如果字符串1包含在字符串2中,则运算结果为真(.T.),否

则为假(.F.)o

【例3.6】字符串包含运算示例。

字符串表达式运算结果

〃计算机"$"计算机世界〃.T.

"TYPE"$"IhaveaBook".F.

3.2.3日期表达式和日期时间表达式

日期和日期时间运算符分为“+〃和”-〃两种,其作用分别是在

日期数据上增加或减少天数,在日期时间数据上增加或减少秒数。

两个运算的优先级别相同。

格式结果及类型

V日期〉+V天数〉日期型。指定日期若干天后的日期

V天数〉+V日期〉日期型。指定日期若干天后的日期

V日期〉-V天数〉日期型。指定日期若干天前的日期

V日期〉-V日期〉数值型。两个指定日期相差的天数

V日期时间〉+V秒数〉日期时间型。指定日期时间若干秒后的日

期时间

V秒数〉+V日期时间〉日期时间型。指定日期时间若干秒后的日

期时间

V日期时间〉-V秒数〉日期时间型。指定日期时间若干秒前的日

期时间

V日期时间》-〈日期时间)数值型。两个指定日期时间相差的秒数.

注意:日期型不能和日期型数据相加

【例3.7】日期和日期时间表达式运算示例。

d2=DATE()+2

d3=DATE()-2

?d2-d3

主窗口显示:4

.

3.2.4关系表达式

由关系运算符连接两个同类数据对象进行关系比较的运算式称

为关系表达式。关系表达式的返回值为逻辑值,关系表达式成立则

其值为“真”,否则为“假”。关系运算符具有相同的优先级。

运算符说明运算符说明

<小于<=小于等于

>大于>=大于等于

—等于——字符串精确比较

<>>#、!=不等于

1一

注:运算符==(精确比较)仅适用于字符型数据,其他运算符

适用于任何类型的数据,但前后两个运算对象的数据类型要一

致。

各种类型数据的比较规则如下:

■数值型和货币型数据根据其代数值的大小进行比较。

■日期型和日期时间型数据进行比较时,离现在日期或时间越近

的日期或时间越大。

■逻辑型数据比较时,.T.比.F.大。

.

■字符型数据(字符串)比较时,对于西文字符,按其ASCH码值的大小进行

排列;对于汉字字符,在默认状态下,根据它们的拼音顺序比较大小。字

符串比较时,先将2个字符串的第一个字符比较,若两者不等,其大小就决

定了2个字符串的大小。若相等,则再将第2个字符比较,以次类推,直到

最后,若每个字符都相等,贝|2个字符串相等。

■当运算对象为字符型时,可用命令SETEXACTON/OFF来设置“=”是否为

精确比较。在非精确比较时,在关系表达式的格式中,只要后一个表达

式是前一个表达式的前缀,其结果便为真。

1

【例3.8】关系运算示例。

SETEXACTOFF&&设置字符串为非精确比较

?1244.33>22&&.T.

?aa>bb&&.T.或者.F.,取决于变量aa和bb的内容

?"A">"BU&&,F.

?“助教”>“教授”&&,T.

zc="教授口□〃

?zc="教授","教授"=zc,"教授"==LEFT(zc,4),zc=="教授"

主窗口显示:.T..F..T..F

注意:在非精确比较状态下,条件zc="教授"与条件〃教授』

zc不等价。

3.2.5逻辑表达式

由逻辑运算符将逻辑型数据对象连接而成的式子称为逻辑表达

式。逻辑表达式的运算对象与运算结果均为逻辑型数据。逻辑运算

符前后一般要加圆点".〃标记,以示区别,也可省略。

运算符功能优先级别

0圆括号最高

.NOT.或!逻辑非1

.AND.逻辑与1

最低

.OR.逻辑或

逻辑运算真值表

ABA.AND.BA.OR.B.NOT.A

.T..T..T..T..F.

.T..F..F..T..F.

.F..T..F..T..T.

.E.F..F..F..T.

当一个表达式包含多种运算时,其运算的优先

级由高到低排列为:算术运算T字符串运算T日期

和时间运算-关系运算一逻辑运算。

39

【例3.9]逻辑运算示例。

x=8

y=15

?x>5,y<10,x>5ORy<10,x>5ANDRKG*2]y<10,NOTy<10

主窗口显示:.T..F..T..F..T.

3.3VisualFoxPro6.0常用函数

为了增强系统的功能和方便使用,VFP提供了许多函数,每

个函数实现某个特定的功能或完成某种运算。函数就像命令一

样,是系统内部“编制”好的一段程序,只要调用它,就能得

到相应的函数结果。

函数具有特定的功能,分为系统函数和自定义函数两类。

VFP提供了200多个函数。函数具有函数名、参数和函数值三个

要素,有的函数缺省参数。在使用函数时要了解函数值的类型,

免得发生数据类型不一致的错误。

函数调用的一般形式为:函数名([参数表])

,3.3.1数值处理函数一

数值函数用于数值运算,其自变量与函数值都是数值型数据。

1)取绝对值函数

格式:人8$(<数值表达式))

功能:求数值型表达式的绝对值。

2)求符号函数

格式:SIGN(<数值表达式》)

功能:求指定数值表达式的符号。当表达式的运算结果为正、

负和零时,函数值分别为1、-1和0。

3)求平方根函数

格式:SQRT(<数值表达式))

功能:求数值型表达式的算术平方根,数值型表达式的值应

不小于零。函数值为数值型。

4)求指数函数

格式:£乂「(<数值表达式))

功能:羽1数值型表达式的值作为指数x,求出炉的值。

5)求对数函数

格式:LOG(<数值表达式》)

1/)610(<数值表达式》)

功能:LOG求数值表达式的自然对数,LOG10求数值型表达式的常

用对数,数值型表达式的值必须大于零。

♦3

6)取整函数

格式:1附(<数值表达式))

CEILING(〈数值表达式))

FLOOR(〈数值表达式》)

功能:INT取数值型表达式的整数部分。CEILING取大于

或等于指定表达式值的最小整数。FLOOR取小于或等于指定

表达式值的最大整数。

【例3.10】INTO、CEILING().FLOOR()函数的使用。

x=56.72

?INT(x),INT(-x),CEILING(x),CEILING(-

x),FLOOR(x),FLOOR(-x)

输出的函数值依次为56,-56,57,-56,56,-57。

44

7)求余数函数

格式:MOD(〈数值表达式1>,<数值表达式2>)

功能:求<数值表达式1>除以<数值表达式2>所得出的余数。余

数的符号与表达式2相同。如果被除数与除数同号,那么函数值即

为两数相除的余数;如果被除数与除数异号,则函数值为两数相

除的余数再加上除数的值。

例如:函数MOD(25,7)的值为4,MOD(25,-7)的值为-3,MOD(-

25,7)的值为3,MOD(-25,-7)的值为-4。

L

【例3.11]MOD()函数和INTO函数的使用。

x=521

xl=INT(x/100)&&x的百位数字

x2=INT(MOD(x,100)/10)&&x的十位数字

x3=M0D(x,10)&&x的个位数字

?xl+10*x2+100*x3

其输出结果为125

由此可见,利用MOD()函数和INTO函数可将3位整数x的百、

十、个位数字分离出来。在许多数值问题处理中,均可利用这两

个函数实现,如判断一个整数能否被另一个整数整除。-

8)四舍五入函数

格式:ROUND(<数值表达式1>,<数值表达式2>)

功能:对〈数值表达式1>的值按照<数值表达式2>指定的位置

进行四舍五入。若〈数值表达式2>的值n大于0,它表示的是要保

留的小数位数为n,则对小数点后第n+1位小数进行四舍五入;若

<数值表达式2>的值n小于0,它表示的是对〈数值表达式1>之值的

小数点前n位四舍五入。

【例3.12】ROUND()函数的使用。

x=234.628

?ROUND(x,4-2),ROUND(x,1),ROUND(x,0),ROUND(x,-l),ROUND(123.4567,-2)

主窗口显示:234.63234.6235230100

9)求最大值和最小值函数。

格式:MAX(〈表达式1>,<表达式2>[,<表达式3>」)

MIN(<表达式1>,<表达式2>[,<表达式3>.」)

功能:MAX()是计算各表达式的值,并返回其中的最大值;

MIN()计算各表达式的值,并返回其中的最小值。表达式的类型

可以是数值型、字符型、货币型、双精度型、浮点型、日期型和

日期时间型,但所有表达式的类型必须相同。

10)兀函数

格式:PI0

功能:返回圆周率兀的近似值3.14。

格式:DISKSPACE()

功能:求指定磁盘所剩余的可用空间的字节数。

12)求字段数函数

格式:FCOUNT(\[<数值型表达式>\])

功能:求指定工作区表文件的字段数。若指定工作区无表文

件打开,则返回0。若未指定〈数值型表达式》,则对当前工作区操作。

【例3.13]FCOUNTO函数的使用。

USEXSDA&&假定XSDA表有10个字段

?FCOUNT()

主窗口显示:10

13)求字段名函数

格式:FIELD([<数值型表达式1>[,<数值型表达式2>]]

功能:求<数值型表达式2>指定的工作区中的表文件,由<数值

型表达式1>指定位置的字段名。若<数值型表达式1>的值超出表文件

的字段个数,则返回空串。若指定工作区无文件打开,则返回空串。

若省略<数值型表达式2》,则对当前工作区操作。

【例3.14]FIELD。函数的使用。

USEXSDA&&假定XSDA表有10个字段,第2个字段为“姓名”

?FIELD(2)

主窗口显示:姓名

・3.3.2字符串处理函数

字符串处理函数主要是对字符型数据进行运算。使用这些函数可

以很方便地进行各种字符串的运算,是实现文字编辑的重要手段。函

数中涉及的字符型数据项,均以cExp表示。

1)求字符串长度函数

格式:LEN(<字符串表达式》)

功能:求字符串的长度,即字符串所包含的字符个数。若是空串,

则长度为0。函数值为数值型。

2)生成空格字符函数

格式:SPACE(<数值型表达式》)

功能:生成若干个空格,空格的个数由数值型表达式的值决定。

3)大小写字母转换函数

格式:LOWER(<字符串表达式》)

UPPER《字符串表达式》)

功能:LOWER()将指定字符串表达式中的大写字母转换成小

写字母,其他字符不变。

UPPER()将指定字符串表达式中的小写字母转换成大

写字母,其他字符不变。

【例3.15】大小写字母转换函数的使用。

?LOWER(/Xly2ABG,),UPPER(/n=l,),LEN(SPACE(8)),LEN("中文

VisualFoxPro6.0")

主窗口显示:xly2abgN=1819

4)删除字符串前后空格函数—

格式:RTRIM(<字符串表达式》)

LIRIM(〈字符串表达式》)

ALLTRIM(<字符串表达式》)

功能:RTRIMO删除字符串的尾部空格。RTRIM可以写成TRIM。

LTRIM()删除字符串的前导空格。

ALLTRIM()删除字符串中的前导和尾部空格。

【例3.16】RTRIMO、LTRIMO.ALLTRIM()函数的使用。

STORESPACE(1)+"TEST"+SPACE(3)TOSS

?RTRIM(SS)+LTRIM(SS)+ALLTRIM(SS)

主窗口显示:□TESTTESTEIIZIZTEST

?LEN(SS),LEN(RTRIM(SS)),LEN(LTRIM(SS)),LEN(ALLTRIM(SS))

主窗口显示:85744

■5)求子串位置函数

格式:AT(<字符串表达式1>,〈字符串表达式2>[,<数值表达式>])

ATC(〈字符串表达式1>,<字符串表达式2>[,<数值表达式>])

功能:如果〈字符串表达式1>是〈字符串表达式2>的子串,则返回〈字

符串表达式1>在〈字符串表达式2>中的起始位置;若不是子串,则

返回0。AT()的函数值为数值型,ATCO与AT()功能类似,但在子

串比较时不区分字母大小写。

<数值表达式)用于指明搜索<字符串表达式1>在<字符串表达式2》中是

第几次出现的,其默认值是1。

【例3.171AT().ATCO函数的使用。

STORE"ThisisVisualFoxPro"TOx

?AT("FOX",x),ATC("fox",x),AT("is",x,3),AT("xo",x)

主窗口显示:016100

6)取子串函数

格式:LEFT(<字符串表达式),<数值表达式))

RIGHT(<字符串表达式),<数值表达式》)

SUBSTR(<字符串表达式》,〈起始位置〉[,<数值表达式>])

功能:LEFT()从<字符串表达式)左边第一个字符开始截取子串。

RIGHT()从<字符串表达式)右边第一个字符开始截取子串,其子

串的长度由<数值表达式)的值所决定。若<数值表达式)的值大于字符串的长

度,则给出整个字符串。

°SUBSTR()是从〈字符串表达式〉中取出指定〈起始位置〉

开始截取的子串,子串的长度由<数值表达式)的值所决定。若<

数值表达式)省略,则截取的子串从〈起始位置〉开始到〈字符

串表达式〉的最后一个字符;若<起始位置>或<数值表达式)为0

,则函数值为空串。显然,SUBSTR函数可以代替LEFT函数和

RIGHT函数的功能。

【例3.18】取子串函数的使用。

STORE"GOODBYE!"TOX

?LEFT(X,2),SUBSTR(X,6,2)+SUBSTR(X,6),RIGHT(X,3)

主窗口显示:GOBYBYE!YE!

格式:OCCURS(<字符串表达式1>,<字符串表达式2>)

功能:返回第一个字符串在第二个字符串中出现的次数,

函数值为数值型。若第1个字符串不是第2个字符串的子串,则函

数值为0。

【例3.19】OCCURS()函数的使用。

STOREzabracadabra7TOs

?OCCURSCa\s),OCCURSCbz,s),OCCURS(zcz,s),OCCURSCez,s)

主窗口显示:5210

8)字符串替换函数

格式:STUFF(<字符串表达式1>,<起始位置),<长度),<字符串

表达式2>)

功能:用<字符串表达式2>值替换<字符串表达式1>中由<起始

位置>和<长度>指明的一个子串。替换和被替换的字符个数不一定相等。

如果<长度>值是0,<字符串表达式2>则插在<起始位置)指定的字符前面;

如果〈字符串表达式2>值是空串,那么<字符串表达式1>中由《起始位置》

和<长度》指明的子串被删去。

【例3.20]STUFF()函数的使用。

STORE〃中国重庆〃TOs

?STUFF(s,5,4,“北京F

主窗口显示:中国北京

格式:LIKE(〈字符串表达式1>,<字符串表达式2>)

功能:比较2个字符串对应位置上的字符,若对应字符都相匹

配,函数返回逻辑值真(.T.),否则返回逻辑值假(.F.)。〈字符串表

达式1>中可以包含通配符和“?”。号可与任何数目的字符

相匹配,“?”可以与任何单个字符相匹配。

【例3.21】字符串匹配函数的使用。

STORE"abc"TOx

STORE"abed"TOy

?LIKE("ab",x),LIKE("ab*",y),LIKE(x,y),LIKE("7b?",

x),LIKE("Abe",x)

主窗口显示:.F..T..F..T..F.

10)产生重复字符函数

格式:REPLICATE(<字符型表达式>,<数值型表达式》)

功能:重复给定字符串若干次,次数由数值型表达式的值决定。

【例3.22]REPLICTAE()函数的使用。

?REPLICATEC6)

主口显*******

11)宏替换函数

格式:&<字符型内存变量》[.]

功能:替换出字符型变量的内容,即&的值是变量中的字符串。

若<字符型变量)与后面的字符无空格分界,则&函数后的”必须有。

宏替换可以嵌套使用。

【例3.23】宏替换函数的使用。

m="245*SQRT(4)"

?INT(34.15+&m)&&等价于“?34.15+490.00”

主窗口显示:524

i=T'

j=,2'

xl2=,,Good"

Good="makeinchina"

?x&i.&j,&xl2&&等价于“?x&i&j,&xl2”

主窗口显示:Goodmakeinchina

日期型数据用dExp表示或日期时间型数据用tExp表示。

1)系统日期和系统时间函数

格式:DATE()

TIME()

DATETIME()

功能:DATE。返回当前系统日期,函数值为日期型。

TIME()返回当前系统时间,函数值为字符型。

DATETIME()返回当前系统日期时间,函数值为日期时间型。

【例3.24】系统日期和时间函数的使用。

?DATE(),TIME(),DATETIME()

主窗口显示:05/15/0615:47:1805/15/0603:47:18PM

'/W2)求年份、月份和天数函数

格式:YEAR(〈日期表达式>|〈日期时间表达式》)

MONTH(〈日期表达式>|<日期时间表达式》)

DAY(<日期表达式>|〈日期时间表达式》)

功能:YEAR()从指定的日期表达式或日期时间表达式中返回年份,以4位

敏值型数据表示(如2006年)。

MONTH()从指定的日期表达式或日期时间表达式中返回月份。

DAY()从指定的日期表达式或日期时间表达式中返回月里面的天数。

这3个函数的返回值都为数值型。

【例3.25】YEAR。、MONTH().DAY()函数的使用。

STORE{八2006-05-15}TOd

?YEAR(d),MONTH(d),DAY(d)

主窗口显示:2006515

3)求时、分和秒函数

格式:HOUR(<日期时间表达式》)

MINUTE«日期时间表达式〉)

SEC(<日期时间表达式》)

功能:HOUR()从指定日期时间表达式中返回小时数(24小时制)。

MINUTE()从指定日期时间表达式中返回分钟数。

SEC()从指定日期时间表达式中返回秒数。

这3个函数的返回值都为数值型。

【例3.26】时、分、秒函数的使用。

STORE{A2006-05-1503:30:45P}TOt

?HOUR(t),MINUTE(t),SEC(t)

主窗口显示:153045

格式:DOW(<日期型表达式》)

CDOW(<日期型表达式》)

功能:DOW()求出日期表达式值对应一周的第几天。星期日

为一周的第1天,星期六为一周的第7天。

CDOW()返回星期几的英文名称。

【例3.27]星期函数的使用。

?DATE()

05/15/06

?DOW(DATE()),CDOW(DATE())

主窗口显示:2Monday

3.3.4数据类型转换函数

在数据库应用的过程中,经常要将不同数据类型的数据进行相

应转换,满足实际应用的需要。VFP系统提供了若干个转换函数,较

好地解决了数据类型转换的问题。

1)字符串转换为数值函数

格式:丫人以<数字字符串))

功能:将数字字符串(包括正负号、小数点)转换为对应的数

值型数据。若字符串内出现非数字,字符就停止转换;若字符串的

首字符为非数字符,则返回值为0,但忽略前导空格。

【例3.28]VAL()函数的使用。

?VAL("XYZ"),VAL("-567.85"),VAL("34A79")

主窗口显示:0.00-567.8534.00

2)数值转换成字符串函数

格式:STR(<数值型表达式>\[,<长度>,\[,<小数位数>\]\])

功能:将〈数值型表达式)的值转换成字符串,转换时根据需要自

动四舍五入。转换后字符串的理想长度L应该是<数值型表达式>值的整数

部分的位数加上<小数位数)值,再加上一位小数点。如果〈长度〉值大于L,

则字符串加前导空格以满足规定的<长度》要求;如果<长度)值大于等于<

数值型表达式)值的整数部分位数(包括负号)但又小于L,则优先满足整

数部分而自动调整小数位数;如果<长度)值小于<数值型表达式>值的整数

部分位数,则返回一串星号(*)。〈小数位数)的默认值为0,<长度)的默

认值为10。

3

【例3.29]STR()函数的使用。

STORE-123.456TOn

?"n="+STR(n,8,3)

n=-123.456

?STR(n,9,2),STR(n,6,2),STR(n,3),STR(n,6),STR(n)

主窗口显示:123.46-123.5***123

□□□□□□-123

n=1234.587

?STR(n,10,2),STR(n,10,4),STR(n,7,2),STR(n,7),STR(n,3),

STR(n)

主窗口显示:口口口1234.59D1234.58701234.59

□□□1235***□□□□□□1235

3)字符与ASCH之间的转换函数

格式:ASC(v字符型表达式,)

CHR(〈数值型表达式〉)

功能:ASC()函数给出指定字符串最左边的一个字符的

ASCII码值。函数值为数值型。

CHR()函数将数值表达式的值作为ASCII码,转换为对

应的字符。函数值为字符型。

【例3.30】字符与ASCII码之间的转换函数的使用。

ch1="M"

ch2=CHR(ASC(ch1)+ASC("a")-ASC("A"))

?ch2

王茵口显小:m

此例说明,若ch1的值为某个大写字母,则利用求ch2的

表达式可求出对应的小写字母。

注意:在ASCH表中,字母是连续排列的,任何一个字

母其大小写ASCII码值之差是相等的。

格式:CTOD(<字符型表达式》)

CTOT(<字符型表达式》)

功能:CTOD()将(<字符型表达式))值转换成日期型数据。

CTOT()将(<字符型表达式》)值转换成日期时间型数据。

字符串中的日期部分格式要与SETDATETO命令设置的格式一

致。其中的年份可以用4位,也可以用2位。如果用2位,则世纪值由SET

CENTURYOFF语句指定。

【例3.31]CTOD()和CTOT()函数的使用。

SETDATETOYMD

SETCENTURYON&&显示日期时,用4位数显示年份

dl=CTOD("2006/05/15")

tl=CTOT(,,2006/05/15,,+""+TIMEO)

?dl,tl,CTOD("10/01/01"),CTOD("50/01/01")

主窗口显示:

2006/05/152006/05/1513:30:50PM2010/01/012050/01/01

5)日期或日期时间转换成字符串

格式:DTOC(<日期表达式>|〈日期时间表达式>[,1])

TTOC(<日期时间表达式>[,1])

功能:DTOC()将日期型数据或日期时间型数据的日期部分转换

成字符串。

TTOC()将日期时间型数据转换成字符串。

字符串中日期部分的格式与SETDATETO语句的设置和SET

CENTURYON|OFF(ON为4位数年份,OFF为2位数年份)语句的设置有关。

时间部分的格式受SETHOURSTO12|24语句的设置影响。

对DTOCO来说,如果使用选项1,则字符串的格式总是为

YYYYMMDD,共8个字符。对TTOCO来说,如果使用选项1,则字符串的格

式总是为YYYYMMDDHHMMSS,采用24h制,共14个字符。

【例3.32】DTOCO、TTOCO函数的使用。

STOREDATETIME()TOt

?t

05/16/06RKG*2]10:44:20AM

?DTOC(t),DTOC(t,1),TTOC(t),TTOC(t,1)

主窗口显示:05/16/062006051605/16/06EKG1310:44:20AM

20060516104420

.

3.3.5测试函数

在数据库操作过程中,需要了解操作对象的类型、状态

性。例如,要使用的文件是否存在、数据库当前记录的记录号、是否

访问到文件尾、检索是否成功、某工作区中记录指针所指的当前记录

是否有删除标记等信息。尤其是在运行应用程序时,常常需要根据测

试结果来决定下一步的处理方法或程序走向。

1)NULL值测试函数

格式:ISNULL(<表达式))

功能:判断表达式的运算结果是否为NULL值,若是NULL值返回

逻辑真(.T.),否则返回逻辑假(.F.)o

【例3.331ISNULLO函数的使用。

STORE.NULL.TOx

?x,ISNULL(x)

主窗口显示:.NULL..T.

旦一1

(2)空值测试函数

格式:EMPTY(<表达式))

功能:根据指定表达式的运算结果是否为“空”值,返回逻

辑真(.T.)或逻辑假(.F.)o

说明:①该函数中所指的“空”值与NULL值是两个不同的概念。

函数EMPTY(.NULL.)的返回值为逻辑假(.F.)。

②该函数自变量表达式的类型除了可以是数值型之外,还

可以是字符型、逻辑型、日期型等类型。不同类型数据的“空”

值,有不同的规定,如下表所示。

不同类型的数据“空”值的规定如下表

数据类型''空"值数据类型''空"值

数值型0双精度型0

字符型空串、空格、制表符、日期型空(如CTODC"1))

回车、换行

货币型0日期时间型空(如CTOT("”))

浮点型0逻辑型.F.

整型0备注字段空(无内容)

77

1

3)数据类型测试函数

格式:VARTYPE(<表达式>,<逻辑表达式》)

功能:测试<表达式)的类型,返回一个大写字母,函

数值为字符型。字母的含义如下表所示。

返回的字母数据类型返回的字母数据类型

C字符型或备G通用型

注型

N数值型、整D日期型

型、浮点型

或双精度型

Y货币型T日期时间型

L逻辑型XNull值

0对象型U未定义

.

1

若〈表达式)是一个数组,则根据第一个数组元素的类型返回字

符串。若〈表达式)的运算结果是NULL值,则根据<逻辑表达式》值决定是

否返回<表达式>的类型;如果<逻辑表达式)值为.T.,就返回〈表达式》

的原数据类型;如果<逻辑表达式)值为.F.或缺省,则返回X以表明<表达

式)的运算结果是NULL值。

【例3.34]VARTYPE()函数的使用。

X="AAA"

STORE10TOy

STORE.NULL.TOx

STORE100.22TOz

7VARTYPE(x),VARTYPE(X,.T.),VARTYPE(y),VARTYPE(z)

主窗口显示:XCNN

,

4)表头表尾的测试函数

系统对表中的记录是逐条进行处理的。对于一个打开的表文件来

说,在某一时刻只能处理一条记录。VFP为每一个打开的表设置了一个内

部使用的记录指针,它指向正在被操作的记录,该记录称为当前记录。

记录指针的作用是标识表的当前记录。

表文件的逻辑结构如下图所示。第一条记录称为首记录,记为

TOP,最后一条记录称为尾记录,记为BOTTOM。在首记录之前有一个文件

起始标识,称为BOF(BeginofFile);在尾记录的后面有一个文件结束

标识,称为E0F(EndofFile)o使用测试函数能够得到指针的位置。冈U

刚打开表时,记录指针总是指向首记录。

.

表文件的逻辑结构:

文件起始标识(BOF)

首记录(TOP)

第2个记录

打揖其第i个记录

尾记录(BOTTOM)

文件结束标志(EOF)

格式:BOF([<工作区号>|<别名>])

功能:测试指定或当前工作区中的表文件的记录指针是否指向文

件起始标识,若是返回逻辑真.T.,否则返回逻辑假.F.。

格式:EOF(,工作区号>|<别名>])

功能:测试指定或当前工作区中的表文件的记录指针是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论