水吉空 发表于 2015-10-24 10:58:46

带有字符的数值求和

如图,希望能实现点选红色框的文字,实现求和
.                  

ZZXXQQ 发表于 2015-10-24 10:58:47

;加152 加152
(defun c:tt ()
(setvar "CMDECHO" 0)
(if (setq ss (ssget ":E:S" '((0 . "TEXT")))) (progn
(setq txt (cdr(assoc 1 (entget (ssname ss 0)))))
(if (wcmatch txt "*加*") (progn
   (while (setq n (vl-string-search "加" txt))
    (if (= n 0)
   (setq txt (strcat (substr txt (+ n 3))))
   (setq txt (strcat (substr txt 1 n) " " (substr txt (+ n 3))))
    )
   )
   (setq ntxt (rtos (apply '+ (read(strcat "(" txt ")"))) 2))
   (if (setq pt1 (getpoint "\n结果放置点: "))
    (command "TEXT" pt1 "" "" ntxt)
   )
))
))
(setvar "CMDECHO" 1)
(princ)
)

水吉空 发表于 2015-10-24 13:19:43

ZZXXQQ 发表于 2015-10-24 13:15 static/image/common/back.gif


并不能用。而且你的只支持“加”开头的。我已经找到了能用的了。不过还是谢谢你。

水吉空 发表于 2015-10-24 13:20:45

ZZXXQQ 发表于 2015-10-24 13:15 static/image/common/back.gif


;;;;;;**************************************框选数字结尾文本求和
(defun c:qh(/ all endno aa bb cc wz tha tsum i)
(if (null xzz) (setq xzz 0))
(yy-emk-yb)
(setq ALL (ssget(list (cons 0 "text"))))
(if all (SETQ nn (SSLENGTH ALL)))
(setq endno 0)
(setq tsum 0 i 0)
(WHILE (and(< endno nn) all)   
    (setq aa (ssname all endno))
    (setq bb (entget aa))
(setq zggg (cdr (assoc 40 bb)))
    (setq cc(cdr(assoc 1 bb)))
    (setq wz(rdata cc))
    (setq tha(substr cc (+ wz 1) ( - (strlen cc) wz -1)))
    (if (= tha "") (setq tha "0"))
    (setq tsum(+ tsum (atof tha)))
    (setq i(1+ i))
    (print (strcat (itoa i) ":文本 <" cc ">---数字 <" tha ">"))
    (setq endno (+ endno 1))
)
(print (strcat "共" (itoa i) "个文本,和=" (rtos tsum)))
(setq rk (rtos tsum))
(SETQ PO (getpoint "\n指定文本输出位置:"))
(COMMAND "TEXT" PO zggg 0 rk)
(print)
)
(defun yy-emk-yb nil
    (if (not (tblobjname "Style" "公司标准"))
      (entmake
            '((0 . "Style")(100 . "AcDbSymbolTableRecord")
                (100 . "AcDbTextStyleTableRecord")
                (2 . "公司标准")(70 . 0)(40 . 0)(41 . 0.8)(50 . 0)(71 . 0)
                (42 . 0)(3 . "hztxt_e.shx")(4 . "hztxt.shx"))
      )
    )
    (setvar "TextStyle" "公司标准")
    (princ)
)
;;;
(defun rdata(str / len i aa)
(if (> (strlen str) 0)
    (progn
         (setq i (strlen str))
         (setq aa(substr str (strlen str) 1))
   (while (and (or (and (>= aa "0") (<= aa "9"))
         (= aa ".")      
         )
         (>= i 1)
      )
            (setq i(1- i))
                  (if (>= i 1) (setq aa(substr str i 1)))
         )      
    )
)
(setq i i)
)

水吉空 发表于 2015-10-24 13:23:00

ZZXXQQ 发表于 2015-10-24 13:15 static/image/common/back.gif


像这种能不能实现点选求和?成8+加7+墙4+钉9+管5+引4+接8

水吉空 发表于 2015-10-29 19:52:46



;;;;;;**************************************框选数字结尾文本求和
(defun c:qh(/ all endno aa bb cc wz tha tsum i)
(if (null xzz) (setq xzz 0))
(yy-emk-yb)
(setq ALL (ssget(list (cons 0 "text"))))
(if all (SETQ nn (SSLENGTH ALL)))
(setq endno 0)
(setq tsum 0 i 0)
(WHILE (and(< endno nn) all)   
    (setq aa (ssname all endno))
    (setq bb (entget aa))
(setq zggg (cdr (assoc 40 bb)))
    (setq cc(cdr(assoc 1 bb)))
    (setq wz(rdata cc))
    (setq tha(substr cc (+ wz 1) ( - (strlen cc) wz -1)))
    (if (= tha "") (setq tha "0"))
    (setq tsum(+ tsum (atof tha)))
    (setq i(1+ i))
    (print (strcat (itoa i) ":文本 <" cc ">---数字 <" tha ">"))
    (setq endno (+ endno 1))
)
(print (strcat "共" (itoa i) "个文本,和=" (rtos tsum)))
(setq rk (rtos tsum))
(SETQ PO (getpoint "\n指定文本输出位置:"))
(COMMAND "TEXT" PO zggg 0 rk)
(print)
)
(defun yy-emk-yb nil
    (if (not (tblobjname "Style" "公司标准"))
      (entmake
            '((0 . "Style")(100 . "AcDbSymbolTableRecord")
                (100 . "AcDbTextStyleTableRecord")
                (2 . "公司标准")(70 . 0)(40 . 0)(41 . 0.8)(50 . 0)(71 . 0)
                (42 . 0)(3 . "hztxt_e.shx")(4 . "hztxt.shx"))
      )
    )
    (setvar "TextStyle" "公司标准")
    (princ)
)
;;;
(defun rdata(str / len i aa)
(if (> (strlen str) 0)
    (progn
         (setq i (strlen str))
         (setq aa(substr str (strlen str) 1))
   (while (and (or (and (>= aa "0") (<= aa "9"))
         (= aa ".")      
         )
         (>= i 1)
      )
            (setq i(1- i))
                  (if (>= i 1) (setq aa(substr str i 1)))
         )      
    )
)
(setq i i)
)

bai2000 发表于 2015-10-30 12:16:54

顶楼上,支持12m+15m+18m这样的求和更好

vladimir 发表于 2015-12-12 18:22:25

果然强大啊。谢谢分享。

bai2000 发表于 2016-3-17 18:13:46

支持12m+15m+18m这样的求和更好

vladimir 发表于 2016-6-5 21:12:54

楼主很强大啊。
页: [1] 2
查看完整版本: 带有字符的数值求和