以文本方式查看主题 - 易表在线答疑 (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计算时会出现无结果的情况,并且帮助解决“耗时”字段的刷新公式:结束时间-起始时间,怎么设定或用什么函数计算出耗时的秒数。 有些许差别,同时也学会计算二个时间之差的办法了。 |
-- 作者:lxl -- 发布时间:2007/10/26 15:56:00 -- 耗时列 DaysBtw([起始时间],[完成时间]) 单位是天 你可以转换成秒 eval超过4000循环没反应原因可能是产生的字符串过长 速度我机器测试 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 |
-- 作者: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")+"%])") -=-=-=- 以下内容由 wjq1072 在 2007年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")+"%])") |