bacad 发表于 2022-7-5 16:49:10

数字总和

我发现了一些非常好的lisp,它们可以很好地在(dtext、mtext、MLEADER等)中添加一系列数字,但还没有找到一种在使用逗号时可以添加所有数字的lisp。我想找到一种可以用逗号添加所有类型文本编号(dtext、mtext、MLeader等)的方法,并允许我将总和作为dtext或mtext插入。任何帮助都将不胜感激。

BIGAL 发表于 2022-7-5 16:57:51

搜索parse。lsp关于Lee mac有几个版本,它将列出一个分隔逗号字符串x,y,z=(x y z)的字符串列表

Lee Mac 发表于 2022-7-5 17:01:59

逗号是用作千位分隔符还是小数点?

bacad 发表于 2022-7-5 17:07:39

谢谢你,比格尔,我实际上使用了李的版本,当我写李的时候,我会回答他的回答是的,我们的一些员工确实使用逗号作为分隔符。我上传了几个我们正在尝试做的小例子。
实例图纸

BIGAL 发表于 2022-7-5 17:16:17

第二部分,你的文本实际上并不像第一次出现的那样在表中,所以只需要抓取一列文本,使用Lee的parse lisp并将数字相加。
 
第一部分选择引线实际上是比较文本部分,并将具有相同文本的引线的数字相加。
 
明天可能有时间多看一看,或者李可能会在晚上跳进去。

bacad 发表于 2022-7-5 17:23:36

你是对的,第二部分的文本不是一个表(我们要用块计数和我们需要的信息创建表还有很长的路要走,但这是另一篇文章)。我们使用了以下lisp(作者未知),但它既不放置文本,也不适用于多行文字和多重引线。
 
;;;add selected numbers.highlight numbers that cannot convert.

(defun c:add (/ txtss badset total cntr ent elist str nstr)
(setvar "cmdecho" 0)
(setq total 0
cntr 0
nstr (list))
(princ "\nSelect numbers to add: ")
(setq txtss (ssget '((0 . "TEXT")) ))
(while (< cntr (sslength txtss))
   (setq ent (ssname txtss cntr)
elist (entget ent))
   (setq str (cdr (assoc 1 elist)))
   (if (and (> (strlen str) 3) (wcmatch str "*`,*"))
   (repeat (/ (strlen str) 4)
(setq nstr (cons (substr str (- (strlen str) 2) 3) nstr))
(setq str (substr str 1 (- (strlen str) 4)))
);repeat
   );if
   (if nstr
   (foreach v nstr
(setq str (strcat str v)))
   );if
   (setq total (+ total (atof str)))
   (setq cntr (1+ cntr))
   (setq nstr (list))
   );while
(princ (strcat "\nTotal: " (rtos total 2 2)))
(setvar "cmdecho" 0)
(princ)
);eof

 
这里是我们过去使用的另一个(作者不详),它几乎满足了我们的需要(适用于多行文字),但不适用于逗号或多重引线。当我使用lisp例程时,我是一个新手,只会有足够的危险性,我曾尝试在某种程度上将两者结合起来,但运气不好,我不确定我是否能够让它们与MLEADER一起工作。如果我只是运气不好,想得到mleaders的总数,那么我很乐意让这两个一起工作。
 
; ADDN04.LSP - ADDS NUMBER STRINGS AND CONVERTS TO SQUARE FOOT AND ACRES with 4 decimal places
;
(defun C:ADDNO4 ()
(SETQ CMD (GETVAR "CMDECHO"))
(SETVAR "CMDECHO" 0)
(SETQ SS NIL)
(PRINC "/nSELECT TEXT:")(PRINC)
(SETQ SS (SSGET))
(SETQ NO -1)
(setq TX 0)
(REPEAT (SSLENGTH SS)
   (SETQ NO (1+ NO))
   (SETQ ENT (ENTGET (SSNAME SS NO)))
   (SETQ OLDL (ASSOC 1 ENT))
   (SETQ TXX (CDR OLDL))
   (SETQ TXX (ATOF TXX))
   (SETQ TX (+ TX TXX))
)
(CLUF)
(SETQ TX (* TX LUF))
(SETQ MID (GETPOINT "\nSELECT MIDDLE POINT OF TEXT:"))
(SETQ TXT (RTOS TX 2 4))
(COMMAND "TEXT" "M" MID "" "0" TXT)
(PRIN1)
(SETVAR "CMDECHO" CMD)
)
(DEFUN CLUF ()
(SETQ LUN (GETVAR "LUNITS"))
(IF (OR (= LUN 3) (= LUN 4))
   (SETQ LUF 0.00694444)
   (SETQ LUF 1)
)
)

SLW210 发表于 2022-7-5 17:26:18

请阅读代码发布指南,并编辑您的帖子,以包括代码标签(而不是报价标签)。

Your Code Here=
Your Code Here

bacad 发表于 2022-7-5 17:34:30

新手错误。。。。。。。它已修订。

bacad 发表于 2022-7-5 17:42:18

我和fixo先生的lsp很熟(http://www.cadtutor.net/forum/showthread.php?26151-文本字符串中的数字总和/第2页,只需添加数千。。。
(defun C:STX (/ cpent elist en ip newtxt pt ss sum sumtxt txt)
(princ "\n\t\t>>>Select text to get summ >>>")
(if
;;select texts/mtexts on screen :
(setq ss (ssget '((0 . "*TEXT"))))
;; if selected then :
(progn
;; store the first text entity for using 'em further :
(setq cpent (ssname ss 0))
;; set initial sum to zero :
(setq sum 0.)
;; loop trough selected texts/mtexts :
(while
   ;; get the first text in selection :
   (setq en (ssname ss 0))
   ;; get entity list of them :
   (setq elist (entget en))
   ;; get the textstring by key 1 from entity list :
   (setq txt (cdr (assoc 1 elist)))
   ;; create output string :
   (setq sumtxt
   ;; concatenate strings :
   (strcat
   ;; convert digits to string :
   (rtos
       ;; add to summ the digital value of text :
       (setq sum (+ (atof txt) sum))
       ;; 2 is for metric units (3 for engineering) :
       2
       ;; set precision by current :
       (getvar "dimdec")))
)
   ;; delete entity from selection set :
   (ssdel en ss)
   )
;; display message in the command line:
(princ (strcat "\nSumm=" sumtxt))
(setq pt (getpoint "\nSpecify the new text location: "))
;; get the insertion point of stored entity :
(setq ip (cdr (assoc 10 (entget cpent))))
;; copy text entity to the new destination point :
(command "_copy" cpent "" ip pt)
;; get the last created entity :
(setq newtxt (entlast))
;; get entity list of them :
(setq elist (entget newtxt))
;; modify entity list with new text string :
(entmod (subst (cons 1 sumtxt)(assoc 1 elist) elist))
;; update changes :
(entupd newtxt)
)
)
(princ)
)
(princ "\nStart command with STX...")
(princ)

bacad 发表于 2022-7-5 17:43:50

 
李,你有文本计算器吗http://lee-mac.com/textcalculator.html有添加数千的选项和一次选择多个数字的选项吗?谢谢
页: [1] 2
查看完整版本: 数字总和