第一篇:VFP常用命令小结
VFP常用命令小结
表中不设合计字段的大体思路如下:(如有合计字段,当然更简单,就用Replace All)Dimension Array Myarray(RECCOUNT())定义一个下标为记录总数的数组 Go Top Do While!Eof()
Myarray(RECNO())=字段1+字段2+字段3…… Skip Enddo
1、CREATE 作用:建立一个新的表。
格式:CREATE [<文件>|?](注意,命令字符可取前面四个字符,后面可省略不写,即CREA,下同;中括号表示其中的参数是可选的;|管道符号表示两个参数只能选择一个,不能同时选择,下同。)说明:文件指建立以.dbf为扩展名的VFP数据库文件,在命令后面加上一个问号表示系统会弹出 对话框,要求用户输入想要建立的表名。在命令中不加文件名或问号系统也会弹出对话框,要求用 户输入想要建立的表名。
2、MODIFY STRUCTURE 作用:显示表文件结构,并允许修改此表的结构。格式:MODIFY STRUCTURE 说明:只有在用USE命令打开表文件以后,才能显示或修改表文件的结构。
3、APPEND 作用:在当前表的尾部(无论表中有无记录)追加记录(在当前表指当前正使用的表)。格式:APPEND [BLANK] 说明:在APPEND命令后面加上BLANK参数表示在当前表的尾部添加一条空白记录。无BLANK参数时,表示在当前表的尾部添加一条记录并要求用户输入相应的字段内容。
4、INSERT 作用:在表文件中间插入一个新记录。格式:INSERT [BEFORE] [BLANK] 说明:INSERT 在当前记录后插入一记录; INSERT BEFORE 在当前记录前插入一记录;
INSERT BEFORE BLANK 在当前记录前插入一空记录。
5、BROWSE 作用:主要用于打开浏览窗口,查阅表文件并同时进行修改。格式:BROWSE
6、USE 作用:打开和关闭表文件。格式:USE [<文件名>] USE 说明:前一个命令用来打开<文件名>指定的表文件,该表如有备注型字段,则同时打开相应的 备注文件(.fpt文件);后一个命令关闭当前打开的表文件。
7、LIST和DISPLAY 作用:显示表(.dbf)的内容、结构或状态。
格式:LIST|DISPLAY [OFF] [<范围>] [FIELDS] <表达式表> [WHILE <条件>] [FOR <条件>] [TO PRINT|TO FILE <文件>] LIST|DISPLAY STRUCTURE TO PRINT|TO FILE <文件>] LIST|DISPLAY STATUS [TO PRINT|TO FILE <文件>] 说明:命令带OFF参数表示不显示记录号,范围指定对哪些记录进行操作,范围包括:RECORD n 第几号记录、NEXT n 当前记录开始的几个记录、REST 自当前记录开始至文件末尾的所有记录、ALL 所有的记录。不选范围则隐含范围为ALL;FIELDS后跟字段名,字段名与字段名之间用逗号分 隔。WHILE后跟条件,FOR后面也跟条件,区别是,WHILE后的条件如果满足,便停止查找;FOR后的 条件查找所有满足条件的记录。TO PRINT和TO FILE <文件>分别表示将显示结果在打印机上打印出 来和将显示结果输出到文件。DISPLAY命令在显示记录满屏后,要求用户按任意键继续显示,并且在 该命令中,如果省略范围仅显示当前记录。格式中,下面两个命令分别为显示表结构(STRUCTURE)和工作状态(STATUS)。
8、记录的定位
作用:用记录指针(POINTER)定位记录。格式:GO[TO] RECORD n|TOP|BOTTOM n SKIP [+|-] 说明:第一个命令又叫绝对定位,其中,RECORD n定位到n号记录,TOP定位到第1个记录,BOTTOM定位到最后一个记录。第二个命令定位到第n个记录,n是一个数值。第三个命令又叫相对定 位,它以当前记录为基准前移(-)或后移(+)n个记录,不选任选项,则默认记录指针后移一个记录。
9、CHANGE和EDIT 作用:显示要编辑或修改的字段。
格式:CHANGE|EDIT [<范围>] [FIELDS <字段名表>] [WHILE <条件>] [FOR <条件>]
10、BROWSE 作用:打开一个“浏览”窗口,供用户浏览或修改记录。格式:BROWSE [FIELDS <字段名表>]
11、REPLACE 作用:用表达式的值代替命令中与之相对应的字段的内容。
格式:REPLACE [<范围>] <字段1> WITH <表达式1>[,<字段2> WITH <表达式2>] [FOR <条件> ] [WHILE<条件>]
12、DELETE、PACK、ZAP和RECALL 作用:分别是给要删除的记录作删除标记、彻底删除、删除所有记录和取消被选中的表记录的 删除标志。
格式:DELETE [<范围>] [WHILE<条件>] [FOR <条件>](特例:DELETE FILE FILENAME.DBF,该命令删除指定的表文件)PACK ZAP RECALL [<范围>] [FOR <条件>] [WHILE<条件>]
13、SORT和INDEX 作用:分别是建立一个其记录以新的物理顺序排列的新表文件和对当前表根据关键字表达式的值 从小到大排列,并存入TO后指定的索引文件名的文件或复合索引文件的一个标识中。格式:SORT TO <文件名> ON <字段名1> [/A] [/C] [/D][,<字段名2> [/A] [/C] [/D]]...[ASCENDING|DESCENDING] [<范围>] [FOR <条件>] [WHILE<条件>] [FIELDS<字段表>] INDEX ON <关键字表达式> TO <文件名> INDEX ON <关键字表达式> TAG <标识名> [OF <文件名>] [FOR <条件>] 说明:第1个命令中,/A按字段名升序排序,/D按字段名降序排序,/C忽略大小写,针对字符型 关键字而言,ASCENDING和DESCENDING分别表示升序和降序。第1个命令建立.dbf表文件,第2个命令 建立.idx单一索引文件,第3个命令建立.cdx复合索引文件(Compound Index)。
14、USE <表文件名> INDEX <索引文件名表>、SET INDEX TO和SET ORDER TO 作用:分别是打开表文件的同时打开索引文件、打开索引文件和改变主索引。格式:USE <表文件名> INDEX <索引文件名表> SET INDEX TO [<索引文件名表>] SET ORDER TO [<索引文件名>](特例:重新索引命令:REINDEX)
15、FIND、SEEK和LOCATE及CONTINUE 作用:前两个命令FIND和SEEK是在一个已经建立了索引文件的表中,定位到关键字中的内容与命 令行中字符串相同的第一个记录。后一个命令在用USE打开表文件以后,直接查询表中字段内容。格式:FIND <“字符串”>|<字符串> SEEK <表达式> LOCATE [<范围>] [FOR <条件>] [WHILE<条件>] CONTINUE 说明:FIND命令与SEEK命令的区别是前者后跟字符串,而后者后跟表达式。在用LOCATE命令找到 一个匹配记录后,可用CONTINUE命令搜索表的剩余部分来寻找其他匹配的记录。
16、COUNT 作用:统计当前表文件中符合条件的记录数。
格式:COUNT [<范围>] [FOR <条件>] [WHILE<条件>] [TO <内存变量名>] 说明:内存变量名可用除参数外的任意字符。
17、SUM 作用:对当前表中选中记录的全部或指定的数值字段或由指定字段组成的数值表达式累加求和。格式:SUM [<范围>] [数值<表达式>] [TO <内存变量名表>] [FOR <条件>] [WHILE<条件>]
18、AVERAGE 作用:对当前表中选中记录的全部或部分数值型字段及其组成的表达式求平均值并显示。格式:AVERAGE [<范围>] [数值<表达式>] [TO <内存变量名表>] [FOR <条件>] [WHILE<条件>]
第二篇:VFP命令、函数及程序语句解读
VFP命令、函数及程序语句大全(1 学过VFP(Microsoft Visual FoxPro的朋友都知道它是微软公司开发的数据库管理系统。它
经历了从dBASE、FoxBASE、FoxPro直到VFP的发展过程。本文便以VFP 6.0为例介绍它的命令、函数
及程序语句,为学习VFP的朋友提供必要的学习参考,也为已经精通VFP的朋友提供复习的好机会。
一、主要命令:
1、CREATE 作用:建立一个新的表。
格式:CREATE [<文件>|?](注意,命令字符可取前面四个字符,后面可省略不写,即CREA,下
同;中括号表示其中的参数是可选的;|管道符号表示两个参数只能选择一个,不能同时选择,下
同。
说明:文件指建立以.dbf为扩展名的VFP数据库文件,在命令后面加上一个问号表示系统会弹出
对话框,要求用户输入想要建立的表名。在命令中不加文件名或问号系统也会弹出对话框,要求用
户输入想要建立的表名。
2、MODIFY STRUCTURE
作用:显示表文件结构,并允许修改此表的结构。格式:MODIFY STRUCTURE 说明:只有在用USE命令打开表文件以后,才能显示或修改表文件的结构。
3、APPEND 作用:在当前表的尾部(无论表中有无记录追加记录(在当前表指当前正使用的表。
格式:APPEND [BLANK] 说明:在APPEND命令后面加上BLANK参数表示在当前表的尾部添加一条空白记录。无BLANK 参数
时,表示在当前表的尾部添加一条记录并要求用户输入相应的字段内容。
4、INSERT 作用:在表文件中间插入一个新记录。格式:INSERT [BEFORE] [BLANK] 说明:INSERT 在当前记录后插入一记录;INSERT BEFORE 在当前记录前插入一记录;INSERT BEFORE BLANK 在当前记录前插入一空记录。INSERT-SQL命令追加记录
INSERT INTO 表名[(字段1[,字段2…]];VALUES(表达式1[,表达式2…]
例:INSERT INTO XS(XH,XM,XB,XIMING VALUES(“950106”,“高山”,“男”,“”
5、UPDATE 作用:修改数据
update <表名> set <字段1=表达式1>,<字段2=表达式2...> where <条件> 例: update <表名> set <字段1,字段2...>=<表达式1,表达式2...> where <条件>
6、BROWSE 作用:主要用于打开浏览窗口,查阅表文件并同时进行修改。格式:BROWSE 作用:打开一个“浏览”窗口,供用户浏览或修改记录。格式:BROWSE [FIELDS <字段名表>]
7、USE 作用:打开和关闭表文件。格式:USE [<文件名>] USE 说明:前一个命令用来打开<文件名>指定的表文件,该表如有备注型字段,则同时打开相应的
备注文件(.fpt文件;后一个命令关闭当前打开的表文件。
8、LIST和DISPLAY
作用:显示表(.dbf的内容、结构或状态。
格式:LIST|DISPLAY [OFF] [<范围>] [FIELDS] <表达式表> [WHILE <条件>] [FOR <条件>] [TO PRINT|TO FILE <文件>] LIST|DISPLAY STRUCTURE TO PRINT|TO FILE <文件> LIST|DISPLAY STATUS [TO PRINT|TO FILE <文件>] 说明:命令带OFF参数表示不显示记录号,范围指定对哪些记录进行操作,范围包括:RECORD n 第几号记录、NEXT n 当前记录开始的几个记录、REST 自当前记录开始至文件末尾的所有记录、ALL 所有的记录。不选范围则隐含范围为ALL;FIELDS后跟字段名,字段名与字段名之间用逗号分
隔。WHILE后跟条件,FOR后面也跟条件,区别是,WHILE后的条件如果不满足,便停止查找;FOR后的条件查找所有满足条件的记录。TO PRINT和TO FILE <文件>分别表示将显示结果在打印机上打印出
来和将显示结果输出到文件。
格式中,下面两个命令分别为显示表结构(STRUCTURE和工作状态(STATUS。注:LIST命令一次连续显示完所有记录内容。DISPLAY命令在显示记录满屏后,要求用户按
任意键继续显示。如果LIST与DISPLAY都无任何选择项时,LIST显示文件的全部记录, DISPLAY仅显示当前记录。
9、记录的定位
作用:用记录指针(POINTER定位记录。格式: 1GO[TO] RECORD n|TOP|BOTTOM 命令定位 GO [RECORD] N GO BOTTOM GO TOP 2n 3SKIP [+|-] n 说明:第一个命令又叫绝对定位,其中,RECORD n定位到n号记录,TOP定位到第1个记录, BOTTOM定位到最后一个记录。第二个命令定位到第n个记录,n是一个数值。第三个命令又叫相对定
位,它以当前记录为基准前移(-或后移(+n个记录,不选任选项,则默认记录指针后移一个记
录。
LOCATE [<范围>] FOR <表达式> 范围: ALL NEXT N RECORD N
REST
10、CHANGE和EDIT 作用:显示要编辑或修改的字段。
格式:CHANGE|EDIT [<范围>] [FIELDS <字段名表>] [WHILE <条件>] [FOR <条件>]
11、REPLACE 作用:用表达式的值代替命令中与之相对应的字段的内容。
格式:REPLACE [<范围>] <字段1> WITH <表达式1>[,<字段2> WITH <表达式2>] [FOR <条件> ] [WHILE<条件>] 例:USE B2-1 REPLACE ALL 工资 WITH 工资+200 FOR 工资<1000 BROW
12、DELETE、PACK、ZAP和RECALL 作用:分别是给要删除的记录作删除标记、彻底删除、删除所有记录和取消被选中的表记录的
删除标志。
格式:DELETE [<范围>] [WHILE<条件>] [FOR <条件>](特例:DELETE FILE FILENAME.DBF,该命令删除指定的表文件
PACK
ZAP RECALL [<范围>] [FOR <条件>] [WHILE<条件>]
13、SORT和INDEX 1SORT 作用:是建立一个其记录以新的物理顺序排列的新表文件,原文件不变.格式:SORT TO <文件名> ON <字段名1> [/A] [/C] [/D][,<字段名2> [/A] [/C] [/D>...[ASCENDING|DESCENDING] [<范围>] [FOR <条件>] [WHILE<条件>] [FIELDS<字段表>] 2INDEX 作用: 对当前表根据关键字表达式的值从小到大排列,并存入TO后指定的索引文件名的文件或复合索引文件的一个标识中。
格式: INDEX ON <关键字表达式> TO <文件名> INDEX ON <关键字表达式> TAG <标识名> [OF <文件名>] [FOR <条件>] 说明:第1个命令中,/A按字段名升序排序,/D按字段名降序排序,/C忽略大小写,针对字符型
关键字而言,ASCENDING和DESCENDING分别表示升序和降序。第1个命令建立.dbf表文件,第2个命令建立.idx单一索引文件,第3个命令建立.cdx复合索引文件(Compound Index。
删除索引
DELETE TAG ALL [OF 复合索引文件名]
DELETE TAG 索引标识1 [OF 复合索引文件名1][,索引标识2 [OF 复合索引文件名2>…
14、USE <表文件名> INDEX <索引文件名表>、SET INDEX TO和SET ORDER TO 作用:分别是打开表文件的同时打开索引文件、打开索引文件和改变主索引。并确定第一个索引文件为主控索引文件.(当前起作用的索引文件称为主控索引文件, 当前起作用的索引标识称为主控索引
格式:USE <表文件名> INDEX <索引文件名表> SET INDEX TO [<索引文件名表>] 作用:打开当前表的一个或多个索引文件并确定第一个索引文件为主控索引文件,该命令用于单索引文件.格式:SET INDEX TO [<索引文件表>] [ADDITIVE] 说明:(1[<索引文件表>]中第一个索引文件为主控索引文件.(2若缺省ADDITIVE选项,则在用本命令打开索引文件时,除结构复合索引文件以外的索引文件均被关闭
SET ORDER TO [<数值表达式>]|[<单索引文件名>]|[TAG] <索引标识> [ASCENDING|DESCENDING>(特例:重新索引命令:REINDEX 作用:对于打开表时自动打开的复合索引文件确定主索引,也能确定主索引文件.(1 数值表达式表示已打开的索引的序号.系统先为单索引文件编号,故结构复合索引文件的序号比单索引文件大.(2 SET ORDER TO 或 SET ORDER TO 0命令取消主索引和主索引文件,表中记录将按物理记录输出.15、CLOSE INDEX 或 SET INDEX TO 单独关闭索引文件,并不关闭与之相关的表文件
16、FIND、SEEK和LOCATE及CONTINUE 作用:前两个命令FIND和SEEK是在一个已经建立了索引文件的表中,定位到关键字中的内容与命
令行中字符串相同的第一个记录。后一个命令在用USE打开表文件以后,直接查询表中字段内容。
格式:FIND <“字符串”>|<字符串> SEEK <表达式>(表达式的数据类型可为字符型、数字型、日期型和逻辑型。LOCATE [<范围>] [FOR <条件>] [WHILE<条件>] CONTINUE 说明:FIND命令与SEEK命令的区别是前者后跟字符串,而后者后跟表达式。在用LOCATE命令找到
一个匹配记录后,可用CONTINUE命令搜索表的剩余部分来寻找其他匹配的记录。
例:SET ORDER TO NL „确定索引关键字为NL(年龄 FIND 28 „找年龄字段为“28“的记录 DISPLAY „显示当前记录
SET ORDER TO NL „确定索引关键字为NL(年龄 SEEK “28”„找年龄字段为“28“的记录
DISPLAY 17.从磁盘上删除任意文件:(1ERASE filename|?(2DELETE FILE [filename|?]
18、COUNT 作用:统计当前表文件中符合条件的记录数。
格式:COUNT [<范围>] [FOR <条件>] [WHILE<条件>] [TO <内存变量名>] 说明:内存变量名可用除参数外的任意字符。
19、SUM 作用:对当前表中选中记录的全部或指定的数值字段或由指定字段组成的数值表达式累加求和。
格式:SUM [<范围>] [数值<表达式>] [TO <内存变量名表>] [FOR <条件>] [WHILE<条件>] 20、AVERAGE 作用:对当前表中选中记录的全部或部分数值型字段及其组成的表达式求平均值并显示。
格式:AVERAGE [<范围>] [数值<表达式>] [TO <内存变量名表>] [FOR <条件>] [WHILE<条件>]
21、TOTAL 作用:分类汇总命令,按<表达式>做过索引或排序的表文件的数字型字段进行分类汇总。它把与<表达式>值相同的所有记录中的数字字段的值分别进行求和,并各
自作为一条记录存放在由文件指定的文件中去。在新生成的记录中,还将包括与<表达式>值相同的所有记录中的首项记录的其他字段内容。
格式:TOTAL TO <文件名> ON <表达式>[FIELDS <数值型字段名表>][<范围>][FOR <逻辑表达式1>][WHILE <逻辑表达式2>] 例:USE B2-1 INDEX ON 职称 TO ZC TATOL ON 职称 TO B2-1T FILEDS 工资 22.APPEND FROM 作用:从其他文件向表文件添加数据。数据来源文件既可以是表文件,也可是文本文件或其他符合规定的文件。
格式:APPEND FROM <文件名>|?[FIELDS <字段名表>][FOR <逻辑表达式>] FIELDS <字段名表>和FOR <逻辑表达式>,用于源文件为表文件时,指定追加记录的字段和条件。在字段名表和逻辑表达式中的字段名,必须是在来源和目的两个文件中公有的,共注意宽度和类型匹配。实际应用中,数据来源文件常为表文件(.DBF和ASCII码文本文件(.TXT 对于文本文件又有标准格式(SDF和通用格式(DELIMITED之分.例: USE B2-1 APPE FROM S3-1.TXT SDF BROWSE 23.COPY(选择表的部分内容生成一个新表
作用:把打开的表文件结构及数据复制成由<文件名>所指定的并符合规定要求的文件。如果默认全部选择项和文件名的扩展名,则结构及全部数据都被复制,且其文件扩展名由系统规定为“.DBF”。
格式:COPY TO<文件名> [FIELDS <字段名表>][<范围>][FOR <逻辑表达式1>][WHILE <逻辑表达式2>] 格式中的或用来为新表建立一个与原表相同的结构索引.例1: COPY TO B3-2 COPY TO S3-2.TXT SDF 例2: USE RS COPY TO RS3 FIELDS 姓名,基本工资,奖金 USE RS3 LIST 24.COPY FILE复制数据整表:(可用于复制任何类型文件 COPY FILE 原文件名 TO 目标文件名
注:复制表时,还应当复制和它相配的备注文件(.FPT,如有备注字段和结构复合索引文件。
当前表应关闭。(如果已打开表:COPY TO 新文件名 例:将RS.DBF复制为RS1.DBF COPY FILE RS.DBF TO RS1.DBF 或USE RS
COPY TO RS1 USE RS1 LIST 25.COPY STRUCTURE(只复制结构不复制数据
作用:表文件结构复制,生成一个指定文件名和包括指定字段的表文件结构;如有CDX或PRODUCTION选择项还将为新表建立一个与源表相同的结构索引.格式: COPY STRUCTURE TO<文件名> [FIELDS <字段名表>] 例: COPY STRUCTURE TO B3-3 FIELDS 编号,姓名,何时工作,职称 26.copy to建立结构扩展文件
作用:把已打开的表文件的结构作为数据记录复制到由<文件名>指定的库文件中去.格式: COPY TO<文件名> STRUCTURE EXTENDED 例: USE B3-3 COPY TO B3-4 STRUCTURE EXTENDED USE B3-4 BROW 该命令可以用于测试表文件结构,也可以用于顺序方式建立库文件结构.新库文件的结构是一个由系统规定的标准结构,它由4个字段构成: FIELD_NAME 字段名
FIELD_TYPE 字段类型 FIELD_LEN 字段宽度 FIELD_DEC 小数位数 27.常用命令: 库表
建立数据库: CREATE DATABASE 库文件名.DBC 建立表: CREATE 表文件名.DBF CREATE TABLE/DBF 表名(各个字段属性 打开数据: OPEN DATABASE 库文件名 打开表: USE 表文件名
使用非前库的表:USE 库名!表名 打开索引表:USE 表名 INDEX 索引名 显示库信息:DISP DATABASE [TO PRINTER] 显示记录:LIST(快速查看 BROWSE(分屏浏览可修改 DISP(显示当前记录
关闭数据库:CLOSE ALL(关闭所有库、表、索引 关闭表: USE
CLOSE DATABASES(关闭当前库、表 CLOSE TABLES(关闭当前表,不关库 CLOSE INDEXES(关闭当前索引
修改库:MODI DATA 库名 [NOWAIT] [NOEDIT] 修改表结构:MODI STRU ALTER TABLE 表名 ADD 字段名 ALTER TABLE 表名 ALTER 字段名 ALTER TABLE 表名 DROP 字段名 添加表:ADD TABLE 表名追加记录: INSERT INTO 表名(字段名列表 VALUES(对应数值 APPEND APPEND FROM 源文件 移去表:REMOVE TABLE 表名
删除记录:DELETE ALL FOR [条件](逻辑删除 PACK(物理删除 ZAP(全部彻底删除
删除库:DELETE DATABASE 库名(先关闭库 删除表:DELETE FILE 表名(先关闭表 VFP命令、函数及程序语句大全(2
二、常用函数
1、数学函数 函数用途
ABS(<数值表达式>绝对值,|x| CEILING(<数值表达式> >=自变量的最小整数 EXP(<数值表达式>对基E的幂,e=2.71828 FLOOR(<数值表达式> <=自变量的最大整数 INT(<数值表达式>取整(舍尾自变量
LOG(<数值表达式>自变量的自然对数,ln x LOG10(<数值表达式>自变量的普通对数,lg x MAX(<表达式1>,<表达式2>两个值的最大值 MIN(<表达式1>,<表达式2>两个值的最小值 MOD(<数值表达式1>,<数值表达式2>求余数 RAND([<数值表达式1>]返回伪随机数
ROUND(<数值表达式1>,<数值表达式2>四舍五入第一个自变量 SIGN(<数值表达式>自变量的符号 SQRT(<数值表达式>平方根(正根
2、字符串操作函数 函数用途
&<内存变量> 用于代替内存变量内容
LEN(<字符串表达式>返回字符串表达式的字符个数 SPACE(<数值表达式>生成空格
SUBSTR(<字符串表达式>,<数值表达式n>[,<数值表达式L>]求子字符串,从指定的字符串表达式第n个开始,总长为L的字符串
LOWER(<字符串表达式>将字符串字母转换成小写字母 UPPER(<字符串表达式>将字符串字母转换成大写字母 TRIM(<字符串表达式>删除字符串尾空格
ASC(<字符串表达式>返回字符串表达式最左边的第一个字符的ASCII码 CHR(<数值表达式>将数值表达式转换成字符
AT(<字符串表达式1>,<字符串表达式2>[,<数值表达式n>] 确定字符串表达式1在字符串表达式2中的位置,n为字符串表达式第几次出现 STR(<数值表达式>[,<数值表达式L>][,<数值表达式n>将数值转换为字符串,L为数值表达式总长,n为小数位数
VAL(<字符串表达式>将数字字符串转换为数字 TYPE(<表达式>检测表达式值的数据类型 LTRIM(<字符串表达式>删除字符串左部空格 RTRIM(<字符串表达式>删除字符串右部空格
LEFT(<字符串表达式>,<数值表达式n>取字符串左边部分字符,n为返回的字符个数
RIGHT(<字符串表达式>,<数值表达式n>取字符串右边部分字符,n从右边截取字符个数
3、表(.dbf操作函数
函数用途
BOF([<工作区号或别名>]查表文件开始函数 EOF([<工作区号或别名>]表文件结尾测试函数
RECNO([<工作区号或别名>]测试当前或指定工作区表的当前记录号 DELETED([<工作区号或别名>]记录删除测试函数 FILE(<“字符串”>测试文件是否存在函数 DBF([<工作区号或别名>]检测表的文件名函数
4、日期、时间函数 函数用途
DATE(查系统当前日期函数
TIME([<数值表达式>]查系统当前时间函数
YEAR(<日期型表达式>|<日期时间型表达式>由日期查年函数 MONTH(<日期型表达式>|<日期时间型表达式>从日期查月份函数 CMONTH(<日期型表达式>|<日期时间型表达式>由日期查月份名函数 DAY(<日期型表达式>|<日期时间型表达式>从日期查当月的日函数
DOW(<日期型表达式>|<日期时间型表达式>[,<数值表达式>]由日期查星期函数
CDOW(<日期型表达式>|<日期时间型表达式>从日期查星期名函数 DTOC(<日期型表达式>|<日期时间型表达式>日期转换为字符函数
CTOD(<字符串表达式>字符串转换为日期函数 CTOT(<字符串表达式>返回日期时间值函数 TTOC(<日期时间型表达式>返回字符值
5、显示、打印位置函数 函数用途
ROW(判断光标行位置函数 COL(判断光标列位置函数
INKEY([<数值表达式>]检测用户所击键对应的ASCII码函数,数值表达式以秒为单位等待击键的时间
6、其他函数 函数用途
DISKSPACE(返回默认磁盘驱动器中可用字节数函数 OS(检测操作系统名称的函数 VERSION(返回VFP版本号的函数 VFP命令、函数及程序语句大全(3
三、主要程序语句
1、条件判断语句 格式:(1IF <条件> <命令语句组>
ENDIF 说明:如果条件为真,则执行命令语句组中的各语句,否则跳过这些命令语句不执行, 而执行ENDIF后的语句。(2IF <条件> <命令语句组1> ELSE <命令语句组2> ENDIF 说明:如果条件为真,执行命令语句组1,否则执行命令语句组2。(3IF <条件1> IF <条件2> <命令语句组1> ELSE <命令语句组2> ENDIF...ELSE <命令语句组N>
ENDIF 说明:进行多重条件的嵌套选择。(4DO CASE CASE <条件1> <命令语句组1> CASE <条件2> <命令语句组2> CASE <条件3> <命令语句组3>......CASE <条件N> <命令语句组N> [OTHERWISE] [<命令语句组N+1>] ENDCASE 说明:依次判断条件,转入条件为真的命令语句组中执行。当所有条件都不成立时,若有
OTHERWISE项,则执行命令语句组N+1,否则执行ENDCASE后面的语句。
2、循环语句
格式:(1DO WHILE <条件> <命令语句组> [LOOP] <命令语句组> [EXIT] <命令语句组> ENDDO 说明:判断条件是否为真,如为真就重复执行循环体中的命令语句组,直到条 件为假,结束循环。(2)SCAN <命令语句组> ENDSCAN 说明:在一个表中建立一个执行命令语句组的循环,并执行对每一条记录的操 作,直到表文件 记录完为止。
第三篇:VFP对口高考命令-3至5
DO <查询文件名> 功能:运行指定的查询
例:do d:chax1.qpr 运行名为chax1的查询文件
MODIFY QUERY <查询文件名> 功能:打开指定的查询文件 例:modify query d:chax1.qpr 打开名为chax1的查询文件
注:不论用什么方法打开查询文件,VFP都会自动打开查询设计器
SELECT <字段列表> FROM [数据库名!] <表名> [,[数据库名!] <表名>,„] [WHERE 条件] [GROUP BY 分组项列表] [ORDER BY 排序项[DESC]„] [INTO 目标|TO FILE 文件名|TO PRINTER] 功能:从一个或多个表中查询数据
例:select b1.语文,b1.数学,b1.英语 from sjk1!b1 where b1.语文>70 group by b1.语文 order by b1.学号 desc 查询sjk1数据库中的b1表的语文,数学,英语字段中满足语文大于70的数据,按照b1表的语文字段分组,按照b1表的学号排序,且设置排序方式为倒序。
[INTO 目标]的“目标”可以使用如下3种:“ARRAY 数组名”、“CURSOR 表名”、“DBF 表名”。
[ORDER BY[desc]]中若缺省“desc”则按升序排序。否则则按降序排序。[TO PRINTER]:将查询结果送往打印机输出
[TO FILE 文件名]:将查询结果输出到指定的文本文件中
CREATE VIEW <视图名> AS <查询语句> 功能:为当前数据库创建视图 例:open database d:sjk1 打开数据库sjk1
create view st1 as select * from sjk1!b1 为当前数据库创建一个视图st1其功能为“查询数据库sjk1的表b1中所有字段数据”
注:使用上述命令创建的视图还需要在视图设计器中指定可更新字段,才能实现更新数据的功能
DROP VIEW <视图名> 功能:删除当前数据库中指定的视图 例:open database d:sjk1 打开数据库sjk1
drop view st1 删除视图st1 CREATE REPORT <报表文件名> 功能:建立一个空白报表 例:create report d:bb1 建立一个报表bb1
MODIFY REPORT <报表文件名> 功能:打开指定的报表文件 例:modify report d:bb1 打开报表bb1
REPORT FORM <报表文件名> TO PRINTER 功能:打印指定的报表 例:report form d:bb1 to printer 打印报表bb1
MODIFY COMMAND <程序文件名> 功能:建立一个程序文件 例:modify command cx1 建立一个名为cx1的程序文件并打开编写 DO <程序文件名> 功能:运行指定的程序 例:do d:cx1 运行程序cx1
注:如果在A程序中使用命令调用B程序,则B程序称为A程序的子程序,A程序称为B程序的主程序。
VFP中可以使用“*”号和NOTE命令可以给某一行加注释,也可以使用“&&”在语句行后面添加注释。
注:给某一个行加注释就是以“*”或NOTE开头后进行注释,给语句行加注释就是使用“&&”直接在语句后面加上注释,相比来说“&&”注释更加灵活。
例:clear &&清屏
给clear加注释“清屏” 注:注释的作用就是帮助理解程序的功能,以利今后修改程序时提高工作效率,一般注释的内容在VFP中以绿色显示。
CLEAR 功能:清除屏幕上的显示信息 ACCEPT [提示信息] TO <内存变量>
功能:把用户输入的字符串保存到指定的内存变量中
例:accept to x 在屏幕上光标处输入字符串,并将字符串保存到变量x中
accept ”请输入x:” to x
在屏幕上”请输入x:”后输入字符串,并将字符串保存变量x中 INPUT [提示信息] TO <内存变量>
功能:把用户输入的表达式的值保存到指定的内存变量 例:input ”请输入y:” to y 在“清输入y:”后输入数据,并将数据保存到变量y中 注:input与accept的区别是,前者可以输入数值型数据、逻辑型数据,也可输入字符型数据,在输入字符型数据时要加定界符,后者输入的数据都一律被认为是字符型数据,且不用加定界符。
WAIT [提示信息] [TO 内存变量] [WINDOW] [TIMEOUT 时间] 功能:等待用户输入一个字符
例:wait 屏幕上显示“按任意键继续„”,并要求任意输入一个字符以继续
wait “是否继续(Y/N)?” to x window timeout 2 在屏幕右上角中的系统窗口中显示“是否继续(Y/N)?”系统窗口存在2秒,并将输入的字符保存到变量x中
注:wait命令和accept命令中的变量的一定是字符型变量且不用加定界符,而input命令的变量的类型由输入表达式值的数据类型决定。wait命令常用于输入单字符和显示信息,accept命令常用于输入字符串,input命令常用于输入其他类型的数据。
@<行,列> SAY <显示信息> 功能:在指定位置输出信息 例:@1,1 say ”你好” 在第一行第一列显示“你好” @<行,列> [SAY 显示信息] GET <变量> 功能:在指定位置输入数据,并把输入的数据保存在指定的变量 例:@1,1 say”姓名:” get xm
read 在第一行第一列显示“姓名:”并在其后面输入数据并将数据其保存给变量xm 注:该命令需要与read命令共同使用,才能激活命令中的变量,接收输入的数据。注:不与read命令共同使用的话,系统将自动将原先变量的值载入。ROW()功能:返回当前坐标的行坐标 COL()功能:返回当前坐标的列坐标 SET TALK ON|OFF
功能:设置是否显示某些命令执行的结果,ON为显示,OFF为不显示 SET SAFETY ON|OFF
功能:设置删除文件数据时是否显示提示信息,ON为显示,OFF为不显示 CLEAR ALL 功能:清除用户自定义的内存变量和对象 IF <条件>
功能:单分支选择结构
<语句组> ENDIF 例:if x<0 判断x是否小于0,其返回值是.T.或.F.?”x小于0”
返回.T.时执行,执行后执行endif后面的语句
endif
返回.F.时执行endif后面的语句 IF<条件> 功能:双分支选择结构
<语句组1> ELSE
<语句组2> ENDIF 例:if x<0 判断x是否小于0,其返回值是.T.或.F.?”x小于0”
返回.T.时执行,执行后执行endif后面的语句
else
?”x大于等于0” 返回.F.时执行,执行后执行endif后面的语句
endif 注:条件是一个逻辑表达式,其返回值为.T.或.F.。
注:if和endif必须成对使用,分别表示选择结构开始和选择结构结束 DO CASE
功能:多分支选择结构
CASE <条件1>
<语句组1> CASE <条件2> <语句组2> „
CASE <条件n> <语句组n> [OTHERWISE 语句组] ENDCASE 例:do case
case x=1
?”x等于1”
x等于1时执行,执行后执行endcase后面的语句
case x=2 ?”x等于2”
x等于2时执行,执行后执行endcase后面的语句
case x=3
?”x等于3”
x等于3时执行,执行后执行endcase后面的语句
otherwise
? ”x是大于3的数”
x不满足以上的所有条件时执行,执行后执行endcase后面的语句 endcase 注:do case和endcase必须成对使用,分别表示选择结构开始和选择结构结束
DO WHILE <条件> 功能:基于条件的循环结构 <语句组>
ENDDO 例:do while x<10 判断x是否小于10,其返回值是.T.或.F.?”x小于10”
x=x+1
返回.T.时执行,执行完毕后跳回循环开始处(do while <条件>)再次判断条件是不是满足或不满足
enddo 返回.F.时执行enddo后面的语句
SCAN [FOR条件] 功能:针对表记录的循环结构 <语句组> ENDSCAN
例:use d:b1 由于是针对表记录的循环,所以需打开一张表
scan for 性别=”男”
display
每个性别字段等于“男”的记录都会执行一次语句组的语句,全部执行完毕后,执行endscan后面的语句
endscan FOR <变量>=<初值> TO <终值> [STEP 步长] 功能:指定次数的循环
<语句组> ENDFOR
例:s=0 设置累加器s
for x=1 to 11 step 2 给x赋初值1,终值11,其步长为s=s+x
因步长为2,故x的值为1、3、5、7、9、11,s将x从初值1到11的每一步的值都加起来,当x的值下一步大于其终值时,执行endfor后面的语句
endfor 注:do while enddo,scan endscan,for endfor必须成对使用
LOOP 功能:终止本次循环,使程序再次检查是否满足循环条件,以决定是否进行下一次循环即直接跳回循环开始处(如do while <条件>)。
EXIT 功能:结束循环,使程序执行循环结构后面的语句即直接跳到循环结束处(如 enddo)。PROCEDURE <过程名> 功能:定义一个过程 <语句组> ENDPROC 例:procedure x 定义一个过程,过程名为x
display
该过程的语句
endproc
结束过程
SET PROCEDURE TO [过程文件名] 功能 :打开指定的过程文件 例:set procedure to 关闭正在打开的过程
set procedure to d:gc1 打开过程文件gc1 注:缺省可选项则关闭已经打开的过程文件。DO <程序名|过程名> [WITH 参数表] 功能:调用指定的程序,并把指定的参数传递给调用的下级程序。注:缺省可选项,则不传递参数。
PAREMETERS <参数表> 功能:接受上级程序传递来的参数 例:input”你出生的年份:” to c
input”现在的年份:” to n
do c1 with c,n
调用过程c1并传递参数c和n,并执行过程c1的语句
?”你现在”+alltrim(str(n))+alltrim(”岁”)
在屏幕上显示“你现在n(变量)岁”,因n为数值型,所有要用str()函数转换成字符型,用alltrim()函数消除多余的空格
return
procedure c1 定义过程c1
parameters x,y 接收上级传递过来的参数,c对应x,n对应y
y=y-x 即用现在的年份减去你出生的年份,算出要计算的年龄
endproc
结束过程,并将参数y,x的值传递回c,n,此时执行调用该过程之后的语句 注:在这里c,n称为实参,即实际使用的参数。x,y称为形参,即位置相同,形式相同的参数。
CREATE FORM <表单文件名> 功能:创建一个空白表单 例:create form d:bd1 建立一个名为bd1的表单 DO FORM <表单文件名> 功能:运行指定的表单 例:do form d:bd1 运行表单bd1
MODIFY FORM <表单文件名> 功能:打开指定的表单 例:modify form d:bd1 打开表单bd1 Thisform.refresh 功能:刷新表单
Thisform.release 功能:释放并关闭表单,即从内存中清除表单
Thisform.<对象名>.<属性名>=<属性值> 功能:修改或设置表单对象的属性值Thisform.text1.value=”VFP”
这个表单的text1控件的value属性值是”VFP” DO <菜单程序名> 功能:运行指定的菜单 例:do d:cd1.mpr 运行菜单cd1
DO <菜单程序名> WITH this ,T,功能:使用表单调用菜单 例:do d:cd1 with this ,T, 在当前表单上调用菜单cd1
例:5
第四篇:mathematic命令小结
1.初等数学(1).算术函数
Plus(+)加号 Subtract(-)减号
Times(×)乘号, 用空格,* 或者×(Esc * Esc)表示 Divide(/)除号
Power(^)幂, 以上标形式输入,使用 Ctrl+^ Sqrt平方根, 输入 Sqrt[] 或使用 Ctrl+@ expr 直接输入表达式 N[expr]或 expr//N expr的近似值
N[expr,n] n位精度的expr的近似值(2).数学常数
Pi()圆周率(Esc p Esc)
E()自然对数底数(Esc ee Esc)Infinity()无穷大 (Esc inf Esc)I 虚数单位
Degree 度数 °
GoldenRatio 黄金分割 =(1+Sqrt[5])/21.618 EulerGamma 欧拉常数 0.577(3).复数 z=x+I y Re[z] 求z的实部 Im[z] 求z的虚部 Conjugate[z] 求z的共轭 Abs[z] 求z的模 Arg[z] 求z的幅角
Sign[z] 将z单位化(z/|z|)(4).数值函数
IntegerPart[x] x的整数部分 FractionalPart[x] x的分数部分 Round[x] x的四舍五入取整 Floor[x] x的向下取整 Ceiling[x] x的向上取整 Abs[x] x的绝对值
Max[{e1,..., en}] 给出n个数的最大值 Min[{e1,..., en}] 给出n个数的最小值 Sign[x] 符号函数 Boole[x] 布尔函数
UnitStep[x] 阶梯函数(x>=0时为1, x<0时为0)Mod[k, n] k模n(k除 n的余数)Quotient[m, n] m除n的商数(舍弃m/n的小数部分)QuotientRemainder[m,n] m除n的商数和余数的列表 GCD[n1, n2, ] 求n1, n2,...最大公约数 LCM[n1, n2, ] 求n1, n2,...最小公倍数 n!n的阶乘 n(n-1)(n-2)1 n!n的二阶阶乘 n(n-2)(n-4) Binomial[n,m] 组合数(n,m)= n!/[m!(n-m)!Multinomial[n1,n2, ]] 多重组合(n1+n2+ )!/(n1!n2!...)Rescale[x,{xmin,xmax}] IntegerDigits FromDigits(5).一般函数 初等函数
Log[x] 计算表达式的对数函数值 Log[b,x]
计算x以b为底的对数...Sin[x]
计算表达式的三角正弦 Cos[x] 计算表达式的三角余弦 Tan[expr]
计算表达式的三角正切 Cot[expr]
计算表达式的三角余切 Sec[expr]
计算表达式的三角余割 ArcSin[expr] 计算表达式的反三角正弦 ArcCos[expr] 计算表达式的反三角余弦 ArcTan[expr] 计算表达式的反三角正切...Sinh[expr]
计算表达式的双曲正弦 Cosh[expr] 计算表达式的双曲余弦 Coth[expr] 计算表达式的双曲余切 Tanh[expr]
计算表达式的双曲正切 ArcCosh[expr] 计算表达式的反双曲余弦 ArcSinh[expr] 计算表达式的反双曲正弦 ArcTanh[expr] 计算表达式的反双曲正切 Sech[expr]
计算表达式的双曲余割
特殊函数
Zata[expr]
计算表达式的Zata函数 Bessell[expr] 计算表达式的贝赛尔函数值 Beta[expr] 计算表达式的Beta函数值 Gamma[expr] 计算表达式的伽玛函数值 Erf[expr]
计算表达式的误差函数
统计函数
NormalDistribution[,] 正态分布 StudentTDistribution[v] 学生分布 ChiSquareDistribution[v] 2分布 FRatioDistribution[m,n] F分布 UniformDistribution[min,max] 均匀分布 ExponentialDistribution[] 指数分布
LaplaceDistribution[,] 拉普拉斯分布 GammaDistribution, ] 分布 BetaDistribution[, ] 分布 CauchyDistribution[a,b] 柯西分布 BernoulliDistribution[p] 贝努利分布 BinomialDistribution[n,p] 二项分布 PoissonDistribution[] 泊松分布
PDF 求分布的密度函数 CDF 求分布的概率函数 Mean 求均值 Variance 求方差 Quantile 求距 Skewness 求峰度 Kurtosis 求偏度 ExpectedValue 求期望
RandomReal 产生随机实数 RandomInteger 产生随机整数(6).自定义函数
f[x_]:=expr 定义函数f f[x_,y_]:=expr 定义多变量函数f.Piecewise[{{val1,cond1},{val2,cond2},}] 用于定义分段函数 ?f 显示函数的定义 Clear[f] 清除函数f x=value 给x赋值
x=.清除变量x的值
expr/.x->value 用value替换expr中的x(7).表达式化简
Simplify[expr] FullSimplify[exper] Simplify[expr,assum] assum 选项
Element[x,Reals] 或 xReals Element[x,Integers] 或 xIntegers Element[x,Complexs] 或 xComplexs Element[x,Primes] 或 xPrimes Element[x,Rationals] 或 xRationals Element[x,Booleans] 或 xBooleans Assumptions Assumming
2.多项式与有理函数(1).多项式
1、多项式的普通运算 Expand[poly] 展开多项式乘积与乘方 Factor[poly] 对多项式进行因式分解 FactorTerms[poly] 提取数字公因子
FactorTerms[poly,patt] 提取关于patt的公因子
Collect[poly,x] 以x幂的形式重新排列多项式 Collect[poly,{x,y,...}] 以x、y、...幂的形式重新排列多项式 Expand[poly,patt] 展开与patt相匹配的多项式poly
2、得到多项式的结构
PolynomialQ[expr,x] 判断expr是否为关于x 的多项式
PolynomialQ[expr,{x,y,...}] 判断expr是否为关于x,y,...的多项式 Variables[poly] 列出多项式poly中的变量 Length[poly] 列出多项式poly的项数
Exponent[poly,x] 给出多项式poly的x的最高指数 Coefficient[poly,expr] 给出多项式poly中关于expr的系数
CoefficientList[poly,{x,y,..}] 生成多项式poly中关于x、y、...的系数
3、多项式的代数运算
PolynomialQuotient[poly1,poly2,x] 求出关于x的多项式poly1除以poly2的商,忽略余式 PolynomialRemainder[poly1,poly2,x] 求出关于x的多项式poly1除以poly2的余式
PolynomialQuotientRemainder[poly1,poly2,x] 求出关于x的多项式poly1除以poly2的商和余式 PolynomialReduce[poly,{poly1,poly2,...},{x1,x2,...}] PolynomialGCD[poly1,poly2] 寻找两个多项式的最大公因式 PolynomialLCM[poly1,poly2] 寻找两个多项式的最小公倍式 Resultant[poly1,poly2,x] 寻找两个多项式的消元式 Discriminant[poly, x] 给出多项式有根的判别式
PolynomialReduce[poly,{poly1,poly2,...},{x1,x2,...}] 寻找使用ployi表示poly的最小表示式(2).有理式
关于有理多项式的运算
ExpandNumerator[expr] 仅把有理表达式的分子展开 ExpandDenominator[expr] 仅把有理表达式的分母展开 Expand[expr] 仅展开分子,并把分母分成单项 ExpandAll[expr] 同时展开有理表达式的分子和分母 ExpandAll[expr,patt] 仅展开与patt匹配的项 Together[expr] 合并具有相同分母的项
Apart[expr] 以最简分母项和的形式书写表达式 Cancel[expr] 约去分子分母中的公因子
Factor[expr] 将有理式合并,并同时对分子分母因式分解 Numerator[expr] 获取有理表达式的分子 Denominator[expr] 获取有理表达式的分母(3).三角函数表达式
1、三角表达式
TrigExpand[expr] 将三角函数表达式转化为和差
TrigFactor[expr] 将三角函数表达式和差形式转化为乘积形式 TrigReduce[expr] 用倍角的方法化简三角表达式 TrigToExp[expr] 将三角函数表达式转化为指数形式 ExpToTrig[expr] 将指数形式表达式转化为三角函数形式
2、含有复数变量的表达式
ComplexExpand[expr] 展开表达式expr,并假定所有的变量都是实数 ComplexExpand[expr,{x1,x2,...}] 展开表达式expr,并假定x1,x2,...变量都是复数
3.代数方程与不等式(1)代数方程求解
Solve[eq var] 求解方程eqns中的未知变量vars Solve[{eq1,eq2,...},{var1,var2,...}] 求解方程组
Root[f,k] 求解方程f[x]=0的第k个根
Reduce[eqns vars] 给出含未知常数方程eqns所有可能的情况 Eliminate[eqns,elims], 消去方程eqns中变量elims RSolve[eqns,vars[n]] 求递推方程eqns的通解vars[n] Resolve(2)不等式求解
Reduce[{eqns1, eqns2,...}, x] 给出满足不等式eqnsi的x的集合
4.微积分(1).求极限
x0f(x)Limit[f,x->x0] xlimLimit[f,xx0Limit[f,xx0
x0,Direction->1] xx0,Direction->-1] xlimf(x)f(x)
lim(2).求(偏)导
D[exp,x] 计算表达式一阶(偏)导数 D[exp,x1,x2,xn] 计算表达式混合偏导数
D[exp,{x,n}] 计算表达式对x的n阶(偏)导数 D[exp,{{x1,x2,...}}] 计算向量函数(偏)导数
Derivative[n 1,n2,][f] 对f的第一个变量求n1阶导数,第二个变量求n2阶导数,...Dt[exp] 计算表达式的全微分df Dt[exp,x] 计算表达式关于x的全导数df/dx
Dt[exp,x1,x2, xn] 计算表达式关于x1,x2,xn的全导数d/dx1 d/dx2...d/dxn f Dt[exp,x,Constants->{c1,c2,, cn}] 计算表达式关于x的全导数,并指出表达式中 ci为常数 Maximize[f,{x,y,}] 求变量为x,y,函数f的最大值.Maximize[{f,cons},{x,y,}] 求在约束条件cons下函数f的最大值
Minimize[f,{x,y,}] 求变量为x,y,函数f的最小值.Minimize[{f,cons},{x,y,}] 求在约束条件cons下函数f的最小值
FindMinimum[{f,cons},{x,x0},{y,y0}] 求在约束条件cons下函数f的局部最小值(3).求积分 Integrate[exp,x] 求表达式关于x的不定积分
Integrate[exp,{x,a,b}] 求表达式关于x在区间[a,b]上的定积分 NIntegrate[exp,{x,a,b}] 求表达式关于x在区间[a,b]上的数值积分 Integrate[exp,{x,a,b},{y,c,d}] 求x,y在区间[a,b][c,d]上的二重积分 Integrate[Boole*ieq,{x,a,b},{y,c,d}] 求不等式所限制的区域上的二重积分(4).幂级数展开
Series[exp,{x,x0,n}] 对表达式在x0处进行n阶展开
Series[exp,{x,x0,n1},{y,y0,n2}] 对二元表达式在x0,y0处进行n1,n2阶展开 Series1/.x->Series2 将级数Series2代入级数Series1 Normal[exp] 将级数转化为函数表达式(即:除去余项)Residue[exp,{x,x0}] 求exp在x=x0处的留数(5).微分方程
DSolve[eqn,y[x],x] 求解微分方程解y[x] DSolve[eqn,y,x] 求解微分方程解函数 DSolve[{eqn1,eqn2,eqnn},{y1,y2,yn},x] 求解微分方程组的解
DSolve[eqn, y[x1,x2,...], {x1,x2,...}] 求解偏微分方程的解(6).和与积
Sum[f,{i,imin,imax}] 和式
Sum[f,{i,imin,imax,di}] 关于i求和,i的步长为di
Sum[f,{i,imin,imax},{j,min,jmax}] 多重求和
Product[f,{i,imin,imax}] 求积(7).一些用于迭代的函数
Nest[f,x,n] 对x嵌套运用f函数n次 NestList[f,x,n] 产生一n元嵌套列表{x,f(x),f(f(x)),...}。FixPoint[f,x] 求x=f(x)的不动点
FixPointList[f,x] 产生一列表{x,f(x),f(f(x)),...},直到不动点为止 FixPoint[f,x,SameTestComp] 求x=f(x)的迭代,直到满足comp为止 Fold[f,x0,{a,b,...}] FoldList[f,x,{a,b,...}] 产生一列表{x,f(x,a),f(f(x,a),b),...}
5.线性代数
(1).数表与矩阵的输入及其构造
v={a1,a2,...an} 输入一个名为v的n维向量(表),其中ai为数值或为表达式 p={{e11,e12,e1n},,{em1,em2,emn}} 输入一个名为p的m×n矩阵(多维表),其中eij为数值或为表达式 v=Table[f,{i,m}] 输入一个名为v的n维向量(表), 其元素f为i的函数
p=Table[f,{i,m},{j,n}] 输入一个名为p的m×n矩阵, 其元素f为i,j的函数 p=Array[f,{i,m},{j,n}] 输入一个名为p的m×n矩阵,其元素为f[i,j] p=Range[f,{n}] 生成一列表{f[1],f[2],....f[n]} p=DiagonalMatrix[{e1,e2,,en}] 输入一个名为p的n阶对角阵,对角元素为e1,e2,,en
imaxiiminfimaxiiminjmaxjjminf
imaxiiminfp=IdentityMatrix[n] 输入一个名为t的n阶单位阵 p=Table[0,{m},{n}] 输入一个名为t的m×n零矩阵
p=Table[If[i>=j,f,0],{i,m},{j,n}] 输入一个名为p的m×n下三角阵,其元素f为i,j的函数 p=Table[If[i<=j,f,0],{i,m},{j,n}] 输入一个名为p的m×n上三角阵其元素f为i,j的函数 p=Normal[SparseArry[{{i1,j1}->v1,{i2,j2}->v2,...},{m,n}] 构造一矩阵其在ik行jk列的值为vk,其余为0。Tuples Subsets Permutations RandomChoice
(2).矩阵的剪裁
v[[i]](Part[v,i])取出向量v的第i个元素 M[[i,j]] 取出矩阵M的元素m(i,j)M[[i]] 取出矩阵M的第i行 M[[All,i]] 取出矩阵M的第i列
M[ {i1,i2ir},{ j1,j2js }] 取出矩阵M的一个r×s子矩阵,它由i1, 行和 j1, js列相交处的元素构成 M[{Range[ i0,i1],Range[ j0,j1]}] 或Take[M,{i0,i1}, {j0,j1}] 取出矩阵M的一个子块,它由 i0到 i1行和 j0Minors[M,i] 算出矩阵M的一个i×s的i阶余子式矩阵 ArrayRules[M] 矩阵M中非零元素的位置 Tr[M,List] 矩阵M对角线上的元素
M[[i,j]]=v 将矩阵M的i行j列的元素换为v。M[[i]]=v 将矩阵M的i行的元素全换为v。
M[[i]]={v1,v2,...} 将矩阵M的i行的元素全换为{v1,v2,...}。M[[All,j]]=u 将矩阵M的j列的元素全换为u。
M[[All,j]]={u1,u2,...} 将矩阵M的j列的元素全换为{u1,u2,...}。First Last Rest Most Take Drop TakeWhile Append Prepend Insert Delete AppendTo PrependTo RotateLeft RotateRight Reverse
ir 到j1列相交处的元素构成 Partition Flatten Sort Join Riffle(3).矩阵的运算
c*v 常数乘矩阵 v.u 向量内积 Norm[u] 求向量u的模
v*m 向量对应的元素相乘 m.v 矩阵乘向量 m.p 矩阵相乘 Cross[v,v] 向量差积
m*p 矩阵对应的元素相乘 VectorAngle[u,v] 求两向量的夹角 Normalize[u] 将向量u单位化 Orthogonalize[{u,v,...}] 将向两组正交化 Projection[u,v] 求向量u到v上的投影 Outer[Times,m,n] 求矩阵的外积 Transpose[m] 求矩阵的转置 Inverse[m] 求矩阵的逆矩阵 Det[m] 求矩阵的行列式
Minors[m,k] 矩阵所有可能的k*k阶子式 MatrixPower[m,i] 求矩阵m的i次幂
MatrixExp[m] 求以矩阵m作为指数的值 Tr[m] 求矩阵的迹
CharacteristicPolynomial[m,x] 求矩阵的特征多项式。Chop[%] 舍弃上一个输出中的无意义的小量 MatrixPlot[M] 打印矩阵 Map Apply(4).解线性方程组
LinearSolve[m,w] 求解线性方程组m.x=w的解 NullSpace[m] 求矩阵m的零化子空间
RowReduce[m] 用Gauss消元将矩阵m化为对角形式 MatrixRank[m] 求矩阵m的秩
LeastSquares[m,w] 求线性方程组m.x=w的最小二乘解(5).特征值,特征向量及分解
Eigenvalues[m] 求矩阵m的特征值
Eigenvalues[m,k] 矩阵m的最大的前k个特征值 Eigenvectors[m] 求矩阵m的特征向量
Eigenvectors[m,k] 对应矩阵m的最大的前k个特征值的特征向量 Eigensystems[m] 求数字矩阵m的特征值和特征向量 Eigenvalules[{m,a}] 求矩阵m关于a的广义特征值 Eigenvectors[{m,a}] 求矩阵m关于a的广义特征向量 QRDecomposition[m] 求数字矩阵m的QR分解 SchurDecomposition[m] 求数字矩阵m的Schur分解 LUDecomposition[m] 求数字矩阵m的LU分解
CholeskyDecomposition[m] 求数字矩阵m的Cholesky分解 JordanDecomposition[m] 求数字矩阵m的Jordan分解 SingularValues[m] 求数字矩阵m的奇异值分解 PseudoInverse[m] 求数字奇异矩阵m的拟逆
6.数值计算
(1).数据拟合与插值
ff=Table[N[f[x]],{x,n}] 输入名为ff的拟合函数表,变量x在区间[0,n]上,间距为1。fp=Fit[ff,{f1,f2,,fn},x] 建立名为fp的拟合函数,它由f1,,fn的线性组合形成,拟合变量为x。fp=FindFit[ff,form,{pars1,pars2,...},x] 建立名为fp的拟合函数,函数形式form已知,求参数parsi。fp=Fit[ff,Table[x^i,{i,0,n}],x] 多项式拟合的简单输入形式
ff=Flatten[Table[{x,y,f[x,y]},{x,x1,x2,dx},{y,y1,y2,dy},1] 输入名为ff的二元拟合函数表,变量x在区间[x1,x2]上,间距为dx。变量y在区间[y1,y2]上,间距为dy。
fp=Fit[ff,{f1,f2,,fn},{x,y}] 建立名为fp的拟合函数,它由f1,,fn的线性组合形成,拟合变量为x,y。ff={{x1,y1},{x2,y2},,{xn,yn}} 输入名为ff的二元插值函数表 fp=InterpolatingPolynomial[ff,x] 用牛顿法进行多项式插值
ip=Interpolation[{f1,f2,...}] 构造在整数点i处函数值为fi的插值多项式 ip=Interpolation[{{x1,f1},{x2,f2},...}] 构造在点xi处函数值为fi的插值多项式
ip=Interpolation[{{x1,y1,f1},{x2,y2,f2},...}] 对二维整数网格点上值为fij构造插值多项式
ip=ListInterpolation[List,{{xmin,xman},{ymin,ymax},...}] 对二维区域网格点值构造插值多项式
ip=ListInterpolation[List,{{x1,x2,...},{y1,y2...}}] 对二维区域上给定的网格点上值构造插值多项式(2).方程数值解与函数优化
NSolve[poly==0,x] 求多项式方程的解
NSolve[poly==0,x,n] 求多项式方程的解,精度为n。FindRoot[f[x]==0,{x,x0}] 用牛顿方法求方程在x0附近的解
FindRoot[f[x]==0,{x,x0,x1}] 用割线方法求方程在x0、x1附近的解 FindRoot[{f1,f2,...},{{x,x0},{y,y0},...}] 用牛顿方法求方程组在x10,x20,,附近的解 FindInstance[f[x]==0,x] 求方程的任意一特解
FindInstance[f[x]==0,x,dom] 求在给定范围dom内任意特解 FindInstance[f[x]==0,x,dom,n] 求在给定范围dom内任意n个特解 NIntegrate[f[x],{x,xmin,xmax}] 计算一元定积分
NIntegrate[f[z],{z,z0,z1,,zn,z0}] 计算复变函数的回路积分 NIntegrate[f[x,y],{x,a,b},{y,c,d}] 计算二元定积分
LinearProgramming[c,m,b] 求满足m.x>b,x>0约束使c.x最小的x LinearProgramming[c,m,b,l] 求满足m.x>b,x>l约束使c.x最小的x FindMinimum[f[x],{x,x0}] 求函数f(x)在x0附近的局部极小值
FindMinimum[f,{{x,x0},{y,y0},...}] 求函数f在{x0,y0,...}附近的局部极小值 FindMaximum[f[x],{x,x0}] 求函数f(x)在x0附近的局部极大值
FindMaximum[f,{{x,x0},{y,y0},...}] 求函数在{x0,y0,...}附近的局部极大值 NMinimize[f,{x,y,...}] 求多元函数函数f最小
NMinimize[{f,cons} ,{x,y,...}] 求在约束cons下函数f最大值 NMaximize[f,{x,y,...}] 求多元函数函数f最大值
NMaximize[{f,cons}, {x,y,...}] 求在约束cons下函数f最大值值(3).微分方程数值解
NDSolve[equ,y,{x,xmin,xmax}] 给出方程在区间[xmin,xmax]上关于y的数值解。NDSolve[equs,{y1,y2,...},{x,xmin,xmax}] 给出方程在区间[xmin,xmax]上关于函数yi的数值解。NDSolve[equs,u,{t,tmin,tmax},{x,xmin,xmax},...] 给出偏微分方程组上关于函数u的数值解。NDSolve[equs,{u1,u2,...},{t,tmin,tmax},{x,xmin,xmax},...] 给出偏微分方程组上关于函数ui的数值解。y[x]/.solution 得到方程插值形式的解y[x].Plot[Evaluate[y[x]/.solution],{x,xmin,xmax}] 打印出微分方程解的图形
7.绘图
(1).平面图形 显函数绘图
Plot[f, {x, x1, x2}, “选项”] 打印函数f在区间[x1, x2] 上的图形
Plot[{f1, f2,...}, {x, x1, x2}, “选项”] 在同一幅图上打印出函数f1, f2,...在区间[x1, x2] 上的图形 参数方程绘图
ParametricPlot[{x[t], y[t]}, {t, t0, t1}, “选项”] 画出参数形式给出的函数曲线图形 ParametricPlot[{fx, fy}, {u, u0, u1}, {v, v0, v1}, Option] 画出参数形式给出的函数所描述的区域图形 极坐标图形
PolarPlot[r, {theta, theta1, theta2}] 画出极坐标形式给出的函数曲线图形 PolarPlot[{r1, r2,...}, {theta, theta1, theta2}] 同时画出多个极坐标形式给出的函数曲线图形 隐函数图形
ContourPlot[f(x, y)== 0, {x, xmin, xmax}, {y, ymin, ymax}] 打印隐函数f == 0 所描述的曲线图 等高线图形
ContourPlot[f, {x, xmin, xmax}, {y, ymin, ymax}] 打印函数f所对应的等高线图 密度图形
DensityPlot[f, {x, xmin, xmax}, {y, ymin, ymax}] 打印函数f所对应的密度图 区域图形
RegionPlot[ineq, {x, xmin, xmax}, {y, ymin, ymax}] 打印不等式ineq所描述的区域图 Show[{g1, g2,..., gn}, Option] 显示几个已画出的函数图形 离散点图形
ListPlot[{y1, y2,..., yn}] 画出列表形式给出的函数图象(横坐标为整数)ListPlot[{{x1, y1}, {x2, y2},..., {xn, yn}}] 画出表形式给出的函数图象 ListLinePlot[list1, list2,..., Option] ListContourPlot[array] ListContourPlot[{{x1, y1, f1}, {x2, y2, f2},...}] ListDensityPlot[array] ListDensityPlot[{{x1, y1, f1}, {x2, y2, f2},...}] ArrayPlot[array] ReliefPlot[array] MatrixPlot[matrix]
Option选项常用的有: 图形界面选项
Frame-> “True” 给图形加上图框 FrameLabel-> None, FrameStyle-> {}, FrameTicks-> Automatic, FrameTicksStyle-> {}, AspectRatio-> Automatic,Background-> None, GridLines-> None, GridLinesStyle-> {}, ImageSize-> Automatic, Mesh-> None, MeshShading-> None, MeshStyle-> Automatic, 坐标轴选项 Axes-> True, AxesOrigin-> Automatic, AxesStyle-> {}, AxesLabel-> “名1,名2” 是否给坐标轴加上名字 RotateLabel-> True, Ticks-> Automatic, TicksStyle-> {} 图形选项
PlotPoints-> 数字 画图时计算函数的点数
PlotStyle-> RGBColor[a, b, c] 产生彩色图, a, b, c为[0, 1] 中的值 PlotRange-> {y1, y2} 指定函数因变量的区间 PlotLabel-> “图名” 是否给图形加上名字 ColorFunction-> Automatic, ColorFunctionScaling-> True, ColorOutput-> Automatic, Epilog-> {}, Filling-> None, FillingStyle-> Automatic, LabelStyle-> {}, Method-> Automatic, PlotRangeClipping-> True, PlotRegion-> Automatic, Prolog-> {}
ColorFunction-> Automatic, ColorFunctionScaling-> True, ColorOutput-> Automatic, ContourLabels-> None, ContourLines-> True, Contours-> Automatic, ContourShading-> Automatic, ContourStyle-> Automatic, Exclusions-> Automatic, GridLines-> None, GridLinesStyle-> {}, ImageMargins-> 0., ImageSize-> Automatic, LabelStyle-> {}, PlotPoints-> Automatic, PlotRange-> {Full, Full, Automatic}, PlotRegion-> Automatic Prolog-> {}, RegionFunction->(True &), RotateLabel-> True, Ticks-> Automatic, TicksStyle-> {}
(2).空间图形
Plot3D[f[x,y],{x,xmin,xmax},{y,ymin,ymax},Option] 绘制函数z=f(x,y)在给定范围内的三维图形。ParametricPlot3D[{x[t],y[t],z[t]},{t,t1,t2},Options] 绘制三维空间的曲线图。
ParametricPlot3D[{fx[u,v],fy[u,v],fz[u,v]},{u,u1,u2},{v,v1,v2},Option] 绘制三维空间的曲面图 RevolutionPlot3D SphericalPlot3D RegionPlot3D Show[图形名,Option] 显示已绘制好的图形,按特别说明加以修改 CotourPlot3D[f[x,y,z],{x,xmin,xmax},{y,ymin,ymax},{z,zmin,zmax}] 绘制函数f=f(x,y,z)在给定范围内的等值面图。ListPlot3D ListPointPlot3D 绘制3维散点图 ListSurfacePlot3D ListContourPlot3D 8.编程
(1).条件结构
If[cond,then,else,none] 如果cond成立,计算then;不成立,计算else;无法判定,计算none。Which[cond1,value1,cond2,value2,...,True,value] 如果条件cond1成立,计算value1,条件cond2成立,计算value2,...,全不成立,计算value。lhs:=rhs/;cond 如果cond成立,定义lhs为rhs,Switch[expr,form1,valu1,form2,value2,...,_,def] 如果条件cond1成立,计算value1,条件cond2成立,计算value2,...,都不相等,计算def。(2).循环结构
Do[expr[i],{i,min,max,id}] 计算表达式expr[i],i从min到max,步长为id。Do[expr,{n}] 计算表达式expr n次。
While[cond,expr] 只要cond为true,就计算expr。For[start,test,incr,expr] 从start开始计算expr一次,再计算incr一次,直到test为false结束.
第五篇:vfp命令、语句等说明总结
VFP命令、函数及程序语句大全
VFP提供一些简单的程序设计语言命令,包括赋值语句、控制语句、设置命令等,我们可根据某种功能的需要,利用这些命令及数据库操作的有关命令构成语句,分行存在文件中(称为命令文件,以. PRG为扩展名,在项目管理器中标为“程序”)或一些对象的过程或事件处理程序中。如被调用,系统将一条条顺序执行各行命令,如遇到控制语句(IF,DO,CALL,FOR„等),依据控制语句的指定,转移到指定语句再一条条顺序执行。
这些命令书写时,每条语句应在一行中写完,如不能写完,可用分号“;”结束,表示下一行继续。两条语句不能写在一行上。每条语句中命令字及选项中保留字大多数可只书写前四个字符。
一般一个简单的VFP应用系统由若干模块组成,各自完成一定的功能,总的系统用一个总控模块去控制,通过它调用子模块,层层调用以实现全系统的功能。这种结构如图5.4所示。这种方式便于设计、调试,保证程序的正确性,也容易实现模块共亭,实现软件重用,提高程序设计效率。
主模块可由主封面表单、主命令文件和主菜单文件构成;各个模块可由过程、自定义函数、表单、表单集、应用程序或子菜单等构成。
一个表单或一个表单集中可有一到多个用户界面,可设置一到多个命令按钮及其他程序控件,用户可利用按钮及程序控件,产生特定的消息触发执行一个程序,完成一个功能。应用程序是对一个模块编译后的. APP执行文件,“过程”是由命令组成的程序,以RETURN语句结束,它可为另一个程序所调用,调用执行时遇到RETURN语句将返回其调用程序。
图 5.4 VFP程序总体结构
一.变量赋值与显示语句
在项目管理器中选“代码→程序→新建”或在命令框利用命令MODIFY COMMAND建立命令文件。
1.MODIFY COMMAND
意义:创建命令文件。
命令格式:MODIFY COMMAND 文件名
例如:MODIFY COMMAND PROC1
执行此命令后,将进入全屏幕编辑状态。如原已建立了该文件proc1,将调出该文件在屏幕上显示,用户可对之修改。如是新文件,则用户可利用全屏幕编辑键,输入自己的程序。新文件将自动加上扩展名.PRG。
2.DO
意义:执行命令文件程序,有三种方法:①在项目管理器中选“代码→程序→选择程序名→运行”。②在主菜单中选“程序→运行→输入(选择)程序名→运行”。③在程序中或命令窗日中使用DO命令。命令格式:DO 程序名[WITH 表达式表]
程序名可以是上述方式建立的命令文件(.PRG文件)、可执行文件(.EXE文件)、应用程序(.APP文件),及对.PRG文件编译后的文件(.FXP文件)。如调用DO命令时不带扩展名,则按.EXE文件、.APP文件、.FXP文件、.PRG文件的顺序查找同名程序并执行之。
例如:DO PROC1
此外,程序名还可能是菜单程序,调用时必须带扩展名(.MPR)。例如,有菜单程序MAIN.MPR,则可如下调出执行:
DO MAIN.MPR
程序名还可以是事件名或过程名。
其中表达式表由多个表达式组成,用逗号分开,在执行时首先计算各表达式的值,并带入被调程序,被调程序第一句应是LPARAMETERS形参表语句,形参表是以逗号分隔的多个内存变量名,其个数应等于调用时的表达式的个数,执行时,首先用调用语句中各表达式的值对应给它们赋值。
例如:主程序中:DO PROC1 WITH “AB”,21
被调程序:LPARAMETERS M1,X0
执行时,首先完成赋值:M1=“AB”;X0=21,再往下执行。
当使用DO运行一个程序时,包含在其中的命令一直执行,直到下列某一事件发生。遇到RETURN语句,返回到调用程序DO命令的下一句,遇到了CANCEL命令,返回VFP命令状态。遇到QUIT命令退出程序并退出VFP;到达文件尾回到调用前状态;再遇到另一个DO命令,将转人新程序执行。
3.PUBLIC
意义:设置全局性内存变量命令。
格式:PUBLIC 变量名1[,变量名2]„
在不同程序或过程或事件中,同名内存变量的值不一定相同,如要将一个程序(过程、事件)中变量的值传到另一程序(过程、事件)中,可应用上述命令将它定义成全局变量。
4.PRIVATE
意义:设置局部变量的命令。
格式:PRIVATE[ALL[LIKE∣EXCEPT 通配符]∣内存变量表]
其中选项意义:ALL将所有内存变量说明为局部性变量,ALL[LIKE∣EXCEPT 通配符]将变量名能与通配符相匹配的内存变量说明为局部性变量。“ALL EXCEPT通配符”将除了能与通配符相匹配的变量名之外的内存变量说明为局部性变量。在程序中,为了一个程序的运行结果不影响另一个程序的执行,不希望同名变量将值从一个程序带到另一个程序而造成干扰。为此,可将该变量定义成局部性变量。
5.DIMENSION
意义:定义内存变量数组命令,VFP中可定义一维或二维数组。
格式:DIMENSION 数组名(数字表达式1[,数字表达式2])[,数组名2(数字表达式1[,数字表达式2])]„
每个数组的每个元素都可单独使用,如同一个内存变量,称为下标变量,下标起始值为1。
例如,DIMENSION ARRAY1(8,20),X1(30)定义了两个数组,数组名分别为ARRAY1和X1,前一个数组共有20×8=160个元素:ARRAY1(l,l)、ARRAY1(l,2)„„ ARRAY1(l,20),ARRAY1(2,1)„ARRAY1(8,20)。对各元素也可用单下标取用其值,如用ARRAY1(l),ARRAY1(2)„ARRAY1(160)也可访问该数组各元素,与前面双下标表示形式一一对应。
6.PUBLIC ARRAY
意义:定义全局性内存变量数组。
格式:PUBLIC ARRAY 数组名(数字表达式1[,数字表达式2])[,数组名2(数字表达式1[,数字表达式2])]„
7.=
意义:赋值语句。
将表达式的值赋值给一个内存变量。对变量赋值后,该变量类型也即确定为表达式返回值的类型。对一个变量可重复赋值,也可改变变量的类型。但为了保证程序的清晰和结构完整,建议在一个系统中每个变量名应有确定的意义和数据类型。
8.STORE
意义:同时对多个变量赋值命令。
格式:STORE 表达式 TO变量1[,变量2]„
在程序运行时常要求用户输入控制参数或数据,实现此功能语句我们称为人机对话语句。在程序中如插入人机对话语句,用户可借助键盘输入参数或控制量赋值给变量。控制程序走向,或用于不同数据处理。在程序执行到这类语句时,将停止运行,在屏幕上显示命令中附注的提示信息,同时等待用户从键盘输入数据,赋给所指定的变量。完成赋值之后再接着运行下一条语句。在VFP中这类语句可在主控程序中或在调试程序时使用,在表单程序中使用文本框等各种控件及消息框代替它们。
9.INPUT
意义:输入各种类型数据赋给内存变量
格式:INPUT “提示信息” TO 内存变量名
本命令允许输入字符类型、数值类型、日期类型、逻辑类型等不同类型的数据,要求输入数据是字符类型时,数据两端要加定界符,例“张平”;输入数据是日期类型时,要按{MM/DD/YY}或设定的格式,例{12/21/00};逻辑类型按.T.、.F.格式。
用户输入还可以是包括变量名及函数在内的表达式,但变量必须是己赋值的,表达式是可以计算出确定值的。用户输入完后回车表示输入结束。
例:INPUT“请输入初始日期:” TO D1
屏幕上显示:“请输入初始日期:”,光标在此句之后。用户可输入{05/10/96}。
此时用户如果执行命令:?D1
屏幕上将显示:05/10/96
10.ACCEPT
意义:输入字符串赋给变量。
格式:ACCEPT[“提示内容”]TO内存变量名
该命令和INPUT命令区别有两点:
.输入数据均被视为字符类型。
.输入数据两端不需加定界符,如加了定界符,定界符被视作字符串的一部分。
11.WAIT
意义:接收单个字符赋给变量,或中断程序,按任意键后继续。
格式:WAIT [“提示信息”] TO 内存变量名
该命令与ACCEPT命令不同点在于只接收从键盘输入的一个字符,用户输入一个字符后无须回车。该命令也可用在VFP表单程序的某个事件中,用于中断该事件的执行,让屏幕显示程序运行的中间结果,按某个键或单击鼠标后再继续执行。
12.GET
意义:格式化输入数据,给内存变量赋值或修改表中当前记录字段内容。
格式:@ 行号,列号 GET 内存变量名或字段名
[FUNCTION功能代码][PICTURE格式代码][DEFAULT表达式][MESSAGE提示信息]
[RANGE输入值范围下限,输入值范围上限][SIZE文本框高度,文本框宽度][VALID 条件表达式]
该命令可用于对内存变量赋值,也可用于修改当前打开表中当前记录中指定字段的内容。如对内存变量赋值且省略DEFAULT选项,在使用此语句时,必须已对该内存变量赋值。否则按此选项中表达式对内存变量初始化。
本命令执行后只显示内存变量或字段当前值,要到执行命令“READ”时,此语句方被激活,程序停止执行,等待用户从键盘输入数据,直待回车后才继续执行。行号、列号为当前窗口中字符行和列的位置号。行号与列号允许是小数。FUNCTION选项用于对输入内容限制或变化。功能代码:
A:只允许输入内容由字母字符组成,包括不允许空格和标点符号。
B:数值数据左对齐,默认格式为右对齐。
I:文本居中对齐。
J:文本右对齐,默认为左对齐。
Sn:限定文本框中字符个数为n。如S20。
T:去掉前导和后缀空格。
Z:当数值数据值为0时显示空格。
!:把字母字符转换为大写。
PICTURE选项用于限定输入数据的字符类型及大小。功能代码例:
A:该位为字母或数字
L:只允许逻辑数据。
N:该位为字符或数字。
X:任何字符。
I:该位为数字,或数值数据中的符号。
-:标明小数点位置。,:用逗号分隔左右数字。
!:将小写字母转换为大写字符。
例:@3,10 GET x1 DEFAULT 0 PICTURE“9999.99”
此时在屏幕第3行的第10列位置显示方框,其中内容为DEFAULT规定的初始值0.00,如再发出命令:READ,将光标落在尚未激活的第一个方框上等待输入,只能输入数字和符号,且整数部分不多于4位,小数部分不多于2位,否则将提示“请您重新输入”。
RANGE、VALID两个选项用于保证数据完整性,输入数据必须在预定范围内,满足条件表达式要求时,才可完成赋值操作。本语句还有设置字体、字形和颜色的选项。
在VFP中,综合上述人机交互命令尤其是@„ GET命令的功能和特性,设计了文本框、编辑框等类和控件,便之应用更加方便、简单,我们将在下一章中介绍。
程序运行结果一般由输出语句使其显示在屏幕上或输出到其他地方,输出语句可将数据输出到屏幕上显示也可传送给打印机或传送存入到其他文件中。屏幕显示语句在VFP中一般用在主控程序或调试程序时使用。在表单程序中使用各种控件、消息框代替它们。
13.?|??
意义:计算<表达式表>所指定的各表达式的值,并显示在屏幕上。
格式:?表达式1[,表达式2]„
用?时,从下一行第一列起显示结果。用??时,从当前行当前列起显示结果。
14.SAY
意义:格式化输出语句。
格式:@行号,列号 SAY表达式[FUNCTION功能代码] [PICTURE格式代码][SIZE高度,宽度]
有关选项的意义与@„GET命令相似,此外还有关于字体,颜色设置的选项。若发出有SET DEVICE TO PRINTER命令,输出到打印机,否则输出至屏幕上显示。
本语句常与@„ GET语句合用,合用时,行号、列号指SAY内容显示所在行、列号,GET变量内容框将放置在SAY内容之后。二.程序控制命令
1.IF„ENDIF命令
意义:分支条件语句,根据逻辑表达式的值,有选择的执行一组命令。根据条件表达式的值是.T.还是.F.控制程序流向。
格式:
IF 条件表达式
语句序列1
[ELSE
语句序列2]
ENDIF
IF条件表达式语句是条件语句的开始,ENDIF语句是条件语句的终止。语句序列是若干条顺序执行的语句。执行时首先计算条件表达式的值,如结果为“真”(.T.)则执行语句序列l,执行完后退出该语句。如条件表达式不满足,且有ELSE语句和语句序列2,则执行语句序列2。其程序流程图如图5.5所示。
图5.5 分支结构程序流程图
图5.6 主控模块程序流程图
在一个分支控制语句块中可以嵌套另一个IF„ENDIF语句块。【例5.7】主控模块的程序
程序流程图如图5.6所示。编写程序清单如下: CLEAR &&清屏幕
@ 5,27 SAY “设备管理系统” @ 7,36 SAY “主菜单”
@10,21 PROMPT “1.各种查询、屏幕修改”+SPAC(16)@11,21 PROMPT “2.数据编辑”+SPAC(26)@12,21 PROMPT “3.资产统计”+SPAC(26)@13,21 PROMPT “4.报表打印”+SPAC(26)@14,21 PROMPT “5.系统维护”+SPAC(26)MENU TO m_choic &&等待用户输入
IF LASTKEY()=27 &&按Esc键返回VFP
RETURN ENDIF
IF m_choic=1
DO sbcx_sc.spr
ELSE
IF m_choic=2
DO sjbj_sc.spr
ELSE
IF m_choic=3
DO zctj_sc.spr
ELSE
IF m_choic=4
DO bbdy_sc.spr
ELSE
IF m_choic=5
DO xtwh_pg
ENDIF
ENDIF
ENDIF
ENDIF ENDIF RETURN
2.CASE
意义:分情况语句,当求解一个问题存在多种情况,如要求对不同选择执行不同的语句序列,可采用分情况语句。该语句一句中列出许多语句成分,每个语句成分给出一个条件表达式,每次只根据具体条件找出第一个条件表达式值为.T.的语句成分,执行该成分语句中的语句序列后退出该语句。
命令格式:
DO CASE
CASE条件表达式1
语句序列1
CASE条件表达式2
语句序列2
„
CASE条件表达式n
语句序列n
[OTHERWISE
语句序列n+1]
END CASE
执行该语句时,系统逐一计算条件表达式1的值,条件表达式2的值„只要有一个条件表达式的值为.T.则执行其后语句序列,执行它后退出本分情况语句。
如到条件表达式n的值仍均为.F.又有OTHERWISE成分,则执行语句序列n+l,其程序流程图如图5.7所示。
仍如上面主控程序的例子,程序可设计为:
CLEAR &&清屏幕
@ 5,27 SAY “设备管理系统”
@ 7,36 SAY “主菜单”
@10,21 PROMPT “1.各种查询、屏幕修改”+SPAC(16)
@11,21 PROMPT “2.数据编辑”+SPAC(26)
@12,21 PROMPT “3.资产统计”+SPAC(26)
@13,21 PROMPT “4.明细报表打印”+SPAC(22)@14,21 PROMPT “5.系统维护”+SPAC(26)MENU TO m_choic &&等待用户输入
IF LASTKEY()=27 &&按Esc键返回VFP
RETURN ENDIF
DO CASE
CASE m_choic=1
DO sbcx_sc.spr
CASE m_choic=2
DO sjbj_sc.spr
CASE m_choic=3
DO zctj_sc.spr
CASE m_choic=4
DO bbdy_sc.spr
CASE m_choic=5
DO xtwh_pg
ENDCASE
RETURN
图5.7 CASE结构程序流程图
从上面两段程序可见,对于同一个问题,用DO CASE „ENDCASE 语句比IF„ENDIF语句要简洁了并且逻辑关系清晰,因此不容易出错。在分情况语句中也可嵌入分支条件语句及分情况。它本身也可嵌入到分支条件语句中去使用。
在对数据表中数据时,常常每条记录被处理的过程是一样的,处理语句也就大体相同,如果表中有多少记录就写多少条语句是十分困难的,为避免重复书写,可使用循环。
3.DO WHILE„.ENDDO
意义:循环语句,可使多次重复执行同一组语句。格式:
DO WHILE条件表达式
语句序列
[LOOP]
[EXIT]
ENDDO
其中“DO WHILE条件表达式”语句称为循环起始语句,“ENDDO”语句称为循环结束语句,进入此命令时首先检查条件表达式的值是否为真(.T.)。如果是真,则执行语句序列,然后再判断条件表达式的结果,如仍为真,则继续下去。如果为假(.F.)则退出循环,执行ENDDO后面的语句。如果进入本命令一开始,条件表达式的值为假,则语句序列一次也不执行,就直接转入执行ENDDO后面的语句。其中LOOP意义为结束本次循环,返回循环体开始。EXIT意义为结束循环,转入执行ENDDO后面的语句。
LOOP语句和EXIT语句一般用在分支条件语句中,因而语句格式为:
DO WHILE 条件表达式1
语句序列1
[IF条件表达式2
LOOP
ELSE
语句序列2
ENDIF]
[IF条件表达式3
EXIT
ELSE
语句序列3
ENDIF]
ENDDO
其程序流程图如图5.8所示。
在使用时必须保证经有限次循环后条件表达式1应变为假或条件表达式3的值应变为真,使退出循环。否则就可能成为死循环。在条件表达式中的变量称循环变量,在数据库中循环变量可能是内存变量,也可能是表中的指针。必须注意在每次循环过后,循环变量的值都要改变并且是向最终使条件表达式1的值为假或条件表达式3的值变真的方向变化,否则就无法满足前述退出条件。在VFP中有两类特殊用法。
(1)循环变量是指针。该用法中有两种结构①指针首先指向第一条的DO WHILE结构如图5.9所示。②指向满足条件记录的第一条的DO WHILE结构如图5.10所示。
图5.8 DO WHILE„ENDDO结构程序流程图
图5.9 指针做循环变量开始指向第一条时的DO WHILE结构流程图
图5.10 指针做循环变量开始指向满足条件记录的第一条时 的DO WHILE结构流程图
格式1:图5.9实现的语句。
USE(表名)
SELECT工作区别名
GO TOP
DO WHILE NOT EOF()
语句序列
SKIP
ENDDO
在本格式中,循环变量是表中指针,首先让指针指向表的第一条记录,如果不是文件尾,则执行语句序列之后让指针下移一条,再返回判断指针是否指向文件尾。这样一直继续下去直到指针指到最后一条记录的后面,循环结束。
【例5.8】在学生表中有少数学生更换了班级,现要求在屏幕上一屏一屏地显示每个学生的数据,并提问是否修改班级名称,如回答“Y”,则提供修改框。
SET TALK OFF
USE学生
KEY=“Y”
GO TOP
DO WHILE NOT EOF()
@3,10 SAY“姓名:”+姓名
@5,10 SAY“班级:”+班级
@7,10 SAY“出生日期:”+DTOC(出生日期)
@9,10 SAY“是否修改,Y/N?’GET KEY
READ
IF UPPER(KEY)=“Y”
@11,10 SAY“请输入改后班级名称” GET 班级
READ
ENDIF
SKIP
ENDDO
USE
SET TALK ON
格式2:如果只按某个条件查看记录,则可用查找语句开始。图5.10实现语句:
LOCATE FOR条件表达式
DO WHILE NOT EOF()
语句序列
CONTINUE
ENDDO
例5.8中如只查99级学生,显示其姓名则:
LOCATE FOR “99”$班级
DO WHILE NOT EOF()
?姓名
CONTINUE
ENDDO
(2)当于DO UNTIL的循环结构。
有些循环要在执行部分语句之后再根据一个条件表达式判断是否结束,此时循环条件可用常量.T.,见图5.11所示。
图5.11 DO UNTIL结构程序流程图
语句格式: DO WHILE.T.语句序列
IF 条件表达式
EXIT ENDIF
ENDDO
【例5.9】求编写学生表录入新数据的程序,每次录入一条记录,之后提问是否继续,如回答不是“Y”,就停止录入。
SET TALK OFF
USE 学生
KEY=“ ”
DO WHILE.T.APPEND BLANK
@3,10 SAY“姓名:” GET 姓名
@5,10 SAY“班级:” GET 班级
@7,10 SAY“出生日期:”GET 出生日期
READ
@9,10 SAY“否继续?Y/N?” GET KEY
READ
IF UPPER(KEY)<>“Y”
EXIT
ENDIF
ENDDO
USE
SET TALK ON
此语句由用户输入Y或N控制程序结束。
上述第一、二两种格式可以用等价的SCAN循环取代。
4.SCAN„ENDSCAN循环语句
意义:在数据表中循环检查或处理一条条记录。
命令格式一:
SCAN
语句序列
ENDSCAN
此句等价于前述格式1的语句。
命令格式二:
SCAN FOR条件表达式
语句序列
ENDSCAN
本语序等价于前述格式2的语句。有一些循环次数是一定的,或者循环变量的值在每次循环中增加的量是相同的,则可应用FOR循环。
5.FOR„ENDFOR循环语句
命令格式:
FOR内存变量=初始值 TO 终了值[STEP 增量]
语句序列
ENDFOR
此循环以某个内存变量为循环变量,进入循环时首先给它赋初始数值,只要不超过终了值,则执行语句序列。STEP语句为可选项,指示在每次循环后循环变量的增加量。前面执行语句序列之后,将循环变量值增加增量的值,再判断是否超过终了值,这样继续下去直到超过终了值。增量可为正值也可为负值,省略时默认值是1。如增量为正,则当循环变量大于终了值时,循环结柬。如增量为负,则每循环一次,循环变量均减小,减少到小于终了值时循环结束。
例5.8中修改班级名的程序也可写为:
SET TALK OFF
USE 学生
KEY=“ ”
N=RECCOUNT()&&记录总条数
FOR I=1 TO N
@3,10 SAY“姓名:”十姓名
@5,10 SAY“班级:”十班级
@7,10 SAY“出生日期:”+DTOC(出生日期)
@
9、10 SAY“是否修改班级名,Y/N?” GET KEY
READ
IF UPPER(KEY)=“Y”
@11,10 SAY“请输入改后班级名称” GET 班级
READ
ENDIF
ENDFOR
USE
SET TALK ON
使用相对指针,如果打开索引,或某些录入、修改、查询操作使当前指针位置改变都可能引起错误。不如本例中采用物理地址,比较可靠。
【例5.10】要求输入N个学生的总分X,按总分分成优、良、及格、不及格四个等级,统计每个等级的人数。等级划分标准为:90-100分为优,75-89分为良,60-74分为及格,59分及以下为不及格。
SET TALK OFF
DIMENSION M(4)&&定义数组
STORE 0 TO M&&M所有元素初值设为0
x=0
INPUT“学生人数 N=?” TO N&&计数循环
FOR I=1 TO N
?“请输入第”,I,“人的成绩”
@ROW(),20 SAY “X=?” GET X
READ
DO CASE
CASE x>=90
M(l)=M(1)+1&&统计优秀生人数
CASE x>=75
M(2)=M(2)+1
CASE x>=60
M(3)=M(3)+l
CASE x<60 AND x>=0
M(4)=M(4)+1
OTHERWISE
?“输入数据有错,请重输”
I=I-1
ENDCASE
ENDFOR
?“优、良、及格、不及格人数各为”,M(1),M(2),M(3),M(4)SET TALK ON
【例5.11】设有商品表,结构为商品(商品代码,品名,单价,数量,金额),欲对其中部分商品调动单价,为此建立一个调价表,其结构为调价(商品代码,原单价,新单价),编写程序用调价表中新单价数据修改商品表中单价与金额。
SET TALK OFF
SELE 1
USE商品
SELE 2
USE 调价
SCAN
代码1=商品代码
SELE 1
LOCATE FOR商品代码=代码1
IF NOT EOF()
REPL 单价 WITH 调价.新单价、金额 WITH 单价*数量
ENDIF
SELE 2
ENDSCAN
CLOSE ALL
SET TALK ON
本例中设置二个工作区,分别打开二个表,首先在工作区2上利用SCAN循环遍历调价所有记录,对每一记录在商品表中查找有无商品代码标识相同的记录,如有,则用新单价更新原单价,并修改金额。由于在非当前工作区中不能移动指针,不能查询,不能修改数据,因而在转到商品表中查询之前要将商品表所在工作区1设为当前工作区,更新以后又转到工作区2将调价表中指针指向下一条,再准备按第二个品种调价。
在当前工作区中可读取非当前工作区中数据,如本例中用 “调价.单价”这样的格式从工作区2的调价表中读取其中指针所指记录的单价,这种方式称为联访。如此对多个数据表操作十分麻烦,可采用预先建立关联的办法,在一个表中移动指针时,第二个表中指针按关键字保持一致的方式跟着移动。
三.其他常用命令
1.SET RELATION
意义:将当前数据库和“别名”工作区中的表文件关联在一起,当前表文件称为主动表文件,“别名”工作区中的表文件称为被关联表文件,每当主动表文件中指针移动时,被关联表文件中指针也相应移动。
命令格式:SET RELATION TO 字段名 INTO 别名[ADDITIVE]
命令中选用的“字段名”必须同时包含在两个表文件中,且被关联表必须以该字段建立索引文件并打开为主索引文件。每当主动表文件中记录指针移动时,被关联表中记录指针根据主索引文件指引指向与之相匹配(索引字段值等于主动表当前记录该字段的值)的第一条记录。若找不到匹配记录,则指针将指向文件尾,EOF()为真(.T.)
如命令无ADDITIVE选项,在建立关联时将取消当前数据库与其他数据库的任何关联,仅保留一个新关联。而选了此选项,则原有关联均保留,增加一个新关联。
要注意的是,如果对应主动表中某记录在被关联表中找不到匹配记录时,主动表中数据被改为0。例5.11中如果调价表中商品包括商品表中全部商品,利用此命令程序可修改为:
USE 调价&&第一个打开表默认置于1号工作区
INDEX ON 商品代码 TO INDEX1
SELECT 2
USE 商品
SET RELATION TO 商品代码 INTO 调价
SCAN
REPLACE 单价 WITH 调价.新单价,金额 WITH 单价*数量
ENDSCAN
本例中关于被关联表中字段名也可用“区号.字段名”形式对之访问。
不过使用本程序要求两表中内容必须匹配,例如例5.11中如商品只有部分调价,在调价表中只有商品表中部分商品,那么该程序将使商品表中不调价商品单价均变为0。
一般在涉及利用一个表数据修改另一个表数据时,我们以采用SQL语言中修改命令UPDATE比较好。也可采用全联结视图再对之操作。”
2.RUN
意义:在VFP环境中调用DOS命令。·
命令格式:RUN DOS命令或!DOS命令
3.LOAD命令
意义:把汇编或C语言编写并编译的二进制文件调入内存命令。
命令格式:LOAD 二进制文件名
4.CALL命令
意义:执行由LOAD装入内存的二进制代码文件命令。命令格式:CALL 文件名[WITH 字符表达式/内存变量] 其中WITH选项用于向调用程序传递参数。
5.ON ERROR
意义:当出现错误时执行的命令。
命令格式:ON ERROR 命令
其中命令可为任何VFP语句。在程序调试过程中,可在程序中加入此命令,并设计命令处理程序,在其中可加入显示ERROR(),MESSAGE(),LINENO()和PROGRAM()的语句,将错误代码、错误消息、错误行号及程序名称显示出来,以帮助发现错误所在,方便纠正错误。在应用程序中,有时可能出现一些不影响最终结果的错误,我们也可在程序中加入这类错误陷阱,所指定的命令可以是一条无效语句,不让错误影响程序运行。
【例5.12】程序出错时的处理程序及调用方法 主程序:
*---Set system enviroment------
clos data
clea
on erro do showerro with prog(),lineno(),erro(),mess()&&调用出错程序showerro
语句序列
程序出错时的处理程序:
para m_prog,m_line,m_num,m_mess&&传递参数
priv m_odcons&&定义局部变量
m_odcons=set('cons')
set cons off
defi wind erro_win from 0,0 to 14,49;
titl ' 系统错误 ';
colo gr+/b;
shad doub;
in desktop
move wind erro_win cent
acti wind erro_win
@1,4 say ' 错误警告' colo gr+/b
@3,8 say '当前程序无法继续,按<确定>将返回主调!' colo w+/b
@4,4 say '程序建议:稍后再试或与软件供应商联系.' colo w+/b
@6,4 say '出错程序:'+m_prog colo w+/b
@7,4 say '出 错 行:'+allt(str(m_line))colo w+/b
@8,4 say '错误代码:'+allt(str(m_num))colo w+/b
@9,4 say '错误内容:'+iif(len(m_mess)<=28,m_mess,subs(m_mess,1,28)+'...')colo w+/b
@2,3 to 2,wcol()-4 colo w/b
@5,3 to 10,wcol()-4 colo w/b
=opendbf('errosave','errosave','shar')&&存放错误情况
inse into;
dbferrosave(errodate,errotime,erroprog,erroline,errocode,erromess);
valu(date(),time(),m_prog,m_line,m_num,m_mess)
use in errosave
m_readkey=20
m_cnt=1
do while m_readkey=20
if mod(m_cnt,2)=0
@1,6 say ' 错误警告' colo b/b
else
@1,6 say ' 错误警告' colo gr+/b
endi
@wrow()-2,wcol()/2-2 get mb_isee func '*th 确定' defa 1 &&colo sche 13
read cycl modal time 0.4
m_readkey=readkey()
m_cnt=m_cnt+1
endd
set cons &m_odcons
clea wind
close data
clea
retu to master&&返回主程序
6.显示文件目录命令
格式:DIR [<驱动器>][<路径>][<文件名>] 功能:显示指定的磁盘驱动器上的文件名
说明:<文件名>中可带通配符;命令中不指定文件名,则仅仅显示指定目录下的数据表文件名。7.清屏命令CLEAR 格式:CLEAR 功能:清除屏幕 8.总清命令CLEAR ALL 格式:CLEAR ALL 功能:关闭所有打开的数据表文件、索引文件和其他各种文件,清除已有的内存变量 9.SET TALK ON/OFF
四.程序设计基础
程序的概念
命令执行方式:通过命令菜单或直接在命令窗口输命令来执行,执行的结果显示在屏幕上。程序执行方式:以程序的方式来执行。
程序是能够完成一定任务的命令的有序集合,这组命令存放在程序文件(*.prg)中,执行程序时,系统按一定的次序自动执行包含在程序文件中的命令。
程序的特点
可以利用编辑器,方便地输入、修改和保存程序。可以利用多种方式、多次运行程序。可以在一个程序中调用另一个程序。
程序的基本要求
正确性,能实现算法的各个步骤,逻辑上正确,对输入产生的错误有检测措施。通用性,不能只解决一个问题,还考虑解决一类问题。高效率性,编写执行时间短,占用存储空间少的程序。可维护性,程序应易读、易懂、易修改。安全性,必须确保安全、可靠。
程序文件的建立
在项目管理器中和菜单中建立
用命令方式:modify command <文件名>
程序的执行
从“ 程序” 菜单中选择“ 运行” 命令方式:do < 文件名> <文件名>中如果没有指定扩展名,系统将按下列顺序寻找程序文件并执行:.exe-->.app(应用程序)-->.fxp(编译程序)-->.prg
当程序文件被执行时,文件中包含的命令将被依次执行,直到所有的命令被执行完毕中,或者执行到以下命令:
cancel(终止程序执行,返回命令窗口)do(转去执行另一个程序)return(结束当前程序,返回到上级程序,若无上级程序则返回到命令窗口)quit(退出VFP 系统,返回到操作系统)
程序结构
(1)每个程序都必须有1个文件名,文件名由字符、数字或下划线组成,第一个字符必须是字母或汉字,程序扩展名为.PRG(2)程序由若干行数据库命令组成,每行最多写2048个字符,1行只能写1条命令,若把一个命令写成若干行,需在该命令的第1行及中间各行的行尾写“;”号,但最后一行不写。(3)注释行由“*”开头,用以说明程序的名称、功能及其他需要说明的问题,“*”是注释命令,是非执行语句,可以写在程序任一位置。
(4)以“set”开头的命令为环境设置命令,一般出现在可执行语句的前面。(5)每行程序的后部可以写由“&&”号引导的注释。(6)“return”命令是返回命令,表示程序结束。
编写程序的步骤
举例:编写一个简单的程序:给出一个整数,判断是奇数还是偶数。(1)分析任务,确定方法;(2)分解任务,描述算法;(3)编写程序,认真检查;(4)上机调试,纠正错误
流程图
流程图符号的使用规则: 流程线的方向是从左到右,自上而下,非标准流向的流程线要用箭头表示。流程线就尽量避免交叉。
流程图符号内的文字一律从左到右,自上而下书写。流程图符号的注释应写在符号右侧。
出入口处的连接符应使用相同名称,表示把它们连接起来。
子程序、过程和自定义函数
模块化:按适当的原则把一个情况复杂、规模较大的程序系统划分为一个个较小的、功能相关而又相对独立的模块的过程。
模块:一个在结构上相对独立的程序段。可以是子程序、过程或自定义函数。
子程序的基本概念
子程序:总被其它程序调用的,一般不单独运行的一个程序段。
子程序与主程序的关系:是一种调用和被调用的关系。主程序是能调用其他子程序,而不被其他程序调用的程序,凡能被调用的程序都称为子程序。程序中至少应有一个主程序,可以有一个或若干个子程序。子程序的使用
①使用模块化程序设计方法编写程序时,把各个功能划分成若干个功能子模块,把子模块写成一个子程序。
②需要反复调用的情况下,可以写成一个子程序,以节省存储空间。
编写子程序
调用子程序命令格式:
do <子程序名>[ WITH<参数表>] 子程序返回命令
return [ to master ] 表示返回到上一级子程序或主程序。带参数to master表示无论在哪级子程序上,均立即返回主程序。
例
1、对任意给的正整数A、B、C,编写程序计算S=A!+(3/5)B!+(C!/2)调试子程序 联合调试:当主程序和子程序分别编辑完成之后,直接运行主程序。若主程序或子程序有错,再进行编辑、调试、重新运行,直到输出正确结果为止。单独调试:编辑一个模块,调试一个模块,各个模块都调试成功后,加入主程序联调。例
2、根据数据库student.dbf编写一个菜单程序main.prg,完成对数据库查询程序cx.prg和删除程序sc.prg的调用
过程与过程文件
过程是一段程序,它与子程序不同之处在于,子程序是一个独立文件,而过程是过程文件的一个组成部分,可以把多个过程写在一个过程文件中。过程的结构:
procedure <过程名> <过程体> return [to master/to <程序名>] 过程名由用户定义,供调用过程时使用,过程体是一个语句序列,是过程的核心部分,选择to <程序名>表示返回到“程序名”指定的程序。过程文件的结构
procedure <过程名1> <过程体1> return [to master/to <程序名>] procedure <过程名2> <过程体2> return [to master/to <程序名>] „„
procedure <过程名n> <过程体n> return [to master/to <程序名>] 过程文件的调用
在主程序中,调用过程前,首先要打开过程文件。
命令格式:set proc to <过程文件名>
调用后,要关闭过程文件。
命令格式:set procedure to 或 close procedure 过程的调用
格式:do <过程名> 例
3、根据数据库student.dbf编写一个菜单程序gczxc.prg,用过程形式完成对数据库查询程序cx.prg和删除程序sc.prg的调用。
自定义函数命令
命令格式:(1)function <函数名>(2)return <表达式> 基本格式:
function<函数名> parameters <参数表> <语句序列>
return <表达式>
主程序与自定义函数的组织形式:
举例计算组合数的值
编写K!的函数。作业
1、从键盘输入五个数组,每组有六个数据,分别用子程序、过程、自定义函数的方法,输出每组数的最大值和最小值。
2、用子程序、过程、自定义函数三种不同形式对student.dbf数据库编写一个菜单程序:
系统主菜单
1„„追加记录
2„„修改记录
3„„插入记录
4„„删除记录
5„„输出记录
6„„退
出