数字总和
我发现了一些非常好的lisp,它们可以很好地在(dtext、mtext、MLEADER等)中添加一系列数字,但还没有找到一种在使用逗号时可以添加所有数字的lisp。我想找到一种可以用逗号添加所有类型文本编号(dtext、mtext、MLeader等)的方法,并允许我将总和作为dtext或mtext插入。任何帮助都将不胜感激。 搜索parse。lsp关于Lee mac有几个版本,它将列出一个分隔逗号字符串x,y,z=(x y z)的字符串列表 逗号是用作千位分隔符还是小数点? 谢谢你,比格尔,我实际上使用了李的版本,当我写李的时候,我会回答他的回答是的,我们的一些员工确实使用逗号作为分隔符。我上传了几个我们正在尝试做的小例子。实例图纸 第二部分,你的文本实际上并不像第一次出现的那样在表中,所以只需要抓取一列文本,使用Lee的parse lisp并将数字相加。
第一部分选择引线实际上是比较文本部分,并将具有相同文本的引线的数字相加。
明天可能有时间多看一看,或者李可能会在晚上跳进去。 你是对的,第二部分的文本不是一个表(我们要用块计数和我们需要的信息创建表还有很长的路要走,但这是另一篇文章)。我们使用了以下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)
)
)
请阅读代码发布指南,并编辑您的帖子,以包括代码标签(而不是报价标签)。
Your Code Here=
Your Code Here 新手错误。。。。。。。它已修订。 我和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)
李,你有文本计算器吗http://lee-mac.com/textcalculator.html有添加数千的选项和一次选择多个数字的选项吗?谢谢
页:
[1]
2