欢迎来到天天文库
浏览记录
ID:6013221
大小:34.50 KB
页数:3页
时间:2017-12-30
《foxpro 宏替换的应用》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、Foxpro宏替换的应用责任编辑:admin 更新日期:2005-8-6这一章我们来学习FOXPRO的一个十分强大而又非常容易掌握的功能:宏替换。就从名字上看来这不是个容易对付的家伙,在开始讲宏替换之前,让我们先来看一看这样的一个例子:假设我们有两个表,1997级学生成绩表(1997.DBF)和1999级学生成绩表(1999.DBF)。这时我们要求用户在浏览表之前先输入年份,以便我们来打开用户指定年度的学生成绩表。也许你会说:“这太容易了,俺会呀”然后给出下面的方案:先用一个文本框来接收用户的输入的年份,然后调用下面的代码来打开表:DOCASE
2、CASETHISFORM.TEXT1.VALUE='1997'USE‘1997.DBF'CASETHISFORM.TEXT2.VALUE='1999'USE'1999.DBF'ENDCASEBROW不错,您的这段代码表面上是达到了要求。但是它存在着几个问题:问题1:当学生成绩表很少时(如:上例只有1997.dbf和1999.dbf两个表),用上面的代码可以轻松摆平。但是如果表很多时,假设有十个年度的学生成绩表(1980.DBF---1990.DBF)。这下惨了,代码就会变成下面的样子:DOCASECASETHISFORM.TEXT1.VALUE
3、='1980'USE'1980.DBF'CASETHISFORM.TEXT2.VALUE='1981'USE'1981.DBF'CASETHISFORM.TEXT2.VALUE='1982'USE'1982.DBF'CASETHISFORM.TEXT2.VALUE='1982'USE'1982.DBF'…………*为了节省你的网费,我的纸,我就不继续打了,我想您应该明白哪些麻子……代表什么了吧……ENDCASE这样一来代码非常的冗长。但这还不是最糟的,更惨的在下面(天啊~~)。问题2:当随着学生的升学,用来保存学生每年学习成绩的表也会动态的增加,
4、这时上面的代码就完全失去了做用。用上面的代码无法预先知道到底会有多少个学生成绩表,也就不可能事先设N个CASE来判断年份了。宏替换:“不要担心,少要害怕,俺宏替换来也”。宏替换是FOXPRO为我们提供的一项强大的功能。它的运算符是“&”,作用就是提取字符串的现值,返回值是字符串常数。看到这里您的第一反应可能会是:“WHAT?什么乱七八糟的,你说的是什么意思?”。别忙,接着往下看您就明白了。下面就让我们用宏替换功能来完成上面例子的功能,是又好又省事儿,包您满意。这次假设我们有20个表(1980.DBF一2000.DBF)分别存放每一年的学生成绩,
5、放心我们绝对不会用20个CASE的:C_YEAR=THISFORM.TEXT1.VALUE&&用变量C_YEAR来接收用户输入的年份。USE&C_YEAR*上面这一句利用宏替换来根据C_YEAR的值来找打开对应的表,等价于*Use‘1999.dbf',只不过引号的表名是随C_YEAR的值而变罢了BROW搞定,收工。嘿。。。。。。。。怎么样,是不是又省时又省力呀?再看下面的例子:a='b'b='庄稼'?a&&显示的结果是“b”?&a&&显示的结果是“庄稼”也就是说宏替换将当前变量的值作为真正需要的变量,并返回这个变量的值。VFP的很多命令的某些地
6、方不能使用变量,比如上面的use命令,你不能写成:a='1997.dbf'usea这样就成了打开a这个表,这时就必须用宏替换,use&a类似的还有当locatefor后面跟的条件不是固定的,你的程序可以允许操作者选择不同的字段来查询,可能是:姓名=...也可能是:电话=...你不能直接把for后面的内容整个作为一个变量,这时宏替换也可以起作用,你可以把条件整个放入一个变量,比如字段名放在一个变量中zdm,要查的内容放在nr:tj=zdm+"'"+nr+"'"locatefor&tj如果这时zdm='姓名',nr='庄稼',这就相当于:locat
7、efor姓名='庄稼'那么只要tj的内容是个正确的逻辑表达示,不论是什么内容都可以运行,这将给编程带来很大方便。多学一招你甚至可以把整条语句放入一个变量:tj="locatefor"+zdm+"'"+nr+"'"&tj怎么样,酷吧!注意值得注意的是,宏替换&不能递归的引用自已。比如下面的用法就是错误的:STORE“&ZL”TOZL?&ZL赋值语句与宏替换巧妙地组合,能实行灵活的查询和程序控制,提高程序通用性,使程序更加简练,运行效率更高,龙其在处理一些不确定对象时,宏替换将扮演非常重要角色。最后补充一点,虽然宏替换功能强大,但是也不要太频繁使用
8、,正是由于宏替换灵活性,使得它执行时要进行一些转换,如果太多的使用宏替换可能会影响程序的性能。所以在一些不是必须的场合下,尽量避免使用宏替换,就象好吃
此文档下载收益归作者所有