yangist 发表于 2015-2-6 07:45:08

本帖最后由 yangist 于 2015-2-6 07:54 编辑

vectra 发表于 2015-2-5 19:42 static/image/common/back.gif
“钢板t10-200x100” 和 “钢板δ10-200x100”测试结果均为1.57

第24行

谢谢,小数点没问题了;
δ在cad里是\U+03B401,所以会错,换成t就ok了;
再次谢谢您的解答!
可否加个判断 如果有δ 就除以0.3 410;哇(ˉ﹃ˉ),可惜我不会编...

springwillow 发表于 2015-2-6 23:03:07

本帖最后由 springwillow 于 2015-2-7 19:00 编辑

虽然vectra兄的程序也能满足你的要求,但是感觉不够简练,通用性也不是很高。试试我这个吧!其中的xxexp函数可以去一刀屠文的帖子找(defun c:tt ( / endnum ent firstendnum ss sslen txt txt1)
(vl-load-com)
(princ"by springwillow")
(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
(setq firstendnum (getvar 'Lastprompt))
(princ "\n选择文字: ")
(if (setq ss (ssget ":S" '((0 . "TEXT"))))
    (repeat (setq sslen (sslength ss))
      (setq ent (entget (ssname ss (setq sslen (1- sslen))))
      txt1 (cdr (assoc 1 ent)))
      (while (vl-string-search "\U+03B401" txt1)
            (setq txt1 (vl-string-subst "" "\U+03B401" txt1)))
      (setq txt (vl-string-left-trim "xx="(vl-string-left-trim " " txt1))
      txt (apply 'strcat (xxexp"[\\d+-/x\\\+]" txt "")))
      (while (vl-string-search "x" txt)
            (setq txt (vl-string-subst "*" "x" txt)))
      (command "cal" txt)
      (setq endnum (getvar 'Lastprompt))
      (if (/= endnum "表达式语法错误")
      (entmod (subst (cons 1 (strcat txt1 "=" endnum)) (assoc 1 ent) ent)))
      (setq firstendnum endnum)
    )
)
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
(princ)
)

yangist 发表于 2015-2-7 08:11:50

springwillow 发表于 2015-2-6 23:03 static/image/common/back.gif
虽然vectra兄的程序也能满足你的要求,但是感觉不够简练,通用性也不是很高。试试我这个吧!其中的xxexp函数 ...

谢谢,我的lisp水平有限,vla函数我看不懂呢,
试用了一刀屠文,也出错了
您能帮我优化下vectra兄的帖子吗
对\U+03B401加以判断
暂时不需要复杂的功能
主要是批量文本的处理,少数情况就手动了
期待ing,非常感谢!

springwillow 发表于 2015-2-7 11:19:03

yangist 发表于 2015-2-7 08:11 static/image/common/back.gif
谢谢,我的lisp水平有限,vla函数我看不懂呢,
试用了一刀屠文,也出错了
您能帮我优化下vectra兄的帖子吗
...

出错可能是你还没有调用VL函数,头上加一句(vl-load-com)。想用vectra的程序你也只需要这样改一下(setq a (cdr (assoc 1 (entget (ssname ss 0)))))
(while (vl-string-search "\U+03B401" a)
            (setq a(vl-string-subst "" "\U+03B401" a)))
(setq b (* (apply '* (mapcar 'read (split-numbers a))) 0.001 0.001 7.85))就能去掉你的编码符号了。

yangist 发表于 2015-2-7 13:32:58

本帖最后由 yangist 于 2015-2-7 13:36 编辑

springwillow 发表于 2015-2-7 11:19 static/image/common/back.gif
出错可能是你还没有调用VL函数,头上加一句(vl-load-com)。想用vectra的程序你也只需要这样改一下就能去掉 ...
提示语法错误...也没有效果
如果您有空,能完整的调试下么
如果忙,就不麻烦了,我用find替换下
只是这个命令不完美,一不小心就容易出错,唉

springwillow 发表于 2015-2-7 18:47:12

本帖最后由 springwillow 于 2015-2-7 19:01 编辑

yangist 发表于 2015-2-7 13:32
提示语法错误...也没有效果
如果您有空,能完整的调试下么
如果忙,就不麻烦了,我用find替换下

发个样图上来吧! 还有你最好别用xx=,因为xx与乘号相同,有时候会误判,最好换成别的。确实发现了一处错误,已修改请再试试

sutai 发表于 2015-2-7 22:19:15

本帖最后由 sutai 于 2015-2-8 20:56 编辑

这个附件怎么删除???

附件作废!

请浏览 http://bbs.mjtd.com/forum.php?mod=viewthread&tid=112994&page=1&extra=#pid668243

yangist 发表于 2015-2-8 07:49:59

springwillow 发表于 2015-2-7 18:47 static/image/common/back.gif
发个样图上来吧! 还有你最好别用xx=,因为xx与乘号相同,有时候会误判,最好换成别的。确实发现了一处错误 ...好的:程序不报错了 可是结果还是不一致
钢板 10 200*100
钢板 10 200x100
钢板 t10 200x100
钢板 δ10 200x100
钢板 δ10*200*100
钢板 δ10x200x100
钢板 t10-200*100
钢板δ10-200*100
钢板t10-200x100
钢板δ10-200x100

yangist 发表于 2015-2-8 07:52:15

sutai 发表于 2015-2-7 22:19 static/image/common/back.gif
加入互动

您好! 谢谢你的指点,
您的写法不能适应以下各种情况哦,
而且多了一步操作,不是很理想
钢板 10 200*100
钢板 10 200x100
钢板 t10 200x100
钢板 δ10 200x100
钢板 δ10*200*100
钢板 δ10x200x100
钢板 t10-200*100
钢板δ10-200*100
钢板t10-200x100
钢板δ10-200x100

sutai 发表于 2015-2-8 09:33:57

yangist 发表于 2015-2-8 07:52 static/image/common/back.gif
您好! 谢谢你的指点,
您的写法不能适应以下各种情况哦,
而且多了一步操作,不是很理想


是多了步操作,但若自己使用格式设为默认的话也就多个回车。
数据里带空格,你把默认模式中的空格改成逗号(我弄成空格是因为方便),就可以输入格式:空格 逗号 星
页: 1 [2] 3 4
查看完整版本: 提取文本数字并计算写入的程序