纯数字文本求和
;发一个简单的文本求和,用的command,没用entmake;;没考虑复杂的文本情况,只适用于普通纯数字文本,小数位数默认同已有的相加数中位数最大的。
(defun c:tt (/ en en_data i list1 lst ss txt_add)
(setq ss (ssget '((0 . "text")(1 . "~*[~--9]*"))))
(setq i 0)
(setq lst nil)
(repeat (sslength ss)
(setq en_data (entget (setq en (ssname ss i))))
(setq list1 (cdr (assoc 1 en_data)))
(setq lst (cons list1 lst))
(setq i (1+ i))
)
(setq txt_add (apply '+ (mapcar 'read lst)))
(command "text" "non" pause "" "" (vl-princ-to-string txt_add) )
(prin1)
)
谢谢楼主分享。效果挺不错的,要是能支持多行文本就更好了 1/2
3/4
5/6
1-/3
你试试吧 1291500406 发表于 2022-9-5 06:59
1/2
3/4
5/6
不支持,ascii码-后面有.和/,所以特殊的字符会出错,比如3-3,5.5.6,此外小数尾数可能也不是理想型,只作为一个简单的情景使用。 (defun acal (str)
(if (null (type c:cal))
(and (or
(and (findfile "GEOMCAL.CRX") (ARXLOAD "GEOMCAL.CRX"))
(and (findfile "GEOMCAL.ARX") (ARXLOAD "GEOMCAL.ARX"))
)
(princ "\n**LOAD:CAL**")
)
)
(c:cal str)
)
(defun c:tt (/ en en_data i num ss str)
(setq ss (ssget '((0 . "text")(1 . "~*[~--9]*"))))
(setq i 0)
(setq str "0")
(repeat (sslength ss)
(setq en_data (entget (setq en (ssname ss i))))
(setq num (cdr (assoc 1 en_data)))
(setq str (strcat str "+" num))
(setq i (1+ i))
)
(setq txt_add (acal str))
(command "text" "non" pause "" "" (vl-princ-to-string txt_add) )
(prin1)
)
菜卷鱼 发表于 2022-9-5 08:59
引出大咖来了~不错
页:
[1]