利用VBS分离字符串以及计算公式
我是在晓东CAD家园看到的一篇帖子,下面两个函数第一个算是照搬别人的,稍微改了一点;第二个是自己琢磨的。我还是附上网址,不是做广告,只是尊重他人成果,我认识明经比晓东CAD时间长。。。
http://bbs.xdcad.net/thread-670090-1-1.html(8楼)
1、分离字符串;;;string 要分离的字符串
;;;str 分隔符
;;;测试:(str-split "明经,CAD" ",")->("明经" "CAD") (str-split "明经 CAD " " ")->("明经" "CAD")
;;;(str-split "明经123CAD123测试" "123")->("明经" "CAD" "测试")
(defun str-split (string str / vbs ret **ScriptControl**)
(setq **ScriptControl** (vlax-create-object "ScriptControl"))
(vlax-put **ScriptControl** "Language" "VBS")
(setqvbs
(strcat "Dim ret\n" "s = \""
string "\"\nsn = \""
str "\"\nret = Split(s,sn)"
)
)
(vlax-invoke **ScriptControl** 'ExecuteStatement vbs)
(setq ret (vlax-invoke **ScriptControl** 'eval "ret"))
(if (not (vlax-object-released-p **ScriptControl**))
(vlax-release-object **ScriptControl**)
)
(vl-remove "" ret)
)2、计算公式;;;arguments 包含参数的表
;;;expression 表达式,以字符串形式表达
;;;测试:(gruel:calculate '("x=2" "y=3" "z=100") "(x+y)*2/z")->0.1
;;;(gruel:calculate '("x=2" "y=3" "z=3") "(x+y)^z")->125.0
(defun gruel:calculate
(arguments expression / str **ScriptControl** ret)
(setq str "dim ret\n")
(foreach x arguments
(setq str (strcat str x "\n"))
)
(setq str (strcat str "ret=" expression))
(setq **ScriptControl** (vlax-create-object "ScriptControl"))
(vlax-put **ScriptControl** "Language" "VBS")
(vlax-invoke **ScriptControl** 'ExecuteStatement str)
(setq ret (vlax-invoke **ScriptControl** 'eval "ret"))
(if (not (vlax-object-released-p **ScriptControl**))
(vlax-release-object **ScriptControl**)
)
ret
) 谢谢楼主的分享!很有用啊。 你效率很高嘛,st788796才贴出来,你就写出了gruel:calculate
好程序,顶 一个字
很好 很想知道你是从哪儿看到ScriptControl应用的,能否把这本书提供给大家. 自贡黄明儒 发表于 2013-8-13 09:47 static/image/common/back.gif
很想知道你是从哪儿看到ScriptControl应用的,能否把这本书提供给大家.
我也只是看到别人用,觉得有点意思,自己百度搜索一些资料看了看 用这个适合改写加密程序, 太好了,但建议改为(gruel:calculate '("2" "3" "3") "(x+y)^z")->125.0,省去X=之类的字就更精简了哈 支持!!!!高版本cad会报错的问题需要解决一下
页:
[1]