我是在晓东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")
- (setq vbs
- (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
- )
|