egd文件下载eval("Concat(trim(Mid([字典!A]+[字典!B],Search("""+Substitute(Trim([%FORMATA%])," ",""",[字典!A]+[字典!B])+3,2)),trim(Mid([字典!A]+[字典!B],Search(""")+""",[字典!A]+[字典!B])+3,2)))"),请版主给解释一下这个公式的含义,按照eval函数的要求分段解释,每段可以达到什么效果
-=-=-=- 以下内容由 金银花 在 2011年09月29日 09:30am 时添加 -=-=-=-就像这样给解释:SetLabel(""," 正在删除表,请稍候...") And Eval("RemoveGrid("""+Substitute([%A%],"|",""") And RemoveGrid(""")+""")") And SetLabel(""," 删除完毕!")
公式红色部分中“+”和引号,分解说明一下。
解答一:
要了解这种公式,可以先排除那些让你看着摸不着头的引号,这样理解起来就比较容易了。
如这个公式:"RemoveGrid("+Substitute("A|B","|",") And RemoveGrid(")+")"
我们可以把它分解成:字符"RemoveGrid("加公式执行后生成的字符,公式是用Substitute把"|"替换成新的字符,替换后的字符也就是“) And RemoveGrid(”然后再加上“")"”。
经过上面的处理后,生成的结果是:RemoveGrid(A) And RemoveGrid(B),很显然不是我们想要的结果,因为用RemoveGrid删除表,表名是要用引号,所以我们必须要把引号加上。
"RemoveGrid("""+Substitute("A|B","|",""") And RemoveGrid(""")+""")"
执行上述公式后,生成的表达式是:RemoveGrid("A") And RemoveGrid("B"),这样就需要用Eval对指定的表达式进行操作,以达到一次性完成上述表达式的执行操作。
解答二:
“写”Eval函数表达式可以暂且不管引号是否正确,但是“读”Eval函数表达式应当从引号入手。因为当你读别人写的一段表达式时,通常不知道结果,像上面这种猜得出来的简单表达式仅是特例。
Eval函数的特点是,括号中为一个字符串表达式(一般通过加号连接),而这个字符串表达式执行的结果又必须是一段完全符合语法规则的函数或命令组成的表达式。其中的难点主要是引号,即字符串要用引号括起来,而字符串中的引号又必须符合这样一个语法规则:引号中的引号用双引号,双引号中的引号用四引号,依此类推。如果表达式中有嵌套函数或变量,那么复杂程度更高了。因为嵌套函数或变量相关的引号或加号从整体上来说可能不是前面所述意义上表示字符串或连接字符串的一种符号,它们可能就是作为字符串中单纯的引号或加号字符。两种意义上的引号或加号识别,关键是找出配对引号,问题也就迎刃而解了。而找出配对引号的技巧是先找加号,加号往往是表达式分段标志。同时你还得非常熟悉单个函数语法,否则你就不清楚什么位置是字符型要有个引号,还有该函数到哪里才算结束。