wuqiu1986 发表于 2013-8-12 22:30:40

利用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
)

清风明月名字 发表于 2013-8-13 08:14:07

谢谢楼主的分享!很有用啊。

自贡黄明儒 发表于 2013-8-13 09:05:13

你效率很高嘛,st788796才贴出来,你就写出了gruel:calculate
好程序,顶

crtrccrt 发表于 2013-8-13 09:08:05

一个字

很好

自贡黄明儒 发表于 2013-8-13 09:47:35

很想知道你是从哪儿看到ScriptControl应用的,能否把这本书提供给大家.

wuqiu1986 发表于 2013-8-13 14:08:39

自贡黄明儒 发表于 2013-8-13 09:47 static/image/common/back.gif
很想知道你是从哪儿看到ScriptControl应用的,能否把这本书提供给大家.

我也只是看到别人用,觉得有点意思,自己百度搜索一些资料看了看

我爱lisp 发表于 2014-3-18 08:18:43

用这个适合改写加密程序,

ynhh 发表于 2014-3-18 13:32:59

太好了,但建议改为(gruel:calculate '("2" "3" "3") "(x+y)^z")->125.0,省去X=之类的字就更精简了哈

dcl1214 发表于 2014-8-25 22:35:26

支持!!!!高版本cad会报错的问题需要解决一下
页: [1]
查看完整版本: 利用VBS分离字符串以及计算公式