从维度中提取文本,
在随附的文件中,您将看到一个显示箍筋放置的平面图,因此我希望:提取“x”变量之前的所有数字,并将其总和!!!
在这种情况下,我们应该获得1501。
马镫。图纸 这很奇怪,我只得到1437个总数,在“x”字符串之前的数字。i、 e“15x100=1500”? 1501我手动再做一次,结果一样;您在“x”字符串之前说了正确的数字,例如“15x100=1500”;“5x90=450” 我明白了,显然有多行文字字符格式,这就是为什么它丢失了大约6个值,总和为64
会一直是这样吗?有些已经格式化,有些没有格式化?
HYG[LM:非格式化
(defun c:summd (/ LM:UnFormat Total ss val)
(defun LM:UnFormat (str mtx / _Replace regex)
(vl-load-com)
;; © Lee Mac 2010
(defun _Replace (new old str)
(vlax-put-property regex 'pattern old)
(vlax-invoke regex 'replace str new)
)
(setq regex (vlax-get-or-create-object "VBScript.RegExp"))
(mapcar
(function
(lambda (x) (vlax-put-property regex (car x) (cdr x)))
)
(list (cons 'global actrue)
(cons 'ignorecase acfalse)
(cons 'multiline actrue)
)
)
(mapcar
(function
(lambda (x) (setq str (_Replace (car x) (cdr x) str)))
)
'(
("Ð" . "\\\\\\\\")
(" " . "\\\\P|\\n|\\t")
("$1"
.
"\\\\(\\\\)|\\\\[^\\\\;]*;|\\\\"
)
("$1$2/$3" . "([^\\\\])\\\\S([^;]*)[/#\\^]([^;]*);")
("$1$2" . "\\\\(\\\\S)|[\\\\](})|}")
("$1" . "[\\\\]({)|{")
)
)
(setq str
(if mtx
(_Replace
"\\\\"
"Ð"
(_Replace "\\$1$2$3" "(\\\\)|({)|(})" str)
)
(_Replace "\\" "Ð" str)
)
)
(vlax-release-object regex)
str
)
(setq aDoc(vla-get-ActiveDocument (vlax-get-acad-object))
Total 0
)
(if (ssget '((0 . "*DIMENSION")
(-4 . "<OR")
(1 . "*?*")
(-3 ("ACAD"))
(-4 . "OR>")
)
)
(progn
(vlax-for e (setq ss (vla-get-ActiveSelectionSet aDoc))
(if
(vl-string-position
88
(strcase (setq val (LM:UNFORMAT (vla-get-textoverride e) t))
)
)
(setq total (+ (atoi val) total))
)
)
(vla-delete ss)
(alert (itoa Total))
)
)
)
如果它是一个通用的lisp,适用于所有类型的维度(格式化的、未格式化的),那么它会更好
但是关于你附加的Lisp程序,不起作用。
??? 在我这边有效。 我不知道我试了好几次allready It show me”命令:(LOAD“C:/Users/S\u C/Desktop/text find-коПиl.lsp”)C:SUMMD
命令:SUMMD
选择对象:指定对角点:108
选择对象:;错误:Ощибка
命令:“ 等等,我会去掉代码,这可能是RegExp的语言问题。
顺便问一下:这是什么意思?Ошибка
更新:与RegExp无关,显然它只是“unicode”编码的一种情况
LM的荣誉:非格式化函数 你可以附加lisp文件,当我的lisp文件中的代码复制它告诉我一些关于unicode文件的错误,对我来说是第一次出现这样的东西!!! Обиббб平均误差!!!
页:
[1]
2