以文本方式查看主题

-  易表在线答疑  (http://egrid2000.com/dvbbs/index.asp)
--  用户社区  (http://egrid2000.com/dvbbs/list.asp?boardid=2)
----  [灌水]用eval代替loop循环函数的差异  (http://egrid2000.com/dvbbs/dispbbs.asp?boardid=2&id=10140)

--  作者:t-fs
--  发布时间:2007/10/26 15:26:00
--  [灌水]用eval代替loop循环函数的差异
   前些日子看到有人提到“能用eval代替loop的情况下,尽量用eval,速度可成倍提高,用eval(mid(rept()))  格式循环很快“。为了验证这个问题,同时也为了学习这二个方法的应用,本人用这二种循环方法,对1至3000数值连续相加,分别进行了验算。
   结果,发现这二种方法耗时相同,并无差异。而且,用1-4000以上数值进行验证时,用EVaL计算时出现无反应或退出易表的情况。见附表文件。

   有感兴趣的帮助测试,同时解决一下为什么用4000或5000计算时会出现无结果的情况,并且帮助解决“耗时”字段的刷新公式:结束时间-起始时间,怎么设定或用什么函数计算出耗时的秒数。
谢谢!egd文件下载

-=-=-=- 以下内容由 t-fs2007年10月26日 04:46pm 时添加 -=-=-=-
   谢谢,明白了。

   有些许差别,同时也学会计算二个时间之差的办法了。


--  作者:lxl
--  发布时间:2007/10/26 15:56:00
--  
耗时列  DaysBtw([起始时间],[完成时间])  单位是天  你可以转换成秒

eval超过4000循环没反应原因可能是产生的字符串过长

速度我机器测试 eval要快一点
 这里条件判断 [%A%]<3001基本不消耗时间 所以eval的优势不能完全体现


--  作者:smileboy
--  发布时间:2007/10/26 16:02:00
--  
还是有差别的
egd文件下载
eval计算4000以上时出现退出现象,估计是动态生成的公式容量超过公式管理器的限度所致吧
--  作者:t-fs
--  发布时间:2007/10/27 10:55:00
--  
   上述问题已搞明白了,现在请高手们看看如下给10组共30个标签变量赋值的程序,如何用这二种循环方法之一来简化公式呢?  
   想了半天,觉得肯定得用eval函数,可是具体怎样用,还是无从下手。  感兴趣的高手,烦请帮助解决为盼,谢谢!

SetLabel("y1",[%y1%]) And SetLabel("n1",[%n1%]) And SetLabel("q1",[%q1%]) And
SetLabel("y2",[%y2%]) And SetLabel("n2",[%n2%]) And SetLabel("q2",[%q2%]) And
SetLabel("y3",[%y3%]) And SetLabel("n3",[%n3%]) And SetLabel("q3",[%q3%]) And
SetLabel("y4",[%y4%]) And SetLabel("n4",[%n4%]) And SetLabel("q4",[%q4%]) And
SetLabel("y5",[%y5%]) And SetLabel("n5",[%n5%]) And SetLabel("q5",[%q5%]) And
SetLabel("y6",[%y6%]) And SetLabel("n6",[%n6%]) And SetLabel("q6",[%q6%]) And
SetLabel("y7",[%y7%]) And SetLabel("n7",[%n7%]) And SetLabel("q7",[%q7%]) And
SetLabel("y8",[%y8%]) And SetLabel("n8",[%n8%]) And SetLabel("q8",[%q8%]) And
SetLabel("y9",[%y9%]) And SetLabel("n9",[%n9%]) And SetLabel("q9",[%q9%]) And
SetLabel("y10",[%y10%]) And SetLabel("n10",[%n10%]) And SetLabel("q10",[%q10%])


--  作者:lxl
--  发布时间:2007/10/27 11:01:00
--  
直接用楼上的公式就行了  为什么要简化?

简化了没可读性  速度还慢


--  作者:t-fs
--  发布时间:2007/10/27 11:24:00
--  
    我总觉得这段程序规律特强,适合用循环的办法来解决。只是有一定难度,因为它涉及变量的递增,我想学学这种规律的循环,如何来写循环程序。
    看看谁能帮助写出简化程序来,谢谢!
--  作者:Czy
--  发布时间:2007/10/27 11:57:00
--  
就4楼的公式我估计用eval写出来的长度差不多和原公式相等了。
如果真想学,应该一步一步来,想一口吃个胖子不现实。
比如你所要求的分别是:y、n、q 三组数据,如果都嵌套在一起公式难度可想而知,所以我建议你还是从一组数据开始学。
--  作者:wjq1072
--  发布时间:2007/10/27 11:58:00
--  
就4楼公式简化(因没有测试,可能有笔误):
Eval("SetLabel(""y"+Substitute(Substitute("1|1@2|2@3|3@4|4@5|5@6|6@7|7@8|8@9|9@10|10","|",""",[%y"),"@","%]) And SetLabel(""y")+"%])") And
Eval("SetLabel(""n"+Substitute(Substitute("1|1@2|2@3|3@4|4@5|5@6|6@7|7@8|8@9|9@10|10","|",""",[%n"),"@","%]) And SetLabel(""n")+"%])") And
Eval("SetLabel(""q"+Substitute(Substitute("1|1@2|2@3|3@4|4@5|5@6|6@7|7@8|8@9|9@10|10","|",""",[%q"),"@","%]) And SetLabel(""q")+"%])")

-=-=-=- 以下内容由 wjq10722007年10月27日 00:01pm 时添加 -=-=-=-
真如斑竹所说。我把三组都列了。供楼主学习Eval时参考。
--  作者:t-fs
--  发布时间:2007/10/27 12:00:00
--  
    好吧,谢谢回复!
--  作者:Czy
--  发布时间:2007/10/27 12:08:00
--  
eval一般适用于动态生成未知值(或不确定值)的公式,对4楼这种既定值优势不大。

再提供一个写一组的方法:

eval("SetLabel(""y"+Substitute(Substitute(Eval("Substitute(""|@|"",""|"","""+Substitute("1|2|3|4|5|6|7|8|9|10","|",""")+""|""+Substitute(""|@|"",""|"",""")+""")"),"@",""",[%y"),"|","%]) And SetLabel(""y")+"%])")