易表在线答疑技术与交流用户社区 → [灌水]用eval代替loop循环函数的差异


  共有7698人关注过本帖树形打印复制链接

主题:[灌水]用eval代替loop循环函数的差异

帅哥哟,离线,有人找我吗?
t-fs
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:142 积分:0 威望:0 精华:0 注册:2006/8/15 10:56:00
[灌水]用eval代替loop循环函数的差异  发帖心情 Post By:2007/10/26 15:26:00 [只看该作者]

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

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

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

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


 回到顶部
帅哥哟,离线,有人找我吗?
lxl
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:蜘蛛侠 帖子:1191 积分:-50 威望:0 精华:0 注册:2007/5/25 12:56:00
  发帖心情 Post By:2007/10/26 15:56:00 [只看该作者]

耗时列  DaysBtw([起始时间],[完成时间])  单位是天  你可以转换成秒

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

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


 回到顶部
帅哥哟,离线,有人找我吗?
smileboy
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:8672 积分:1734 威望:0 精华:0 注册:2006/8/11 10:52:00
  发帖心情 Post By:2007/10/26 16:02:00 [只看该作者]

还是有差别的
egd文件下载
eval计算4000以上时出现退出现象,估计是动态生成的公式容量超过公式管理器的限度所致吧

 回到顶部
帅哥哟,离线,有人找我吗?
t-fs
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:142 积分:0 威望:0 精华:0 注册:2006/8/15 10:56:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:蜘蛛侠 帖子:1191 积分:-50 威望:0 精华:0 注册:2007/5/25 12:56:00
  发帖心情 Post By:2007/10/27 11:01:00 [只看该作者]

直接用楼上的公式就行了  为什么要简化?

简化了没可读性  速度还慢


 回到顶部
帅哥哟,离线,有人找我吗?
t-fs
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:142 积分:0 威望:0 精华:0 注册:2006/8/15 10:56:00
  发帖心情 Post By:2007/10/27 11:24:00 [只看该作者]

    我总觉得这段程序规律特强,适合用循环的办法来解决。只是有一定难度,因为它涉及变量的递增,我想学学这种规律的循环,如何来写循环程序。
    看看谁能帮助写出简化程序来,谢谢!

 回到顶部
帅哥哟,离线,有人找我吗?
Czy
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13147 积分:-89 威望:0 精华:0 注册:2006/8/11 11:14:00
  发帖心情 Post By:2007/10/27 11:57:00 [只看该作者]

就4楼的公式我估计用eval写出来的长度差不多和原公式相等了。
如果真想学,应该一步一步来,想一口吃个胖子不现实。
比如你所要求的分别是:y、n、q 三组数据,如果都嵌套在一起公式难度可想而知,所以我建议你还是从一组数据开始学。

 回到顶部
帅哥哟,离线,有人找我吗?
wjq1072
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:16190 积分:125850 威望:1 精华:0 注册:2006/8/12 12:29:00
  发帖心情 Post By: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
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:142 积分:0 威望:0 精华:0 注册:2006/8/15 10:56:00
  发帖心情 Post By:2007/10/27 12:00:00 [只看该作者]

    好吧,谢谢回复!

 回到顶部
帅哥哟,离线,有人找我吗?
Czy
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13147 积分:-89 威望:0 精华:0 注册:2006/8/11 11:14:00
  发帖心情 Post By: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")+"%])")


 回到顶部
总数 16 1 2 下一页