tigcat 发表于 2022-9-3 22:35:20

纯数字文本求和

;发一个简单的文本求和,用的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)
)

sunny_8848 发表于 2022-9-4 08:55:34

谢谢楼主分享。效果挺不错的,要是能支持多行文本就更好了

1291500406 发表于 2022-9-5 06:59:28

1/2
3/4
5/6
1-/3
你试试吧

tigcat 发表于 2022-9-5 07:46:55

1291500406 发表于 2022-9-5 06:59
1/2
3/4
5/6


不支持,ascii码-后面有.和/,所以特殊的字符会出错,比如3-3,5.5.6,此外小数尾数可能也不是理想型,只作为一个简单的情景使用。

菜卷鱼 发表于 2022-9-5 08:59:11

(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)
)

czb203 发表于 2022-9-7 08:28:45

菜卷鱼 发表于 2022-9-5 08:59


引出大咖来了~不错
页: [1]
查看完整版本: 纯数字文本求和