foxpro常用编程命令及常用函数.docx

上传人:b****4 文档编号:4073998 上传时间:2022-11-27 格式:DOCX 页数:24 大小:33.72KB
下载 相关 举报
foxpro常用编程命令及常用函数.docx_第1页
第1页 / 共24页
foxpro常用编程命令及常用函数.docx_第2页
第2页 / 共24页
foxpro常用编程命令及常用函数.docx_第3页
第3页 / 共24页
foxpro常用编程命令及常用函数.docx_第4页
第4页 / 共24页
foxpro常用编程命令及常用函数.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

foxpro常用编程命令及常用函数.docx

《foxpro常用编程命令及常用函数.docx》由会员分享,可在线阅读,更多相关《foxpro常用编程命令及常用函数.docx(24页珍藏版)》请在冰豆网上搜索。

foxpro常用编程命令及常用函数.docx

foxpro常用编程命令及常用函数

FOXPRO常用编程命令及常用函数

注:

在语法中如用方括号“[]”括起来的词句,表示可以不用。

常用命令

假设(if...endif)假设语句

根据一逻辑表达式的值,有条件的执行一组命令。

语法:

IF逻辑表达式[THEN]

程序组1

[ELSE

程序组2]

ENDIF

参数:

逻辑表达式代表一逻辑值,如果这逻辑值为真,系统执行程序组1,否则不执行程序组1,如果有else及程序组2的话,则执行程序组2,如没有则什么也不执行,直接执行endif后面的语句。

备注:

在if...endif之间还可以有if...endif,即该命令是可以嵌套的。

then可以有也可以没有,对程序没有影响。

else及程序组2可以有也可以没有,但如果有的话,在逻辑表达式的值为假时,程序组2将被执行。

if与endif必须配对使用,即有一个if必须有一个endif,否则程序会出错。

举例:

例1:

假如分数字段的值大于等于90,则让等级字段的值为“优”,并显示该记录。

程序如下:

if分数>=90

replace等级with'优'

display

endif

例2:

在数据库中可以把性别字段设为逻辑型,“真”代表“男”,“假”代表“女”,但显示时不能显示真、假,否则别人看不懂,而应显示男、女,因此我们设一变量xb,根据性别字段的具体值,将xb的值设为男或女,然后在需要的时候显示xb的值即可。

程序如下:

if性别

xb='男'

else

xb='女'

endif

其中第一句:

if性别,表示“假如性别为真”的意思,不要写成“if性别=.t.”。

以上程序也可以写成如下形式,效果相同:

if.not.性别

xb='女'

else

xb='男'

endif

即,假如性别不为真的话,xb的值就为女,否则为男。

循环(dowhile...enddo)循环语句(dowhile...enddo)

根据条件重复执行一组程序。

语法:

DOWHILElExpression

Commands

[LOOP]

[EXIT]

ENDDO

参数:

lExpression为一逻辑表达式,其值如果是“真”,即执行commands程序组,如果表达的值为“假”,则跳过该段程序组,执行enddo后面的语句。

Commands当表达式lExpression值为真时所要执行的程序组。

LOOP此为dowhile...enddo命令的一个子句,它可以放在commands程序组中间的任何地方,当程序一旦执行到该子句时,则返回dowhile重新执行。

此子句根据需要可以有,也可以没有。

EXIT与loop一样是dowhile...enddo命令的一个子句,它可以放在commands程序组中间的任何地方,当程序一旦执行到该子句时,则跳出循环,执行enddo后面的语句。

此子句根据需要可以有,也可以没有。

备注:

程序一旦执行到dowhile语句,如果lExpression的值为真,则执行commands程序组,该程序组执行完后,就到enddo语句,enddo会将程序返回dowhile再次验证lExpression是否为真,如仍是,则又一次执行commands,如此循环往复,直到lExpression为假,或遇上exit语句。

该语句可以嵌套,即循环中还可以有循环。

dowhile与enddo必须配对使用,即有一个dowhile必须有一个enddo否则程序会出错。

举例:

例1:

在数据库中不断将记录指针往下移,直到数据库结尾。

程序如下:

dowhile.not.eof()

skip

enddo

例2:

在上面的例子加入此功能,当遇到性别字段为“女”时,跳出循环。

程序如下:

dowhile.not.eof()

if性别='女'

exit

endif

skip

enddo

例3:

不断将记录指针往下移,当遇到数量字段的值大于等于600时退出循环,如遇到值小于400的,将其值乘2,然后再检验一次是否大于600,如是则退出循环。

程序如下:

dowhile数量<600

if数量<400

replace数量with数量*2

loop

endif

skip

enddo

分支语句(docase...endcase)

根据不同的条件执行不同的程序组。

语法:

DOCASE

CASE逻辑表达式1

程序组1

[CASE逻辑表达式2

程序组2

...

CASE逻辑表达式n

程序组n]

[OTHERWISE

程序组0]

ENDCASE

参数:

CASE逻辑表达式程序组...当程序执行到docase时,便检验第一个case的逻辑表达式(逻辑表达式1)是否为真,如不为真,接着检验第二个case的逻辑表达式,以此类推直到逻辑表达式n。

当检测到第一个为真的逻辑表达式时,便执行跟随在其后面的程序组,执行完后跳过后面所有的case,接着执行endcase后面的语句,也就是说即使后面还有为真的逻辑表达式也不执行了。

如果所有case后面的逻辑表达式都为假,则执行otherwise后面的程序组(如果有的话,otherwise及其程序组是可以没有的,如果没有则什么都不做,直接执行endcase以后的程序)

备注:

在docase和endcase之间可以有任意多个case。

docase和endcase必须配对使用,即有一个docase必须有一个endcase,否则程序会出错。

举例:

如果工资在200元以下,增加50%;300元以下,增加30%;500元以下,增加20%;其它增加10%。

程序如下:

docase

case工资<=200

replace工资with工资*1.5

case工资<=300

replace工资with工资*1.3

case工资<=500

replace工资with工资*1.2

otherwise

replace工资with工资*1.1

endcase

在这里要注意一个问题,不能把300元的case放在200元之前,否则一个100元的,按理应加50%,但当遇到小于300元的case时,其逻辑表达式为真(小于200元的肯定小于300元),因此就会执行后面的程序,加30%,并且执行完后,就不再执行其它的case了,这样就产生了错误的结果,所以应按从小到大的顺序来排列。

赋值语句(store...to)

将一个数据赋给一个变量。

语法:

STORE表达式TO变量名表

参数:

表达式的值即为要赋给变量的数据。

变量名表即为要被赋值的各变量。

在这里可以是一个变量,也可以是多个变量,如果有多个变量,其间用“,”(逗号)隔开。

备注:

如果是给一个变量赋值,该语句可写成如下形式:

变量名=表达式

表达式可以是一个数值,也可以是一个算术式。

举例:

例1:

将3赋给ab、xyz、jfz三个变量,程序如下:

store3toab,xyz,jfz

例2:

将变量gz的值加100赋给yfgz。

程序如下:

yfgz=gz+100

调用表单(doform)调用表单语句

运行一个由表单设计器设计的表单文件。

该文件是经编译过的。

语法:

DOFORM表单文件名[NAME变量名[LINKED]]

参数

表单文件名即是要运行的由表单设计器设计的表单文件名称。

变量名为调用该表单所用的变量名称,做为表单,不能直接用这的名称去调用它,必须将其赋给一个变量,然后用这个变量来调用它。

如果您不会在这个表单之外调用它,也可以不要这个变量。

在程序中产生的所有变量在程序运行结束后将被释放,即这些变量不再存在,因此也就无法继续调用这些变更,如果为了调试程序需要在程序运行结束后在命令窗口中调用这个表单,必须加上linked子句。

举例:

在程序中调用xy7表单,并将赋给一个变量lucky,程序如下:

doformxy7namelucky

调用子程序语句(do)

运行一个VFP程序。

当我们要在一个程序中调用另一个程序(子程序)时使用此命令。

语法:

DO程序名

参数:

程序名即为被调用的程序名称。

备注:

如被调用的程序的扩展名是“prg”,调用时可不用带扩展名,否则要带上扩展名。

举例:

有一个程序,名称为xy7.prg,调用它的程序如下:

doxy7

返回调用程序语句(return)

返回调用本程序(该语句所在程序)的程序。

前面讲过调用子程序的语句,从一个程序A调用另一个程序B后,系统便开始执行B程序中的语句,到一定时候往往要从程序B返回程序A,便可使用该语句。

语法:

RETURN

备注:

程序A调用程序B,当从B返回A后,系统接着执行调用语句(dob)下面的一条语句。

举例:

程序a.prg如下:

dowhile.not.eof()

if工资<100

dob

endif

skip

enddo

程序b.prg如下:

replace工资with工资*1.5&&将工资增加50%

display&&显示出该记录,这样可以将所有增加了工资的记录显示出来

return

首先执行程序a.prg,当程序执行到dob语句时,便转去执行程序b.prg,在程序b中执行到return语句时,又返回程序a,并接着执行dob的下一条语句endif。

启动事件处理语句(readevents)

启动VFP的事件处理程序。

语法:

READEVENTS

备注:

当该命令执行后,系统即停止继续执行后续的语句,这时我们可以调用之前所启动的菜单、表单等对象,并用这些对象的事件程序去完成相应的任务,直到发出clearevents命令,系统才接着执行readevents后面的命令语句。

可能初学者看了上面的内容还不是很清楚,不要紧,我们在后面课程中会进一步讲解。

清除事件处理语句(clearevents)

终止由readevents语句启动的事件处理程序。

语法:

clearevents

备注:

发出该命令后,系统将继续执行readevents之后的语句。

开关命令执行状态语句(settalkon/off)

确定是否显示VFP命令执行的状态。

语法:

SETTALKON|OFF

参数:

ON显示VFP命令执行的状态。

OFF不显示VFP命令执行的状态。

备注:

使用时,on、off二者之中必须选择一个。

很多VFP命令执行后,会显示执行后的结果状态,如locatefor命令执行,如找到记录的会显示被找到的记录号,否则会显示“已到文件尾”,但一般我们在程序中是不需要这些显示的,比如找到了记录就直接显示出来,没找到一般用一个对话框来给出更清楚的提示,所以在程序一开始往往要将settalk关闭。

结束程序语句(cancel)

结束当前正在运行的所有程序,返回VFP或操作系统。

语法:

cancel

备注:

应该不需要多说了吧。

常用函数数值转换字符函数(str())

返回与指定数值表达式对应的字符。

语法:

str(数值表达式[,长度[,小数位数]])

返回值的类型

字符型

参数:

数值表达式:

要被转换为字符的数值表达式。

长度:

转换后字符的长度。

该长度等于小数点和小数点右边第个数字所占字符的数目总和。

如果指定长度大于所需长度,自动在前面加空格补齐。

如果指定长度小于所需长度,返回一串星(*)号,表示数值溢出。

如省略长度,则默认长度为10。

小数位数:

指定返回字符串中的小数位数。

如指定位数小于实际位数,则返回值四舍五入。

如指定位数大于实际位数,则加0补齐。

如省略小数位数,默认为0。

在指定了小数位数的情况下,如指定长度(第二个参数)小于总长度,但大于整数长度,则返回对小数部分做了四舍五入的字符。

备注:

返回后的值看起来还是数的形式,但它的数据类型已经变了,不再是一个数值,也就是不能再用来做加、减、乘、除的算术运算,但可以和字符进行加减。

比如:

?

'季度'+1

就会出错,因为一个字符是不能和一个数值相加的。

写成如下形式就可以了:

?

'季度'+str(1,1)

结果是:

季度1

注意,这里一定要指定长度,否则由于默认长度是10,就会出现如下结果:

季度1

假如不知道数值有几位数怎么办呢?

请参见ltrim()函数。

字符转换数值函数(val())

将数字组成的字符表达式转换成数字值。

语法:

val(字符表达式)

返回值的类型

数值型

参数:

字符表达式:

要被转换为数值的字符表达式。

该表达式由最多16位的数字组成,若超过16位,则对其圆整。

备注:

val()函数从左到右返回字符表达式中的数字,直到遇到非数值型字符(忽略前面的空格)时为止。

若字符表达式的第一个字符不是数字,也不是正、负号,则返回0。

举例:

a='123'

如果按下面的写法,就会出错,因为一个字符不能与一个数值相加:

?

a+3

写成如下形式便可以了:

?

val(a)+3

结果是126。

取系统日期函数(date())

返回由操作系统控制的当前系统日期。

语法:

date()

返回值的类型

日期型

取年份函数(year())

从指定的日期表达式中返回年份。

语法:

year(日期表达式)

返回值的类型

数值型

参数:

日期表达式:

指定的日期表达式,该函数即是返回其年份值。

举例:

?

year(date())

如果当前的系统日期是1999年2月5日,则显示的结果为1999。

取月份函数(month())

从指定的日期表达式中返回月份。

语法:

month(日期表达式)

返回值的类型

数值型

参数:

日期表达式:

指定的日期表达式,该函数即是返回其月份值。

举例:

?

month(date())

如果当前的系统日期是1999年2月5日,则显示的结果为2。

取天日函数(day())

以数值型返回日期表达式是当月的第几天。

语法:

day(日期表达式)

返回值的类型

数值型

参数:

日期表达式:

指定的日期表达式,该函数返回该日期是当月的第几天。

举例:

?

day(date())

如果当前的系统日期是1999年2月5日,则显示的结果为5。

取整函数(int())

返回数值表达式值的整数部分。

语法:

int(数值表达式)

返回值的类型

数值型

参数:

数值表达式:

指定的数值表达式,该函数返回其整数部分。

举例:

?

int(123.47)

结果是123。

四舍五入函数(round())

对指定表达式进行四舍五入运算,并把结果返回。

语法:

round(数值表达式,小数位数)

返回值的类型

数值型

参数:

数值表达式:

指定的数值表达式,该函数返回其四舍五入后的值。

小数位数:

保留的小数位数。

举例:

?

int(123.457,2)

结果是123.46。

删除标记函数(delete())

确定当前记录是否已做删除标记,若已做删除标记,返回真(.t.),否则返回假(.f.)。

语法:

delete([表别名|工作区])

返回值的类型:

逻辑型

参数:

表别名|工作区:

该参数指定所要确定的表的别名或所在工作区,即您可以在一个工作区去检测另一工作区的表的记录是否做了删除标记,而另一工作区的表可用其别名或工作区号来指定。

该参数如省略,隐含为当前工作区,如有该参数的话,别名或工作区只选一个。

记录号函数(recno())

返回当前表或指定表中的当前记录号。

语法:

recno([表别名|工作区])

返回值的类型:

数值型

参数:

表别名|工作区:

该参数指定所要确定的表的别名或所在工作区,即您可以在一个工作区去得到另一工作区的表的当前记录号,而另一工作区的表可用其别名或工作区号来指定。

该参数如省略,隐含为当前工作区,如有该参数的话,别名或工作区只选一个。

记录数函数(reccount())

返回当前表或指定表中的记录数目。

语法:

reccount([表别名|工作区])

返回值的类型:

数值型

参数:

表别名|工作区:

该参数指定所要确定的表的别名或所在工作区,即您可以在一个工作区去得到另一工作区的表的记录数,而另一工作区的表可用其别名或工作区号来指定。

该参数如省略,隐含为当前工作区,如有该参数的话,别名或工作区只选一个。

找到记录函数(found())

如果locate、continue、seek等查找记录的命令成功(即找到了记录),该函数返回“真”(.t.),否则返回“假”(.f.)。

语法:

found([表别名|工作区])

返回值的类型:

逻辑型

参数:

表别名|工作区:

该参数指定所要确定的表的别名或所在工作区,即您可以在一个工作区知道另一个工作区上次查找记录是否找到,而另一工作区的表可用其别名或工作区号来指定。

该参数如省略,隐含为当前工作区,如有该参数的话,别名或工作区只选一个。

举例:

locatefor姓名='庄稼'

?

found()

如找到记录,显示结果为.t.,否则为.f.。

表结尾函数(eof())

确定记录指针是否在表的结尾处。

语法:

eof([表别名|工作区])

返回值的类型:

逻辑型

参数:

表别名|工作区:

该参数指定所要确定的表的别名或所在工作区,即您可以在一个工作区知道另一个工作区表的指针是否在尾部,而另一工作区的表可用其别名或工作区号来指定。

该参数如省略,隐含为当前工作区,如有该参数的话,别名或工作区只选一个。

备注:

这里所说的结尾处,并非是指最后一个记录,而是最后一个记录的后面,即没有记录。

举例:

gobottom

skip

?

eof()

显示结果为.t.。

如果没有skip,仅仅走到最后一个记录,返回的将是.f.,而必须再往下跳一下才会是“真”结尾。

此时如输入命令:

display,则没有记录显示。

这一点与bof()函数不同。

表开头函数(bof())

确定记录指针是否在表的开头。

语法:

bof([表别名|工作区])

返回值的类型:

逻辑型

参数:

表别名|工作区:

该参数指定所要确定的表的别名或所在工作区,即您可以在一个工作区知道另一个工作区表的指针是否在开头,而另一工作区的表可用其别名或工作区号来指定。

该参数如省略,隐含为当前工作区,如有该参数的话,别名或工作区只选一个。

备注:

这里所说的开头,并非是指第一个记录,而是第一个记录的前面。

举例:

gotop

skip-1

?

bof()

显示结果为.t.。

如果没有skip-1,仅仅走到第一个记录,返回的将是.f.,而必须再往上跳一下才会是“真”开头。

但与eof()函数不同,此时如输入命令display,将显示第一条记录。

消除后续空格函数(trim())

将字符表达式的后续空格全部删除,并将结果返回。

语法:

trim(字符表达式)

返回值的类型:

字符型

参数:

字符表达式:

指定的字符表达式,该函数将删除其后续空格。

备注:

trim()函数等同于rtrim()函数。

举例:

如表的“姓名”字段长度为10,当前内容为“张三”,那么如下语句:

?

姓名+'先生:

'

其显示结果是:

张三先生:

而语句:

?

trim(姓名)+'先生:

'

显示结果是:

张三先生

消除前导空格函数(ltrim())

将字符表达式前面的空格全部删除,并将结果返回。

语法:

trim(字符表达式)

返回值的类型:

字符型

参数:

字符表达式:

指定的字符表达式,该函数将删除其后续空格。

举例:

在讲str()函数时我们举过一个例,即把一个字符与一个数值相加时,应采用如下形式:

?

'季度'+str(1,1)

但是当我们没有办法确定这个数值的位数时,这个办法就行不通了,您不可能规定它的长度只能是1或2等等。

那么怎么办呢,采用ltrim()函数可以解决了:

?

'项目'+ltrim(str(sz))

这里假设事先已有一个数值存入了sz变量,但不知道这个数值是几,也就更不知道有几位数,那么在隐含状态下,str()函数将把sz转换为长度为10的字符,其前面可能有若干空格,通过ltrim()函数的处理,不论前面有多少空格,都可以得到如下结果(假设数值是15):

项目15

使用FOXPRO编一个完整的软件其实这个标题说的不太严密,因为任何一个能够正常执行的软件都可称之为完整的软件,而我们这里的意思是:

一个有菜单、有数据库(表)、各种输入输出、打印等较完整功能的软件。

那么编个什么软件呢?

我们就编个人事管理软件吧。

当然为了简便起见,这软件中的人事档案是很不完全,但完全可以说明软件编制的整个过程。

第一步:

在硬盘上建一个目录,如d:

\rsgl。

第二步:

启动foxpro系统,建一个项目管理器,存在上面的目录里,就如同在第二课中一样,管理器的名称也叫“rsgl”。

第三步:

做一个小小的系统分析。

很多人喜欢拿到软件马上就开始编,这种习惯很不好,因为我们必须首先搞清楚这个软件有些什么功能、需要些什么表、有什么报表需要打印等等,这样才能使整个软件开发的过程比较顺利,否则会给后面的软件开发、修改、维护等带来无穷后患,严重时可能导致开发失败。

因此我们不管开发什么软件,都应该先做系统分析,即使简单做一下也比不做好,要知道“磨刀不误砍柴功”。

第四步:

编制菜单。

第五步:

编制数据库及表。

第六步:

编制各功能模块。

第七步:

编制打印报表。

【下载人事管理程序源代码】

注意:

1、当您第一次打开源代码中的项目管理器时,如果其所在的目录

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

当前位置:首页 > 农林牧渔 > 林学

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

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