第二章 VFP的常量变量和表达式.docx

上传人:b****3 文档编号:3445070 上传时间:2022-11-23 格式:DOCX 页数:18 大小:34.57KB
下载 相关 举报
第二章 VFP的常量变量和表达式.docx_第1页
第1页 / 共18页
第二章 VFP的常量变量和表达式.docx_第2页
第2页 / 共18页
第二章 VFP的常量变量和表达式.docx_第3页
第3页 / 共18页
第二章 VFP的常量变量和表达式.docx_第4页
第4页 / 共18页
第二章 VFP的常量变量和表达式.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

第二章 VFP的常量变量和表达式.docx

《第二章 VFP的常量变量和表达式.docx》由会员分享,可在线阅读,更多相关《第二章 VFP的常量变量和表达式.docx(18页珍藏版)》请在冰豆网上搜索。

第二章 VFP的常量变量和表达式.docx

第二章VFP的常量变量和表达式

第二章VFP的常量、变量和表达式

2.1常量1

2.2变量2

2.3表达式15

2.1常量

 常量就是固定不变的数据,VFP主要支持六种类型的常数:

字符常数、日期常数、逻辑常数、数值常数、货币常数和日期时间常数。

 

 VFP有两种类型的数值:

N(数值)和F(浮点数)。

全部数值常数只是N型(不是F型),即是整型数和实型数(包含小数的为实型数)。

VFP数值的有效位数不能超过16位。

例如:

-8.63,936875等。

其数值范围是-.9999999999E+19至.9999999999E+20(内存中8个字节,表中1到20个字节)。

 

 字符常数(有时叫字符串),包括所有可打印的ASCII字符以及空格符,还包括所有汉字系统可打印的汉字和各种符号,使用时须用单引号或双引号或方括号括起来。

例如:

[迎新春佳节],"Single数54","成都:

ˋ十一ˊ庆祝会"等。

VFP的字符常数有“任何字符均合法”的特点,比如它可以插入二进制0进入字串(不象大多数xBASE语言以二进制0作为字符串的结束),从而保持了字符串中实际字符数的情况,它还可以键入带音乐符号的字符和图形字符等。

VFP可达2G字符,由引号符引上。

 

 VFP的日期常数以8位mm/dd/yy即月/日/年的形式出现,比如06/25/95,也可以yy.mm.dd等多种形式出现。

在VFP中,日期常数除可以多种形式出现外,还可象在字符串中使用引号的方式,用花括号来规定:

{01/23/84}。

日期常数中三个整数的解释取决于SETDATE的当前设置,例如常数1-2-3的值,当设置为TOAMERICAN(美国式)时,是3年的第1月第2天;当设置为TOFRENCH(法国式)时,是3年第2月第1天;当设置为JAPAN(日本式)时,是1年第2月第3天。

当键入了一个错误的日期时,比如{01/45/84},VFP将返回一个空白日期{//}。

空白日期也可用括号括上空格来表示,如{}。

 

 逻辑常数真为.T.(.t.)或.Y.(.y.),假为.F.(.f.)或.N.(.n.)。

字母前后的圆点是必须的,取消了会与T变量等混淆,但大小写字母不重要,.T.与.t.等效。

 

 日期时间常数是按月、日、年和时间排列的年代日期数据,其值的范围是01/01/0001到12/31/9999,加上00:

00:

00a.m到11:

59:

59pm。

 <>货币常数

货币常数是金融量常数其值范围是$-922337203685477.5807到$922337203685477.5807。

另外还有Variant型,它可以包括VFP任何数据型和null(空)值。

一旦一个值被存贮到一个Variant,则此Variant的数据类型便被假定为它包含的该值的数据型。

在语言的语句中Variant以e标示。

2.2变量

 变量就是其值可以改变的数据项,它包括字段变量(field)和内存变量(memvar)两种。

内存变量又包括一般内存变量、系统内存变量和数组变量。

 

2.2.1字段变量

 表中的每一个字段就是一个字段变量,字段名就是字段变量的变量名。

字段变量的当前值等于表中当前记录该字段所对应的内容。

字段变量更进一步的值随着当前记录号的改变而改变。

打开表,该表的所有字段变量产生;关闭表,该表的所有字段变量同时从内存消失,但随着表,记录的字段仍存在于磁盘中。

例2.1:

USERS&&打开RS.DBF表,(表结构见例1.3)

?

姓名,职称

王权助工

?

"姓名","职称"

姓名职称

USE&&关闭RS表

?

姓名,职称

该变量未找到

上面用了一个命令“?

”,它是用来显示表达式值的命令。

 命令格式:

?

/?

?

[<表达式表>]

 作用:

计算?

/?

?

后的表达式值并显示出来。

单个?

命令从当前光标所在行下一行起始位置显示,?

?

命令从当前光标所在位置开始显示,不带任选项的?

将产生一个换行。

VFP还有个命令?

?

?

,它允许用户将输出值直接送往打印机。

 说明:

执行接通打印机命令(SETPRINTON)后,?

/?

?

的表达式的值便可在打印机上打印出来,在执行命令前按CTRL+P也能实现联机打印。

此命令也能用于显示当前记录的备注字段的内容。

格式:

?

/?

?

<备注型字段名>

例2.2:

显示RS表中第一条记录的简介备注字段的内容。

USERS

简介

1998年毕业于四川大学,2001年调我单位工作。

&&“简介”这个备注字段的内容

 表文件在使用前首先要用USE<文件名>打开,在VFP中一般可以同时打开255个表(实际上是受内存限制,内存大还可更多),为使它们之间互不干扰,系统允许开辟32767个工作区(前10个工作区1至10习惯用A至J表示,工作区11到32767中指定的别名是w11到w32767)。

用户可以在不同工作区中打开不同的表文件,一个工作区只能打开一个表。

选择工作区命令如下:

 

 格式:

SELECT<工作区号>|<别名>

 作用:

激活工作区

 说明:

当VFP等启动时,系统默认的工作区是1号工作区,所以到目前为止表操作均在1号工作区中进行。

用户可以使用子句<工作区号>中的数值指定工作区号,如果工作区号为0,那么选择当前没有被使用的序号最小的工作区为当前工作区。

<别名>是在打开表文件时由ALIAS任选项指定的名字,命令为:

 

USE<表文件名>ALIAS<别名>

如果未用ALIAS任选项,则表文件就是它的别名,也可以用工作区名作为已在该工作区中打开的表文件的别名。

在使用多工作区时,最后用SELECT命令选择的工作区为当前工作区(又称主工作区),其它工作区为非当前工作区(又称辅工作区)。

进入系统后,如果不选择工作区,1号工作区则为当前工作区,对表的所有操作都在这当前工作区进行。

其它任何工作区中的表字段均可以被VFP的命令和函数访问。

要访问非当前工作区中的已打开的表字段时,使用下面格式(在字段名前冠<工作区>或<别名>的前缀):

 

 <别名>.<字段名>或<别名>→<字段名>

 <工作区名>.<字段名>或<工作区名>→<字段名>

 另外,要注意的是,在不同工作区中打开的表都有其相应的记录指针,当前表记录指针的移动不会影响其它工作区中表记录指针的变化(只有在当前工作区与其它几个非当前工作区建立关联后,其它几个非当前工作区中的记录指针才能自动作相应的移动,多工作区的关联问题详见第三章),非当前工作区中的记录指针需要移动时,应用SELECT使该工作区变成当前工作区,然后移动记录指针到指定记录。

例2.3:

将1.1节图1-2中通讯地址表A1和用户订单表B1内用户号为0002的姓名、地址、商品号,总价显示出来。

SELECT1

USEA1

SELECT3

USEB1ALIASG订单

SELECTA&&A工作区即1号工作区

GO3&&指向3号记录,即A1表中用户号为0002的记录

SELECTG订单&&别名为G订单的工作区,即3号工作区

GO2&&指向2号记录,即B1表中用户号为0002的记录

SELECT1

DI     DISPLAY姓名,地址,C→商品号,C.总价     &&C→商品号,C.总价为3号工作区中商品号,;

Record#姓名地址C→商品号C.总价

3郭亮457信箱14B1500.00

顺便说明一下,关闭多个工作区中表文件,可以分别切换各已经打开表文件的工作区为当前工作区,然后用USE命令一个一个地关闭,例如:

SELECT1

USE

SELECTC

USE

也可以用CLOSEDATABASE一次完成关闭所有工作区的全部表。

2.2.2内存变量

每个内存变量数据对象与字段变量一样具有一定的属性:

标识符(变量的名字)、型(例如字符型或数字型)、值(当前内容)、宽度。

标识符是用来识别变量的符号,VFP规定标识符可以由任何数量的字母字符、数字字符或下划线(_)组成,但仅是前10个字符(一个汉字为两个字符)有效,建议最多用8个字符,而且必须由一个字母字符或汉字开头,标识符的大小写字母等效。

内存变量名一般不要与正打开的表的字段名同名,否则使用该内存变量时应在变量名前冠以前缀"M→",但对该内存变量的赋值不能加前缀。

字段在一个特定的.DBF文件中有固定的宽度和型(备注型字段是特殊情况)。

VFP的内存变量的型则是“动态型”,即在程序执行期间当变量建立时才赋予。

这个特点给了早期FoxPro无意的面向对象的风格。

尽管内存变量的型可以在程序执行中变化,但在任何瞬间一个标志的对象仅有一个型。

VFP内存变量主要有如下的型:

AArray(数组型)            Ccharacter(字符型)

DData(日期型)            Llogical(逻辑型)

NNumber(数字型)           YCurrency(货币符号型)

TDatetime(日期时间型)

数据对象的型决定了对象可以承担值的领域。

C、D、L、Y、T、N型将在3.1.1节详述,这里不再赘述。

另外还有Variant型,上节已述。

内存变量是现存的VFP数据类型的子集,此外的其它数据类型只存在于表的字段中。

内存变量通常在VFP程序执行时建立,程序完成后又消失,此外在内存变量还有生命期限范围—级的问题,没有此级权利的内存变量不起作用。

内存变量不象字段存在于表中具有永久性,即程序未运行时也保留值。

VFP表文件中的字段变量,只要在.DBF文件被USE(打开)时,便是活动的,这个特点区别于将变量的范围限制到程序模块的其它编程语言,而VFP的内存变量显示出象传统语言中的变量。

VFP默认1024个内存变量,但可多达允许65000个内存变量。

用户可以通过设置系统配置文件CONFIG.FPW中的MVCOUNT参数(128~65000)进行改变系统默认值,但实际允许使用的个数受内存空间的限制。

一种特殊的内存变量叫系统内存变量(systemmemory),它是用来保持含有信息(例如,文本报表应打印的拷贝数等)的系统变量。

可通过一个前导下划线(例如,_pcopies)来识别它。

如果用户用前导下划线来建立标志符,就会引起混淆。

可以象使用普通内存变量那样使用系统内存变量,但是因为它们由VFP预先定义好了,所以一个系统内存变量的属性是固定的。

例如:

numcopy=2&&建立叫numcopy的内存变量为N型。

_pcopies=2&&赋值于已存在的系统内存变量。

这两者都是正确的,因为_pcopies为N型,但像下面的赋值就仅有普通内存变量是正确的了:

numcopy="Hello"&&改变变量的型为C型

_pcopies="Hello"&&错误,不能改变为C型

下面描述几个使用内存变量的VFP命令。

它们可以自动建立内存变量或者释放(包括直接释放和释放后用希望的属性重建)内存变量。

各类内存变量都可以显示、释放或写到一个特定的内存变量文件中。

1.建立内存变量

建立内存变量的三种方法是:

赋值、执行一个操作内存变量的命令或者通过规定一个内存变量的级(如在PUBLIC中)来建立内存变量。

最初的赋值命令在dBASEⅡ是STORE。

命令格式:

STORE<表达式>TO<内存变量表>

更简单的赋值方法是使用等号(如象BASIC或C中使用的那样),这种方法从dBASEⅢ开始便有了,它让用户任选使用,并已溶入全部xBASE语言,包括FoxBASE+和FoxPro。

命令格式:

[<内存变量>]=<表达式>

例2.4:

B=5&&数值5赋给变量B

?

B

5

STOREB+2TOFJ&&将“B+2”表达式的值存入FJ中

?

FJ

7

学校="成都电子机械高等专科学校"&&将字符串"成都电子机械高等专科学校"存入变量学校中

STORE"计算机"TO系,XI&&将字符串"计算机"存入变量系和XI中

?

学校,系,XI,FJ

成都电子机械高等专科学校计算机计算机7

然而,最初的赋值方法(即用STORE命令)并没有过时,因为它有两个有用的特性“=”号赋值型式不具有:

首先可以用它规定也是命令的标志符(记住,VFP没有真正的保留字),其次,可以一次初始化变量列表。

例如:

STORE5TOCREATE&&而CREATE=5就出错,因为CREATE放在语句前面便看成命令了。

STORE0TOa,b,c,d,e&&一次赋值变量列表。

注意:

两种赋值方法都不能将值赋到.DBF表字段。

VFP也可以用这两种赋值方法去初始化一个数组中的每个元素,不用下标表达式,仅需数组相同的名字便可。

例2.5:

DECLARESY[2,3]&&建立一个2乘3数组

SY=8&&赋值8到全部6个元素。

Store8ToSY&&赋值8到全部6个元素。

数组的全部6个元素都设置为8。

但是,如果VFP兼容选择项设置为dBASEIV(SETCOMPATIBILITYDB4),上面相同的语句则用赋值为8的名叫SY的内存变量代替了数组。

用户可能已经注意到赋值符号“=”左边的<内存变量>是任选的。

在某些环境下,想调用一个函数,但并不想存贮其返回值,假如调用函数CAPSLOCK()设置一个值:

=CAPSLOCK(OLdCaps)

则在这种情况下,CAPSLOCK()设置了CAPSLOCK键状态,但却直接放弃了返回值。

VFP这种语句格式任何版本的dBASE都不支持。

还有几个VFP命令对内存变量赋值。

象直接内存变量赋值语句一样,如果规定的内存变量已存在,则它的旧定义被去掉。

如果不存在,则建立它。

下面的命令建立内存变量(详见后面的有关章节)。

ACCEPTAVERAGE        CALCULATECOUNT

DECLARE*INPUT           PARAMETERS*PRIVATE*

PUBLIC*STORE          SUMWAIT

用星号(*)标记的命令可以未知属性建立内存变量。

例如:

当PUBLIC命令规定一个不存在的内存变量时,它建立一个具有值.F.的逻辑型内存变量。

这些属性将在内存变量的首次赋值时改变。

2.释放内存变量

RELEASE命令释放(删除)内存变量。

从概念上讲,RELEASE意味着一个标志符在某种内存变量命名使用中的免除。

RELEASE命令有如下格式:

RELEASE

ALL[LIKE|EXCEPT<结构>]|<内存变量表>

若选<内存变量表>,则仅删除清单中指定的内存变量。

若选ALL[LIKE|EXCEPT<结

构>],则按如下条件删除内存变量:

ALLLIKE<结构>表示把符合结构中所指定的内存变量删除。

ALLEXCEPT<结构>表示把除了符合结构中所指定的其它所有内存变量清除。

以上格式支持释放(清除)一个、某些或全部内存变量。

例2.6:

RELEASEPhoneNO&&删除一个内存变量。

RELEASEName,PhoneNO&&删除两个(某些)内存变量。

RELEASEALLLIKEN?

&&删除首字符为N的双字母内存变量。

RELEASEALLEXCEPTS*&&删除除了首字符为S的所有内存变量。

RELEASEALL&&删除全部内存变量。

RELEASEALL命令释放在当前级能见的全部内存变量。

就是说,如果一个子程序发出一个RELEASEALL命令,在VFP命令窗口(CommandWindow)中定义的内存变量仍然存在。

CLEARMEMORY命令释放全部内存变量,不用考虑它们定义的级(即命令窗口中的也删除);CLEARALL命令(包括了CLEARMEMORY)在关闭所有文件的同时清除所有内存变量。

<结构>是一个可以包括通配符?

和*的标志符。

如同在MS-DOS下一样:

匹配一单字符,而*匹配任何字符串顺序。

这样,在前面的例子中,N?

匹配以N作为第一个字母的两个字母的标志符;而S*匹配以S开始的任何标志符,不考虑长度。

VFP编程者经常选择有一定意义的字母作为开头去命名内存变量。

例如,全部公共(Public)内存变量可以P开头,全部临时内存变量可以T开头。

这不仅增加了程序的可读性,也使以下的命令释放全部临时内存变量更方便:

RELEASEALLLIKET*

3.显示内存变量

可以用DISPLAYMEMORY[TOPRINT]或LISTMEMORY[TOPRINT]命令显示内存变量标志符和它们的属性以及当前值的列表(DISPLAY在各屏或窗口暂停,其余与LIST等效)。

选[TOPRINT]任选项可把这些内容打印出来。

例2.7:

用FoxPro的LISTMEMORTY命令显示全内存变量的当前值,包括系统内存变量,并列出全部菜单、菜单笺、下拉菜单和逻辑窗口:

NAME="成都小狐狸软件室"

aunt=6868.88

number=3456

value=1/4

Date1={04/28/96}

DECLAREAray[3]

Aray[2]="星期五"

Aray[3]=58

DOTEST

这段程序产生了LISTMEMORY在下面表2-1所示出的输出。

TEST.PRG子程序如下:

PRIVATEDATE1

B7=″Hello″

date1=01/25/96

LISTMEMORY

表2-1LISTMEMORY命令的输出

NAMEPubC"成都小狐狸软件室"

AMOUNTPubN6868.88(6868.88000000)

NUMBERPubN3456(3456.00000000)

VALUEPubN0.25(0.25000000)

DATE1(hid)D04/28/96

ARAYPubA

(1)L.F.

(2)C"星期五"

(3)N58(58.00000000)

B7PrivC"Hello"

DATE1PrivD01/25/96

8个内存变量被指定48个字节已用

248个内存变量是可用的

打印系统内存变量

_ALIGNMENTPubC"LEFT"

_BOXPubL.T.

_CALCMEMPubN0.00(0.00000000)

_TEXTPubN-1(-1.00000000)

_THROTTLEPubN0.00(0.00000000)

_WRAPPubL.F.

49个系统内存变量被指定;菜单和菜单笺定义;0个菜单被指定;弹出菜单定义;RUN707字节;1个弹出菜单被指定;窗口定义;0个窗口被指定.

 各内存变量以下面的属性列于一个单行中。

(1)标志符内存变量的名字,以大写字母示出。

(2)级内存变量以Pub(public),Priv(private),hid(hidden),或(数组行元素)表示。

public(公共)内存变量对全部级别均可见。

private(私用)内存变量仅对当前及下面级别可见。

标记hid(隐藏)的内存变量在比宣布它们为private(私用)变量的级再高一级别定义。

组成数组元素的内存变量用元素号或行和列号标记。

(3)型内存变量的型可以是A(数组型)、C(字符型)、D(日期型)、L(逻辑型)或N(数字型)等。

内存变量不能是M(备注型)。

(4)值内存量的当前值。

(5)一个定义块(block)如果一个内存变量在一个程序(而不是在VFP的命令窗口)中定义,则过程名会显示出。

在一个程序中定义的内存变量(而不是从命令窗口定义的内存变量)默认划归为private(私用)内存变量,而在命令窗口中建立的内存变量默认为public(公用)内存变量。

程序中定义的内存变量在程序Return(返回)时,自动RELEASE(释放)。

例如,在这个变量列表中示出了两个不同值的DATE1,前一个DATE1在命令窗口中建立,属于公用内存变量,后一个DATE1在程序TEST.PRG中建立,属于私用变量。

TEST.PRG中的PRIVATEDATE1语句隐去了第一个DATE1,所以后面的赋值语句用一个不同的值(它也可以有不同的型)建立了一个新内存变量。

当TEST.PRG返回时,本地版的DATE1被释放,且原始的DATE1再次“可见”。

4.内存变量文件

内存变量是在内存中建立的,一旦关机或掉电以及退出系统,内存变量就不复存在,因此需要把用到的内存变量保存到磁盘上。

用户可以用SAVE命令写一个、某些或全部内存变量到一个磁盘文件(缺省后缀为.MEM)。

反之,RESTORE语句从一个.MEM文件读内存变量描述。

(1)SAVE命令如下:

格式:

SAVETO<文件名>[ALLLIKE/EXCEPT<结构>]

若未给出任选项,将把当前内存中所有的内存变量(它的名字和值)存于指定的文件名中,若给出任选项,则把符合指定要求的内存变量保存起来,此选项的意义与RELEASE命令中选项的意义相同。

发出SAVE命令时,如果一个本地内存变量隐去了另外在较高级定义的内存变量,则只存贮本地内存变量。

(2)RESTORE命令

RESTORE命令首先执行了一个CLEARMEMORY命令,删去全部当前内存变量,然后读存贮在指定MEM文件中的内存变量描述。

命令是:

格式:

RESTOREFROM<文件名>[ADDITIVE]

任选项ADDITIVE关键字忽略此命令先执行CLEARMEMORY这一步。

发出RESTORE命令时的程序级便是内存变量的程序级。

换言之,如果在命令窗口RESTORE,在MEM文件中所描述的内存变量则建立为公共变量。

如果RESTORE命令由程序发出,则所建立的内存变量作为私用内存变量(除非标志符的公共或私用状态在RESTORE前已由PUBLIC或PRIVATE命令明显设置)。

VFP还有存屏命令,能将屏幕存到一个内存变量之后,可再用上面的命令将之存为内存变量文件,以便以后恢复。

格式:

RESTORESCREEN[TO<内存变量>]

功能:

在文本方式把当前整个屏幕上的内容保存到<内存变量>中,不选任选项,则保存到特定的内存缓冲区中(只能保存一幅屏幕内容)。

当需要恢复屏幕内容时可用下列命令:

格式:

RESTORESCREEN[FROM<内存变量>]

不选任选项,则从特定的内存缓冲区中恢复。

例2.8:

SAVESCREENTOSC&&将屏幕存SC内存变量

SAVETOMF1&&将所有内存变量存入MF1文件,包括SC内存变量

RESTOREFROMMF1&&恢复内存变量

CLEAR&&把整个屏幕清除

RESTORESCREENFROMSC&&恢复屏幕

对比一下是否与清屏前相同。

2.2.3数组

 数组变量是从dBASEⅡ问世以来,xBASE编程人员一直梦寐以求的东西。

以前只能用宏替换去访问一个数组元素,现在用惯了数组变量的用户可能觉得可笑,但的确是事实。

Clipper(美国另外一种

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1