易表在线答疑技术与交流用户社区 → 请教这个公式的含义


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

主题:请教这个公式的含义

美女呀,离线,留言给我吧!
金银花
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:侠之大者 帖子:575 积分:482 威望:0 精华:0 注册:2006/8/17 6:37:00
请教这个公式的含义  发帖心情 Post By:2011/9/29 9:28:00 [只看该作者]

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函数的特点是,括号中为一个字符串表达式(一般通过加号连接),而这个字符串表达式执行的结果又必须是一段完全符合语法规则的函数或命令组成的表达式。其中的难点主要是引号,即字符串要用引号括起来,而字符串中的引号又必须符合这样一个语法规则:引号中的引号用双引号,双引号中的引号用四引号,依此类推。如果表达式中有嵌套函数或变量,那么复杂程度更高了。因为嵌套函数或变量相关的引号或加号从整体上来说可能不是前面所述意义上表示字符串或连接字符串的一种符号,它们可能就是作为字符串中单纯的引号或加号字符。两种意义上的引号或加号识别,关键是找出配对引号,问题也就迎刃而解了。而找出配对引号的技巧是先找加号,加号往往是表达式分段标志。同时你还得非常熟悉单个函数语法,否则你就不清楚什么位置是字符型要有个引号,还有该函数到哪里才算结束。



 回到顶部
美女呀,离线,留言给我吧!
金银花
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:侠之大者 帖子:575 积分:482 威望:0 精华:0 注册:2006/8/17 6:37:00
  发帖心情 Post By:2011/9/29 9:31:00 [只看该作者]

在线急等!!!!

 回到顶部
美女呀,离线,留言给我吧!
dancedy
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:2721 积分:4555 威望:0 精华:0 注册:2011/5/12 17:20:00
  发帖心情 Post By:2011/9/29 11:23:00 [只看该作者]

例子:输入的姓名为“张三”,生成的表达式为

Concat(trim(Mid([字典!A]+[字典!B],Search("张",[字典!A]+[字典!B])+3,2)),trim(Mid([字典!A]+[字典!B],Search("三",[字典!A]+[字典!B])+3,2))


 回到顶部
美女呀,离线,留言给我吧!
金银花
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:侠之大者 帖子:575 积分:482 威望:0 精华:0 注册:2006/8/17 6:37:00
  发帖心情 Post By:2011/9/29 22:43:00 [只看该作者]

请问这个公式是什么含义Search("张",[字典!A]+[字典!B])+3,2)

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


加好友 发短信
等级:超级版主 帖子:16190 积分:125850 威望:1 精华:0 注册:2006/8/12 12:29:00
  发帖心情 Post By:2011/9/30 10:49:00 [只看该作者]

下面引用由金银花2011/09/29 10:43pm 发表的内容:
请问这个公式是什么含义Search("张",+)+3,2)

看不懂你的公式!

 回到顶部
美女呀,离线,留言给我吧!
金银花
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:侠之大者 帖子:575 积分:482 威望:0 精华:0 注册:2006/8/17 6:37:00
  发帖心情 Post By:2011/9/30 14:43:00 [只看该作者]

Mid([字典!A]+[字典!B],Search("三",[字典!A]+[字典!B])+3,2)是这个公式执行后出现什么结果,另外还有要是王小薇,三个字的名字
eval("Concat(trim(Mid([字典!A]+[字典!B],Search("""+Substitute(Trim([%formATA%])," ",""",[字典!A]+[字典!B])+3,2)),trim(Mid([字典!A]+[字典!B],Search(""")+""",[字典!A]+[字典!B])+3,2)))"),请版主给解释一下这个公式的含义,按照eval函数的要求分段解释,每段可以达到什么效果

会出现什么结果呢


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


加好友 发短信
等级:超级版主 帖子:16190 积分:125850 威望:1 精华:0 注册:2006/8/12 12:29:00
  发帖心情 Post By:2011/9/30 15:35:00 [只看该作者]

GetPY()
可以返回词组的拼音缩写,可用于辅助代码设计,
但是重音字和生僻字需要用户手工干预。
GetPY("姚明NBA") = "YMNBA"
GetPY([姓名])
返回姓名的拼音缩写

“重音字和生僻字需要用户手工干预”
这个公式就是针对重音字和生僻字来的,加上一个“字典”加上公式来弥补GetPY()的不足。

公式:eval("Concat(trim(Mid([字典!A]+[字典!B],Search("""+Substitute(Trim([%formATA%])," ",""",[字典!A]+[字典!B])+3,2)),trim(Mid([字典!A]+[字典!B],Search(""")+""",[字典!A]+[字典!B])+3,2)))")
想看看不用Eval的原来面貌你可以把前面的Eval去掉:
("Concat(trim(Mid([字典!A]+[字典!B],Search("""+Substitute(Trim([%formATA%])," ",""",[字典!A]+[字典!B])+3,2)),trim(Mid([字典!A]+[字典!B],Search(""")+""",[字典!A]+[字典!B])+3,2)))")
然后放到你原文件的“公式生成器”中点击下面的“执行/计算”按钮就可以看到原公式啦!


 回到顶部