主题:奇妙的宏替换
moz
[专家分:37620] 发布于 2007-06-09 16:34:00
VFP的宏替换,的确是一样很莫名其妙的东西.
因为有了宏替换,VFP比很多语言都危险得多,也方便得多.
有一道算式:
1 2 3 4 5 6 7 8 = N
上算式中的N由键盘给出(1<=N<=100),请在算式的每个空挡内都填入+、-、*、/四种运算符中的任意一个,使结果等于N
n1=VAL(INPUTBOX("输入目标值N:","输入"))
a1="1"
For i = 2 To 8
a1=a1+" "+LTRIM(Str(i))
Next
For i1 = 0 To 4 ^ 7
f1=i1
FOR j1=1 TO 7
a1=Stuff(a1,j1*2,1,SUBSTR("+-*/",MOD(f1,4)+1,1))
f1=INT(f1/4)
ENDFOR
IF n1=&a1 [color=ff00ff]用其他语言可要费一番周折.[/color]
MESSAGEBOX(a1)
EXIT
ENDIF
NEXT
回复列表 (共32个回复)
沙发
cbl518 [专家分:57140] 发布于 2007-06-09 17:22:00
用 EVALUATE() 函数比 & 快的多,可靠的多。
n1=VAL(INPUTBOX("输入目标值N:","输入"))
a1="1"
For i = 2 To 8
a1=a1+" "+LTRIM(Str(i))
Next
For i1 = 0 To 4 ^ 7
f1=i1
FOR j1=1 TO 7
a1=Stuff(a1,j1*2,1,SUBSTR("+-*/",MOD(f1,4)+1,1))
f1=INT(f1/4)
ENDFOR
IF n1=[color=FF0000]EVALUATE(a1)[/color] && 用其他语言可要费一番周折.
MESSAGEBOX(a1)
EXIT
ENDIF
NEXT
板凳
北京种子乐 [专家分:3710] 发布于 2007-06-09 17:49:00
有一些地方EVAL()是替代不了&的。
3 楼
琅拿度 [专家分:2820] 发布于 2007-06-09 17:52:00
的确...
有体会
4 楼
cbl518 [专家分:57140] 发布于 2007-06-09 18:36:00
() 最快,用在名称,路径。
EVALUATE() 快, 用在计算值的方面。
& 全功能,速度慢。
EXECSCRIPT( ) 运行多行代码 速度最慢
5 楼
jinlonggao [专家分:17130] 发布于 2007-06-09 18:56:00
好一座专家楼!再顶一层.
6 楼
user886633 [专家分:2400] 发布于 2007-06-09 21:35:00
[quote]有一些地方EVAL()是替代不了&的。
[/quote]
7 楼
jinlonggao [专家分:17130] 发布于 2007-06-10 09:55:00
经测试,cbl的方法比MOZ的快了0.469-0.375 =0.094 秒
--------------------------------------------------
请问cbl518:
EXECSCRIPT( )
怎么用?
可以运行一段循环语句吗?
(最近我也懒散了,不去自己偿试,老喜欢问人)
8 楼
moz [专家分:37620] 发布于 2007-06-10 21:14:00
顾名思义,是执行脚本用的。
9 楼
cbl518 [专家分:57140] 发布于 2007-06-11 06:09:00
[quote]经测试,cbl的方法比MOZ的快了0.469-0.375 =0.094 秒
--------------------------------------------------
请问cbl518:
EXECSCRIPT( )
怎么用?
可以运行一段循环语句吗?
(最近我也懒散了,不去自己偿试,老喜欢问人)[/quote]
我刚看帖子,没及时回复,请原谅
[color=FF0000]c1="FOR i=1 TO 10"+CHR(13)+ "?i "+CHR(13)+"ENDFOR"
EXECSCRIPT( c1)[/color]
你也可以按编程方法,写在备注字段中,在执行。
10 楼
jinlonggao [专家分:17130] 发布于 2007-06-11 08:19:00
谢谢cbl先生,这个函数很有用,我收藏了!也谢谢MOZ先生建了一幢好楼!
我来回复