【数据库应用基础】内存变量、数组及处理_第1页
【数据库应用基础】内存变量、数组及处理_第2页
【数据库应用基础】内存变量、数组及处理_第3页
【数据库应用基础】内存变量、数组及处理_第4页
【数据库应用基础】内存变量、数组及处理_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、FoxPro For Windows http:/ 1FoxProFoxPro程序设程序设计计第第9 9讲讲 内存变量、数组及处理内存变量、数组及处理FoxPro For Windows http:/ 2FoxProFoxPro程序设程序设计计内存变量内存变量小结:小结:内存变量赋值和重新赋值内存变量赋值和重新赋值 赋值的过程是生成内存变量的过程赋值的过程是生成内存变量的过程【例】【例】内存变量内存变量赋值赋值X=3Y=x+5STOR ABC TO x,y,z* x,y,z的值都是字符的值都是字符ABC ACCE 请输入姓名:请输入姓名: TO name* name=王强王强INPUT 请输入

2、查询的学号请输入查询的学号 TO xh* xh=990106WAIT 继续查询吗继续查询吗? (Y/N) TO jx* jx=Y内存变量名内存变量名字母为首,字母为首,10个长,字母、数字、个长,字母、数字、下划线组成。下划线组成。 M1、1m、 m_1数据类型数据类型和它存放的数据类型一致。和它存放的数据类型一致。内存中暂时存放常数、运算结内存中暂时存放常数、运算结果的内存空间。果的内存空间。几个?几个?显示一下!显示一下!FoxPro For Windows http:/ 3FoxProFoxPro程序设程序设计计LISTDISPLAY MEMORY问题:问题:关机后,内存变量保留吗?关机

3、后,内存变量保留吗? LIST MEMORY LIKE X* &通配符通配符*和?和?变量名字变量名字 作用域作用域 类型类型 值值 内存变量显示内存变量显示FoxPro For Windows http:/ 4FoxProFoxPro程序设程序设计计存:存:将已定义的所有或部分内存变量保存到内存变量文件(.MEM)中。取:取:需要时从某个内存变量文件中恢复内存变量的有关信息。从内存中删除已定义的内存变量,释放内存空间。RELEASE RELEASE ALL LIKE|EXCEPTCLEAR ALLCLEAR MEMORY1)生成内存变量文件命令:)生成内存变量文件命令:SAVE TO ALL

4、 LIKE|EXCEPT2)恢复内存变量文件命令:)恢复内存变量文件命令:RESTORE FROM ADDITIVEADDITIVE 使恢复之前内存中所有内存变量有效,否则清除。内存变量的存取内存变量的存取内存变量的释放内存变量的释放FoxPro For Windows http:/ 5FoxProFoxPro程序设程序设计计【例】【例】 *lx.prgSET TALK OFFCLEA ALLY1=77Y2=88X1=99 SAVE TO PKRELE ALL EXCEPT Y*&释放X1LIST MEMORY X2=A RESTORE FROM PK ADDILIST MEMORY LIKE

5、 ? SET TALK ONY1 Priv N 77Y2 Priv N 88X2 Priv C “A”Y1 Priv N 77Y2 Priv N 88X1 Priv C “99 “Y1 Priv N 77Y2 Priv N 88X1 Priv C “99 “PK.mem思考:删除ADDI语句,结果如何?FoxPro For Windows http:/ 6FoxProFoxPro程序设程序设计计 【例【例5.38】 *main.prgSET TALK OFFa=1b=10DO cx1 ? c=,c+10SET TALK ONReturn*子程序子程序cx1 c=a+bRETURN全局:全局:a

6、. 命令窗口中命令窗口中定义的。定义的。b.用用PUBLIC语句说明的。语句说明的。c.调用程序定调用程序定义的对于被调义的对于被调用程序具有全用程序具有全局意义。局意义。内存变量的作用域内存变量的作用域-全局与局部全局与局部全局变量全局变量在任何程序中都有效,在任何程序中都有效,局部变量局部变量只在定义它的程序中有效只在定义它的程序中有效。局部:局部:a. 在子程(过在子程(过程)定义的。程)定义的。b. 用用PRIVATE语句说明的。语句说明的。PUBLIC c &定义定义PUBLIC &出现错误提示:出现错误提示:c变量未找到变量未找到FoxPro For Windows http:/

7、7FoxProFoxPro程序设程序设计计两个变量同名用PRIVATE声明为局部,程序执行完,将被释放。在调用程序中定义的同名变量又可以使用。【例】【例】 *MAIL1.PRG SET TALK OFF A=5DO SUB1?A *SUB1.PRG A=10RETU 主对子相当于全局主对子相当于全局全局、局部变量辨析全局、局部变量辨析 【例例】 *MAIN2.PRG SET TALK OFFA=5DO SUB2?A*SUB2.PRGPRIVATE A A=10RETUFoxPro For Windows http:/ 8FoxProFoxPro程序设程序设计计【例【例5.39】下面的程序将显示

8、】下面的程序将显示PRIVATE语句的作用。语句的作用。 *main.prgSET TALK OFFSET PROC TO SUB.PRGnum1=100num2=200DO square?在主程序中,在主程序中,num1=,num1, num2=,num2SET TALK ON*sub.prg使用局部变量的过程使用局部变量的过程PROCEDURE squarePRIVATE num1num1=100*100num2=200*200?在子程序中在子程序中,num1=,num1,num2=,num2RETURNFoxPro For Windows http:/ 9FoxProFoxPro程序设程

9、序设计计是什么?是什么?数组是名字相同而下标不同的内存变量。数组是名字相同而下标不同的内存变量。1、数组的定义:、数组的定义:DIMENSION (,)DECLARE (,)说明:说明:数组必须先定义;一个下标为一维数组,两个下标为二维数组,前者为行,后者为列数;内存中一维数组按顺序存放,二维数组先按行排列后按列排列;排列有一个顺序号,称序号,序号从1开始,对数组的访问按序号进行 。数数组组【例】【例】 DIME N(6), M(2,3) 一维数组:一维数组:N(6) N(1), N(2), N(3), N(4), N(5), N(6) 二维数组:二维数组:M(2,3) M(1,1),M(1,

10、2),M(1,3),M(2,1),M(2,2),M(2,3) 序序 号:号: 1 2 3 4 5 6FoxPro For Windows http:/ 10FoxProFoxPro程序设程序设计计2、数组的赋值、数组的赋值数组生成后,系统自动以逻辑假值对其初始化。数组生成后,系统自动以逻辑假值对其初始化。数组元素下标的起始值为数组元素下标的起始值为1。a.单个赋值:单个赋值:DIME A(3) A(1)=5 A(2)=A A(3)=00/02/03b.为整个数组赋值:为整个数组赋值:DIME B(2,3) B=9c. 同一数组中的不同元素可以赋不同类型的值。同一数组中的不同元素可以赋不同类型的

11、值。DIME a(2,2)&定义一个含有2*2=4个元素的二维数组a(1,1)=10a(1,2)=ya(2,1)=.t.a(2,2)=00/08/01FoxPro For Windows http:/ 11FoxProFoxPro程序设程序设计计d. 可以用循环语句给数组元素赋值。可以用循环语句给数组元素赋值。【例【例5.43】DIME a(100)FOR i=1 TO 100a(i)=iENDFORA(1)=1A(2)=2A(3)=3A(4)=4A(100)=100FoxPro For Windows http:/ 12FoxProFoxPro程序设程序设计计【例【例5.44】已知数组】已知

12、数组M(10)求其中最小数。求其中最小数。M(1) M(2) M(3) M(4) M(5)M(10)12 20 5 9 33 SET TALK OFFDIME M(10)k=1DO WHIL kM(k) & 依次比较,使MIN为最小 MIN=M(k) ENDIFENDFOR? MIN=,MINSET TALK ONRETURN解析:首先定义解析:首先定义M数组,并为其赋值;(用循环实现)数组,并为其赋值;(用循环实现)然后,逐一比较,取其最小。然后,逐一比较,取其最小。FoxPro For Windows http:/ 13FoxProFoxPro程序设程序设计计 1、数组向数据库文件传递数据

13、:、数组向数据库文件传递数据: GATHER FROM 将数组的数据传递到当前数据库当前数据库的当前记录当前记录。如数组元素数少于字段数,多余字段内容保持不变;如数组元素数多于字段数,多余元素被忽略。 数组与数据库文件间的数据传递数组与数据库文件间的数据传递M(1)M(2) . .M(6)当前记录当前记录聚集A(6):A(1) A(2) A(3) A(4) A(5) A(6)990107 张三张三 男男 80/08/08 100 100Use studentAppend blankGather from a990107 张三张三 男男 80/08/08 100 100FoxPro For Wi

14、ndows http:/ 14FoxProFoxPro程序设程序设计计 2、数据库向数组传递数据、数据库向数组传递数据SCATTER FIELDS TO 将指定字段值传给数组。如数组元素数多于字段数,多余的数组元素内容不变;如果数组元素数不足,系统自动生成新数组元素。各数组元素的数据类型与相应字段的数据类型相同。 M(1)M(2) . .M(6)当前记录当前记录散开DIME A(1)USE STUDENTGO BOTTOMSCATTER TO AA(1):A(1) A(2) A(3) A(4) A(5) A(6)990107 张三张三 男男 80/08/08 100 100A(1):A(1)9

15、90107 张三张三 男男 80/08/08 100 100FoxPro For Windows http:/ 15FoxProFoxPro程序设程序设计计【例【例5.45】将数据库】将数据库student.dbf中,第中,第4条与第条与第6条记录内容交换。条记录内容交换。SET TALK OFFDIMENSION A(1),B(2)USE studentGO 4SCATTER TO AGO 6SCATTER TO BGATHER FROM AGO 4GATHER FROM BUSESET TALK ONRETURN46ABFoxPro For Windows http:/ 16FoxProF

16、oxPro程序设程序设计计【例】【例】Set talk offDime a(7)Use studS=0Do while .not.eof()scatter to as=s+a(6)skipEnddo? “s=”,str(s,5)Use retuSTUD.DBFSno name sex birthday score schoship(C,6) (C,6) (C,2) (D,8) (N,3) (N,3)990105 王亚洲 男 19800524 556 120990102 赵辉 男 19811203 600 180990107 刘洋 男 19800520 515 100990103 王丹 女 19

17、810326 624 180990104 李冬梅 女 19800415 525 100990101 白雪 女 19810618 540 120990106 陈小刚 男 19820816 510 100S=900FoxPro For Windows http:/ 17FoxProFoxPro程序设程序设计计【例】【例】SET TALK OFFDIMENSION X(5)USE SCOREGO 3SCATTER TO X? X(4)+X(5)USESET TALK ON程序运行结果;程序运行结果;_。【例】用数组与数据库数据传递命令,在【例】用数组与数据库数据传递命令,在SCORE数据库末尾添加一

18、条记录。数据库末尾添加一条记录。SET TALK OFFDIMENSION X(5)USE SCOREAPPEND BLANKX(1)=005X(2)=陈岩陈岩X(3)=男男X(4)=68X(5)=79_RETURNSCORE数据库如下:Record# SNO NAME SEX SCORE1 SCORE2 (C,3)(C,6) (C,2) (N,2) (N,2) 1 001 王丹 女 78 89 2 002 李涯 男 90 67 3 003 白雪 女 86 82 4 004 徐刚 男 90 90 168GATHER FROM X FoxPro For Windows http:/ 18FoxP

19、roFoxPro程序设程序设计计综合编程:【例】综合编程:【例】编程打印数字表:编程打印数字表:123246369A(1,1) A(1,2) A(1,3)A(2,1) A(2,2) A(2,3)A(3,1) A(3,2) A(3,3) 1 * 1 1 * 2 1 * 3 2 * 1 2 * 2 2 * 3 3 * 1 3 * 2 3 * 3SET TALK OFFCLEAR ALLDIME A(3,3)I=1DO WHILE I4 J=1 DO WHILE J4A(I,J)=I*J? A(I,J)J=J+1 ENDDO ? I=I+1ENDDOSET TALK ONRETURN解析:使用二维数

20、组解析:使用二维数组 双重循环来实现双重循环来实现FoxPro For Windows http:/ 19FoxProFoxPro程序设程序设计计【例】键盘任意输入【例】键盘任意输入10个数,按由大到小顺序输出。个数,按由大到小顺序输出。SET TALK OFFDIME A(10)I=1DO WHILE I=10 INPUT “A(I)=” TO A(I) &从键盘输入A数组的10个数 I=I+1ENDDI=1DO WHILE I=9 J=I+1 DO WHILE J=10 IF A(I)A(J) T=A(I) A(I)=A(J) A(J)=T ENDI J=J+1 ENDD I=I+1ENDDI=1DO WHIL I=10 ?A(I) I=I+1ENDDSET TALK ONA(I)A(J)T当当A(I)A(J)时:时:5 8 9 3 2 10A(I) A(J)8 5 9 3 2 10A(I) A(J) 9 5 8 3 2 10A(I) A(J)9 5 8 3 2 10A(I) A(J)10 5 8 3 2 9A(I) A(J) A(I) A(J)Fo

温馨提示

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

评论

0/150

提交评论