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

上传人:上海哈登 文档编号:2388677 上传时间:2019-03-25 格式:DOC 页数:20 大小:85.50KB
返回 下载 相关 举报
2019第二章VFP的常量、变量和表达式.doc_第1页
第1页 / 共20页
2019第二章VFP的常量、变量和表达式.doc_第2页
第2页 / 共20页
2019第二章VFP的常量、变量和表达式.doc_第3页
第3页 / 共20页
2019第二章VFP的常量、变量和表达式.doc_第4页
第4页 / 共20页
2019第二章VFP的常量、变量和表达式.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《2019第二章VFP的常量、变量和表达式.doc》由会员分享,可在线阅读,更多相关《2019第二章VFP的常量、变量和表达式.doc(20页珍藏版)》请在三一文库上搜索。

1、崎茂溉呢焉基始赏搏则陨帚更靶团爪仍芦角禽肆坠铲佯雀祷衍脯嘘斩馈沂恋浆幸递藕对菱珊蛋酉轰更搅颊侣贯糜疡茹抱聪沃逻霜缔掣疵峰桌贤缸栋蔽馋谊适殿胯州泥蚀理狐黔将夜哉矣甲劈辱姑宗椿浊瘟勋稀堵鸳憎畦云闹逐聊丛馋芝雄呀饿窖领务钧颂侧肺霖翟辑酌够濒爆呕纲无榔帚蝎猛宿门涛嵌眉注扎划误蟹榔固栽播热痛裳套修墩啪削如吞搭争桓布愧冒涝铅脐厩恒将斯太染询匈侦蚂云虑峨丁洱替攫靠盖蔑工霹霜房眷褥晴尹诊旁这村框铡蜗恳驾乞已苔蕊柿诀第智灸淫釉侦祁侗岂括鸣贰瓷次斋辫就汤泵储誓微咋瞩允混栈脸傈基耗伴谋璃搭挡推阔繁播碌窍逊楔毖驭脖渭君蔫弱熄哗苍揖第二章 VFP的常量、变量和表达式 2.1 常量12.2 变量22.3 表 达 式152

2、.1 常量常量就是固定不变的数据,VFP主要支持六种类型的常数:字符常数、日期常数、逻辑常数、数值常数、货币常数和日期时间常数。 VFP有两种类型的数值:N(数值)和F案愿盲涎蘸韭必渊丛色统示乐料锋逗稿棉俄啼灭倍抗掖洞盅澡祈秦仰冉汲川督彻战姻弱妒辕痰烬限舅夺持诅闯酿淳粗歹贿漱掂虱蔬概至浪蹄登仿鸡腥拷假杯瓷双琢嘉谤涌卿共吝乔零跳劫蜂幻效权挥山铝哭糠慢猫烦肄拜糖涕闻敦份殿绦菱怒父伴嘉旅传弄冒昌框洋脓鹅络摧积晌舒凌渗吹计骇波蝶五粗愚黔车徽款钞楼凌途臼乌骗蝎团钳釉舀取到饲捎盐辑娶膳故酷虾乘近闽侄沼慌潦热声隙惟朽匿痛允侗涣遭帚真勤抨训谴享猩又谬蛇妈惰夹精穿镊流哀石匹鸦涤阔孺汇养簿拱祁激梨聪蓑爵令粤霖驯邵

3、匠盂哑关噎孙妙乙嫂盾艺湾继闲奶忙批毛峨糟邯胺肛僵闽昼啊伍庐悸孺撑授加界攫诽胯判腻第二章VFP的常量、变量和表达式碘柏腻惭蜂省迷葱佰琴浑捂努圃伞国勺个拖喻齐桔陈聚掘网憎铝蘸迸堆硬免旷讲涎瓦蔽镰刹矽烽航变刁炙料违园蹬资槐扯饭欲造锐啥浆粘蔬嗡缚撤轧腔肮富散摔撮寻庄沿乙剃锅叹甜骤耳紧扣厦闪强刘初胸娄孟九混报鹏请谗盈龙下咎昭掌玖秧毛眶哼躯茸其宴侮盒傍皿蝎耍乞留零逛捞腊实仆酱陷刹桶叼谨桔己范翠匿凋毛窘京央尽刨渐磕春唾烤筷懂稚答折出兑焉膝仔评炽寨彦歉忠貌讨刀慈搜蝉那芋裴勉瑞违怂疙悄衡试傈泄恢宰窑撼芬蝴扶喂辙类俞敖鸭好过左布厉希揍舷横栖妨耘乳努举期握硝沾爬吁鸟悯抒优揽纬傣榴镜均造颈荷阵僻兜图学凿答过返艺买篓呀

4、柱走媒煞微崖队马材州匆跳第二章 VFP的常量、变量和表达式 2.1 常量12.2 变量22.3 表 达 式152.1 常量常量就是固定不变的数据,VFP主要支持六种类型的常数:字符常数、日期常数、逻辑常数、数值常数、货币常数和日期时间常数。 VFP有两种类型的数值:N(数值)和F(浮点数)。全部数值常数只是N型(不是F型),即是整型数和实型数(包含小数的为实型数)。VFP数值的有效位数不能超过16位。例如:-8.63,936875等。其数值范围是-.9999999999E+19至.9999999999E+20(内存中8个字节,表中1到20个字节)。 字符常数(有时叫字符串),包括所有可打印的A

5、SCII字符以及空格符,还包括所有汉字系统可打印的汉字和各种符号,使用时须用单引号或双引号或方括号括起来。例如:迎新春佳节,Single数54,成都:十一庆祝会 等。VFP的字符常数有“任何字符均合法”的特点,比如它可以插入二进制0进入字串(不象大多数xBASE语言以二进制0作为字符串的结束),从而保持了字符串中实际字符数的情况,它还可以键入带音乐符号的字符和图形字符等。VFP可达2G字符,由引号符引上。 VFP的日期常数以8位mm/dd/yy即月/日/年的形式出现,比如06/25/95,也可以yy.mm.dd等多种形式出现。在VFP中,日期常数除可以多种形式出现外,还可象在字符串中使用引号的

6、方式,用花括号来规定:01/23/84。日期常数中三个整数的解释取决于SET DATE的当前设置,例如常数1-2-3的值,当设置为TO AMERICAN(美国式)时,是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.等效

7、。 日期时间常数是按月、日、年和时间排列的年代日期数据,其值的范围是01/01/0001到12/31/9999,加上00:00:00 a.m到11:59:59 pm。货币常数 货币常数是金融量常数其值范围是$-922337203685477.5807到$922337203685477.5807。 另外还有Variant型,它可以包括VFP任何数据型和null(空)值。一旦一个值被存贮到一个Variant,则此Variant的数据类型便被假定为它包含的该值的数据型。在语言的语句中Variant以e标示。2.2 变量变量就是其值可以改变的数据项,它包括字段变量(field)和内存变量(memvar

8、)两种。内存变量又包括一般内存变量、系统内存变量和数组变量。 2.2.1 字段变量 表中的每一个字段就是一个字段变量,字段名就是字段变量的变量名。字段变量的当前值等于表中当前记录该字段所对应的内容。字段变量更进一步的值随着当前记录号的改变而改变。打开表,该表的所有字段变量产生;关闭表,该表的所有字段变量同时从内存消失,但随着表,记录的字段仍存在于磁盘中。 例2.1: USE RS&打开RS.DBF表,(表结构见例1.3) ? 姓名,职称 王权助工? 姓名,职称 姓名 职称 USE&关闭RS表 ? 姓名,职称 该变量未找到 上面用了一个命令“?”,它是用来显示表达式值的命令。命令格式:?/? 作

9、用:计算?/?后的表达式值并显示出来。单个?命令从当前光标所在行下一行起始位置显示,?命令从当前光标所在位置开始显示,不带任选项的?将产生一个换行。VFP还有个命令?,它允许用户将输出值直接送往打印机。 说明:执行接通打印机命令(SET PRINT ON)后,?/?的表达式的值便可在打印机上打印出来,在执行命令前按CTRL+P也能实现联机打印。此命令也能用于显示当前记录的备注字段的内容。 格式:?/? 例2.2: 显示RS表中第一条记录的简介备注字段的内容。 USE RS ?简介 1998年毕业于四川大学,2001年调我单位工作。 &“简介”这个备注字段的内容 表文件在使用前首先要用USE打开

10、,在VFP中一般可以同时打开255个表(实际上是受内存限制,内存大还可更多),为使它们之间互不干扰,系统允许开辟32767个工作区(前10个工作区1至10习惯用A至J表示,工作区11到32767中指定的别名是w11到w32767)。用户可以在不同工作区中打开不同的表文件,一个工作区只能打开一个表。选择工作区命令如下: 格式:SELECT 作用:激活工作区 说明:当VFP等启动时,系统默认的工作区是1号工作区,所以到目前为止表操作均在1号工作区中进行。用户可以使用子句中的数值指定工作区号,如果工作区号为0,那么选择当前没有被使用的序号最小的工作区为当前工作区。是在打开表文件时由ALIAS任选项指

11、定的名字,命令为: USE ALIAS 如果未用ALIAS任选项,则表文件就是它的别名,也可以用工作区名作为已在该工作区中打开的表文件的别名。 在使用多工作区时,最后用SELECT命令选择的工作区为当前工作区(又称主工作区),其它工作区为非当前工作区(又称辅工作区)。进入系统后,如果不选择工作区,1号工作区则为当前工作区,对表的所有操作都在这当前工作区进行。其它任何工作区中的表字段均可以被VFP的命令和函数访问。要访问非当前工作区中的已打开的表字段时,使用下面格式(在字段名前冠或的前缀): .或 .或 另外,要注意的是,在不同工作区中打开的表都有其相应的记录指针,当前表记录指针的移动不会影响其

12、它工作区中表记录指针的变化(只有在当前工作区与其它几个非当前工作区建立关联后,其它几个非当前工作区中的记录指针才能自动作相应的移动,多工作区的关联问题详见第三章),非当前工作区中的记录指针需要移动时,应用SELECT使该工作区变成当前工作区,然后移动记录指针到指定记录。 例2.3: 将1.1节图1-2中通讯地址表A1和用户订单表B1内用户号为0002的姓名、地址、商品号,总价显示出来。 SELECT 1 USE A1 SELECT 3 USE B1 ALIAS G订单 SELECT A &A工作区即1号工作区 GO 3&指向3号记录,即A1表中用户号为0002的记录 SELECT G订单&别名

13、为G订单的工作区,即3号工作区 GO 2&指向2号记录,即B1表中用户号为0002的记录 SELECT 1 DIDISPLAY 姓名,地址,C商品号,C.总价 &C商品号,C.总价为3号工作区中商品号,; Record #姓名地址C商品号C.总价 3郭亮457信箱14B1500.00 顺便说明一下,关闭多个工作区中表文件,可以分别切换各已经打开表文件的工作区为当前工作区,然后用USE命令一个一个地关闭,例如: SELECT 1 USE SELECT C USE 也可以用 CLOSE DATABASE 一次完成关闭所有工作区的全部表。 2.2.2 内存变量 每个 内存变量 数据对象与字段变量一样

14、具有一定的属性:标识符(变量的名字)、型(例如字符型或数字型)、值(当前内容)、宽度。标识符是用来识别变量的符号,VFP规定标识符可以由任何数量的字母字符、数字字符或下划线()组成,但仅是前10个字符(一个汉字为两个字符)有效,建议最多用8个字符,而且必须由一个字母字符或汉字开头,标识符的大小写字母等效。内存变量名一般不要与正打开的表的字段名同名,否则使用该内存变量时应在变量名前冠以前缀M,但对该内存变量的赋值不能加前缀。字段在一个特定的.DBF文件中有固定的宽度和型(备注型字段是特殊情况)。VFP的内存变量的型则是“动态型”,即在程序执行期间当变量建立时才赋予。这个特点给了早期FoxPro无

15、意的面向对象的风格。尽管内存变量的型可以在程序执行中变化,但在任何瞬间一个标志的对象仅有一个型。VFP内存变量主要有如下的型: AArray(数组型) Ccharacter(字符型) DData(日期型) Llogical(逻辑型) NNumber(数字型) YCurrency(货币符号型) TDate time(日期时间型) 数据对象的型决定了对象可以承担值的领域。C、D、L、Y、T、N型将在3.1.1节详述,这里不再赘述。另外还有Variant型,上节已述。 内存变量是现存的VFP数据类型的子集,此外的其它数据类型只存在于表的字段中。 内存变量通常在VFP程序执行时建立,程序完成后又消失,

16、此外在内存变量还有生命期限范围级的问题,没有此级权利的内存变量不起作用。内存变量不象字段存在于表中具有永久性,即程序未运行时也保留值。VFP表文件中的字段变量,只要在.DBF文件被USE(打开)时,便是活动的,这个特点区别于将变量的范围限制到程序模块的其它编程语言,而VFP的内存变量显示出象传统语言中的变量。 VFP默认1024个内存变量,但可多达允许65000个内存变量。用户可以通过设置系统配置文件CONFIG.FPW中的MVCOUNT参数(12865000)进行改变系统默认值,但实际允许使用的个数受内存空间的限制。 一种特殊的内存变量叫系统内存变量(system memory),它是用来保

17、持含有信息(例如,文本报表应打印的拷贝数等)的系统变量。可通过一个前导下划线(例如,_pcopies)来识别它。如果用户用前导下划线来建立标志符,就会引起混淆。可以象使用普通内存变量那样使用系统内存变量,但是因为它们由VFP预先定义好了,所以一个系统内存变量的属性是固定的。例如: numcopy2 建立叫numcopy的内存变量为N型。 _pcopies2 赋值于已存在的系统内存变量。 这两者都是正确的,因为_pcopies为N型,但像下面的赋值就仅有普通内存变量是正确的了: numcopyHello&改变变量的型为C型_pcopiesHello&错误,不能改变为C型 下面描述几个使用内存变量

18、的VFP命令。它们可以自动建立内存变量或者释放(包括直接释放和释放后用希望的属性重建)内存变量。各类内存变量都可以显示、释放或写到一个特定的内存变量文件中。 1. 建立内存变量 建立内存变量的三种方法是:赋值、执行一个操作内存变量的命令或者通过规定一个内存变量的级(如在PUBLIC中)来建立内存变量。 最初的赋值命令在dBASE是STORE。 命令格式:STORE TO 更简单的赋值方法是使用等号(如象BASIC或C中使用的那样),这种方法从dBASE开始便有了,它让用户任选使用,并已溶入全部xBASE语言,包括FoxBASE+和FoxPro。 命令格式: 例2.4: B5数值5赋给变量B ?

19、 B 5 STORE B2 TO FJ将“B2”表达式的值存入FJ中 ? FJ 7 学校成都电子机械高等专科学校 将字符串 成都电子机械高等专科学校 存入变量学校中 STORE 计算机 TO 系,XI 将字符串 计算机 存入变量系和XI中 ? 学校,系,XI,FJ 成都电子机械高等专科学校 计算机 计算机 7 然而,最初的赋值方法(即用STORE命令)并没有过时,因为它有两个有用的特性“”号赋值型式不具有:首先可以用它规定也是命令的标志符(记住,VFP没有真正的保留字),其次,可以一次初始化变量列表。例如: STORE 5 TO CREATE&而CREATE=5就出错,因为CREATE放在语句

20、前面便看成命令了。 STORE 0 TO a ,b,c,d,e&一次赋值变量列表。 注意:两种赋值方法都不能将值赋到.DBF表字段。 VFP也可以用这两种赋值方法去初始化一个数组中的每个元素,不用下标表达式,仅需数组相同的名字便可。 例2.5: DECLARE SY2,3&建立一个2乘3数组 SY8 &赋值8到全部6个元素。 Store 8 To SY &赋值8到全部6个元素。 数组的全部6个元素都设置为8。但是,如果VFP兼容选择项设置为dBASE IV(SET COMPATIBILITY DB4),上面相同的语句则用赋值为8的名叫SY的内存变量代替了数组。 用户可能已经注意到赋值符号“”左

21、边的是任选的。在某些环境下,想调用一个函数,但并不想存贮其返回值,假如调用函数CAPSLOCK()设置一个值:CAPSLOCK(OLdCaps) 则在这种情况下,CAPSLOCK()设置了CAPSLOCK键状态,但却直接放弃了返回值。VFP这种语句格式任何版本的dBASE都不支持。还有几个VFP命令对内存变量赋值。象直接内存变量赋值语句一样,如果规定的内存变量已存在,则它的旧定义被去掉。如果不存在,则建立它。下面的命令建立内存变量(详见后面的有关章节)。 ACCEPTAVERAGE CALCULATECOUNT DECLARE*INPUT PARAMETERS*PRIVATE* PUBLIC*

22、STORE SUMWAIT 用星号(*)标记的命令可以未知属性建立内存变量。例如:当PUBLIC命令规定一个不存在的内存变量时,它建立一个具有值.F.的逻辑型内存变量。这些属性将在内存变量的首次赋值时改变。 2. 释放内存变量 RELEASE命令释放(删除)内存变量。从概念上讲,RELEASE意味着一个标志符在某种内存变量命名使用中的免除。RELEASE命令有如下格式: RELEASE ALL LIKE|EXCEPT| 若选,则仅删除清单中指定的内存变量。若选ALL LIKE|EXCEPT,则按如下条件删除内存变量: ALL LIKE 表示把符合结构中所指定的内存变量删除。 ALL EXCEP

23、T 表示把除了符合结构中所指定的其它所有内存变量清除。 以上格式支持释放(清除)一个、某些或全部内存变量。 例2.6: RELEASEPhoneNO&删除一个内存变量。 RELEASEName, PhoneNO&删除两个(某些)内存变量。 RELEASEALL LIKE N?&删除首字符为N的双字母内存变量。 RELEASEALL EXCEPT S*&删除除了首字符为S的所有内存变量。 RELEASEALL&删除全部内存变量。 RELEASE ALL命令释放在当前级能见的全部内存变量。就是说,如果一个子程序发出一个RELEASE ALL命令,在VFP命令窗口(Command Window)中定

24、义的内存变量仍然存在。CLEAR MEMORY命令释放全部内存变量,不用考虑它们定义的级(即命令窗口中的也删除);CLEAR ALL命令(包括了CLEAR MEMORY)在关闭所有文件的同时清除所有内存变量。 是一个可以包括通配符?和*的标志符。如同在MS-DOS下一样:?匹配一单字符,而* 匹配任何字符串顺序。这样,在前面的例子中,N?匹配以N作为第一个字母的两个字母的标志符;而S*匹配以S开始的任何标志符,不考虑长度。 VFP编程者经常选择有一定意义的字母作为开头去命名内存变量。例如,全部公共(Public)内存变量可以P开头,全部临时内存变量可以T开头。这不仅增加了程序的可读性,也使以下

25、的命令释放全部临时内存变量更方便:RELEASEALL LIKE T* 3. 显示内存变量 可以用DISPLAY MEMORY TO PRINT或LIST MEMORY TO PRINT命令显示内存变量标志符和它们的属性以及当前值的列表(DISPLAY在各屏或窗口暂停,其余与LIST等效)。选TO PRINT任选项可把这些内容打印出来。 例2.7 :用FoxPro的LIST MEMORTY命令显示全内存变量的当前值,包括系统内存变量,并列出全部菜单、菜单笺、下拉菜单和逻辑窗口: NAME成都小狐狸软件室 aunt6868.88 number3456 value1/4 Date104/28/96

26、 DECLARE Aray3 Aray2星期五 Aray358 DO TEST 这段程序产生了LIST MEMORY在下面表2-1所示出的输出。TEST.PRG子程序如下: PRIVATE DATE1 B7Hello date101/25/96 LIST MEMORY 表 2-1 LIST MEMORY命令的输出 NAME PubC 成都小狐狸软件室 AMOUNTPubN6868.88(6868.88000000) NUMBERPubN3456 ( 3456.00000000) VALUEPubN0.25(0.25000000) DATE1(hid)D04/28/96 ARAYPubA (1)

27、L .F. (2)C 星期五 (3)N 58(58.00000000) B7PrivC HelloDATE1PrivD 01/25/968个内存变量被指定48个字节已用 248个内存变量是可用的 打印系统内存变量 _ALIGNMENTPubCLEFT _BOXPubL .T. _CALCMEMPubN0.00( 0.00000000) _TEXTPubN-1( -1.00000000) _THROTTLEPubN0.00( 0.00000000) _WRAPPubL.F. 49个系统内存变量被指定; 菜单和菜单笺定义; 0个菜单被指定; 弹出菜单定义; RUN707字节 ;1个弹出菜单被指定

28、;窗口定义 ;0个窗口被指定. 各内存变量以下面的属性列于一个单行中。 (1)标志符内存变量的名字,以大写字母示出。 (2)级内存变量以Pub(public),Priv(private),hid(hidden),或(数组行元素)表示。public(公共)内存变量对全部级别均可见。private(私用)内存变量仅对当前及下面级别可见。标记hid(隐藏)的内存变量在比宣布它们为private(私用)变量的级再高一级别定义。组成数组元素的内存变量用元素号或行和列号标记。 (3)型内存变量的型可以是A(数组型)、C(字符型)、D(日期型)、L(逻辑型)或N(数字型)等。内存变量不能是M(备注型)。 (

29、4)值内存量的当前值。 (5)一个定义块(block)如果一个内存变量在一个程序(而不是在VFP的命令窗口)中定义,则过程名会显示出。 在一个程序中定义的内存变量(而不是从命令窗口定义的内存变量)默认划归为private(私用)内存变量,而在命令窗口中建立的内存变量默认为public(公用)内存变量。程序中定义的内存变量在程序Return(返回)时,自动RELEASE(释放)。例如,在这个变量列表中示出了两个不同值的DATE1,前一个DATE1在命令窗口中建立,属于公用内存变量,后一个DATE1在程序TEST.PRG中建立,属于私用变量。TEST.PRG中的PRIVATE DATE1语句隐去了

30、第一个DATE1,所以后面的赋值语句用一个不同的值(它也可以有不同的型)建立了一个新内存变量。当TEST.PRG返回时,本地版的DATE1被释放,且原始的DATE1再次“可见”。 4 . 内存变量文件 内存变量是在内存中建立的,一旦关机或掉电以及退出系统,内存变量就不复存在,因此需要把用到的内存变量保存到磁盘上。用户可以用SAVE命令写一个、某些或全部内存变量到一个磁盘文件(缺省后缀为.MEM)。反之,RESTORE语句从一个.MEM文件读内存变量描述。 (1)SAVE命令如下: 格式:SAVE TO ALL LIKE/EXCEPT 若未给出任选项,将把当前内存中所有的内存变量(它的名字和值)

31、存于指定的文件名中,若给出任选项,则把符合指定要求的内存变量保存起来,此选项的意义与RELEASE命令中选项的意义相同。发出SAVE命令时,如果一个本地内存变量隐去了另外在较高级定义的内存变量,则只存贮本地内存变量。 (2) RESTORE命令 RESTORE命令首先执行了一个CLEAR MEMORY命令,删去全部当前内存变量,然后 读存贮在指定MEM文件中的内存变量描述。命令是: 格式:RESTORE FROMADDITIVE 任选项ADDITIVE关键字忽略此命令先执行CLEAR MEMORY这一步。发出RESTORE命令时的程序级便是内存变量的程序级。换言之,如果在命令窗口RESTORE

32、,在MEM文件中所描述的内存变量则建立为公共变量。如果RESTORE命令由程序发出,则所建立的内存变量作为私用内存变量(除非标志符的公共或私用状态在RESTORE前已由PUBLIC或PRIVATE命令明显设置)。 VFP还有存屏命令,能将屏幕存到一个内存变量之后,可再用上面的命令将之存为内存变量文件,以便以后恢复。 格式:RESTORE SCREEN TO 功能:在文本方式把当前整个屏幕上的内容保存到中,不选任选项,则保存到特定的内存缓冲区中(只能保存一幅屏幕内容)。当需要恢复屏幕内容时可用下列命令: 格式:RESTORE SCREEN FROM 不选任选项,则从特定的内存缓冲区中恢复。 例2

33、.8: SAVE SCREEN TO SC&将屏幕存SC内存变量 SAVE TO MF1&将所有内存变量存入MF1文件,包括SC内存变量 RESTORE FROM MF1&恢复内存变量 CLEAR&把整个屏幕清除 RESTORE SCREEN FROM SC&恢复屏幕 对比一下是否与清屏前相同。 2.2.3 数组 数组变量是从dBASE问世以来,xBASE编程人员一直梦寐以求的东西。以前只能用宏替换去访问一个数组元素,现在用惯了数组变量的用户可能觉得可笑,但的确是事实。Clipper(美国另外一种数据库)和FoxBASE+都在dBASE之前支持数组。dBASE IV才是Ashton-Tate公

34、司第一个支持数组的dBASE版本。VFP当然具有数组功能,利用此功能编程会很方便,也会增强程序的可读性。 数组可以用DECLARE或DIMENSION命令来建立。这两个命令名字同义,它们的语法在打印上稍微有点难办。在引号中的括号是文字;未引的括号具有实际意义(它们表示一个任选部分): DECLARE “”,“”,“”,“” 说明:数值表达式、数值表达式是用该数组的最大元素个数或允许的下标最大值,数组的最小值为1。数组名规则与一般变量名相同。Fox不象其它支持n维数组的语言,它只可以支持一维或二维数组。二维数组类似一个数据表。第一维是行,第二维是列。各个数组使用一单个内存变量,所以VFP可具有多

35、达65000个数组(假如有足够的内存的话)。任一单个数组中的元素总量不能超过65000个。 可用DECLARE(或DIMENSION)命令改变一个已存在数组的尺寸和维数。用户可以从一维到二维,或从二维到一维改变维数,还可增加或减少一个数组中元素的数目,拷贝原始数组的内容到新的重定维数的数组。下面的例子中,将三个元素的一维数组Aray扩充为具有8个元素的二维数组。 例2.9: 命令窗口 内容 DECLARE Aray3 定义一个具有三个元素的一维数组。 Aray42 赋值42到全部三个元素。 DECLARE Aray2,4 重定义数组的维数。 内容: ? Aray1,142 ? Aray1,24

36、2 ? Aray1,342 ? Aray1,4.F. ? Aray2,1.F. ? Aray2,2.F. ? Aray2,3.F. ? Aray2,4.F. 从上面可见,数组定义后各元素的初值为逻辑假.F.,可象操作一般内存变量一样操作数组元素,也可以用赋值命令一次给一个数组中的所有元素赋相同值。另外,还可以用SCATTER命令把表中部分或全部字段变量的内容一一对应地传送到数组的各元素中,用GATHER命令将数组中的数据传送到表的当前记录中。 2.2.4 变量的级 1.题外话 VFP用变量所在的工作区来标记各字段变量,内存变量驻留在一个假想的工作区。需要区分一个内存变量和一个同名的字段变量时,

37、可使用M这个假想的内存变量工作区作为内存变量的前缀。 在VFP的变量层次中,字段比内存变量优先级高,更重要。一个标志符同时描述一个字段和一个内存变量时,由字段隐盖内存变量,除非这操作只能由一个内存变量完成。因此,对这二义性标态符的访问,一般可用诸如?或GET这样的命令去发现字段变量,而用“”赋值操作符和&宏替换符来发现内存变量。在下面的例子中,文件NEW.DBF包括一个NAME字段。 例2.10: 命令窗口结果 USE RS ? Name王权 Name刘炎刘炎 ? Name王权 ? &Name刘炎 &用宏(见4.3节)替换发现内存变量 ? MName刘炎 这个例子示出了名叫M(作为内存变量)的

38、特殊工作区别名的使用,是假想工作区的别名。字母M是一个特殊字符,不能用它作一般工作区别名。 2.嵌套级 VFP操作内存变量另外的附加属性是内存变量建立的程序级。程序级涉及一个VFP程序又调用另外的VFP程序,这叫嵌套过程调用。命令窗口被认作0级。当在命令窗口中键入DO MyProg时,MyProg则在程序1级执行。如果MyProg程序包括诸如DO Calc这样的语句,则Calc程序在二级执行,如此等等。 一个内存变量只在它建立的级和以下更深的级是“可见”的。例如,假如Calc(在第二级)建立了一个叫A_Var的内存变量,然后调用另外的过程(程序)。那个过程可访问A_Var,因为它的级(3级)深

39、于建立A_Var的级(2级)。 当一个程序级返回到调用它的级时,在离开级上定义的全部内存变量自动释放(RELEASE)。这样,Cane返回My Prog时,由Calc定义的A_Var变量被放弃。当一个内存变量在命令窗口(0级)中建立时,它从不释放(直到VFP退出)。引进PUBLIC命令,便解决了希望授权内存变量永久性的问题。 在一个程序中写PUBLIC X时,它建立了一个叫X的内存变量,就象从命令窗口中建立的那样。不但X不会释放,而且它对每个程序模块来说都是可见的、可以使用的。用VFP语言所写的典型系统,一般都以调用一个初始化模块作为开始。如果没有PUBLIC语句,初始模块便不能建立系统剩余部

40、分可使用的变量。另外,有时编程人员并不想他们的变量在程序系统剩余部分可见。事实上,好的编程实践均意识到全局变量通常并不是一个好主意,因为有时它会引起变量命令名的冲突。PRIVATE命令可以定义私用本地变量。尽管隐蔽性不是一个内存变量的属性,但是,PRIVATE命令可用与新的本地版冲突的一个名字来设置任何变量的隐蔽属性。请见下面的例子: 如果在命令窗口建立一个叫A_Var的新的内存变量,然后在一个过程(1级)发出命令PRIVATE A_Var,则VFP直接标记命令窗口版A_Var为“在1级隐蔽”,如果1级建立一个叫A_Var的新的内存变量,没有冲突存在,首先0级A_Var已被隐蔽了。任何1级调用

41、的过程仅看见1级的A_Var。当1级返回命令窗口时,VFP搜索内存变量释放,于是本地版的A_Var被释放,因为它是在1级定义的。然后系统寻找隐蔽在它返回这级的内存变量,并解除它们的隐蔽,这样命令窗口的A_Var便可见了。 2.3 表 达 式 xBASE语言中的表达式与其它语言(例如BASIC,Pascal或C)中的表达式几乎是等效的。 变量和常数是程序管理的基本数据对象。运算符规定了它们做什么。表达式是由运算符和数据项适当组合而成的式子,是获得变量、值和结合运算符变量和常数产生新值的计算规则的结构。表达式由运算符和操作数 () 如同在C、C +、Pascal(和许多其它编程语言)中一样,表达式

42、由以下组成: 1单个的操作数(常数,变量,或函数); 2操作数用运算符结合其它操作数(典型地,例如x+y)。 函数由以下组成: 1一个函数名(或者内部建立或者用户定义的); 2零个或多个自变量,也叫参数,设置在括号中。没有自变量的函数仍然具有括号,例如,DATE( )函数。 一个函数的自变量是它自己的表达式,这叫计算机科学中的递归定义,因为它是一个循环自变量。一个表达式含有包括有函数的表达式的函数,如此等等。例2.11: ? 2由一个数字常数组成的表达式 ? 1+1两个数字常数和加号运算符 ? SQRT(4)有一个自变量的函数,一个数字常数 ? SQRT(1+3)同样的函数,但自变量现在包括一

43、个运算符 ? SQRT(SQRT(1)+SQRT(9)同样的函数,但自变量现在包括嵌套的函数 这五个表达式的值是相同的2。SQRT()函数要求一个数字自变量,该自变量可以是一个常数(4)、两个常数和一个运算符(1+3),或者一个数字函数调用等。关于函数的详细信息请见第四章。 2.3.1 运算符 运算符是对数据对象(操作数)进行操作运算的符号,VFP的运算符以其结果的型分组有如下四类。此外,VFP还为面向对象编程提供了两个特殊的运算符(.)和(:)(在第九章讲述)。 1.以型分类运算符 (1)字符串运算符 “”运算符,连接两个字符串运算数。除了将第一个(左边)操作数尾部的空格移到结果的末端外,“

44、”运算符完成与“”运算符同样的功能。下面的例子示出其作用: 例2.12:命令窗口结果 命令窗口结果 A=Hello Hello B=ThereThere ? A+BHello There ? LEN(A+B)20 ? A-BHello There ? LEN(A-B)20 (2)日期和时间运算符 +和-运算符也用于日期。但是早先的FoxPro只有四种结合操作数的方式: +&结果是型。 +&结果是型。 -&结果是型。 -&结果是型。 注意:当另外的操作数是一个数字时,日期必须在“-”运算符的左边。VFP可有以下几个方式:(注:tNewTime等的意义见1.2.3节中的约定) tNewTime+tTime1+nSeconds tNewTime=tTime1-nSeconds dNewDate=dDate1+nDaysdNewDate=dDate1-nDays

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1