[求助]如果求出单行文本中前半部分相同,后半部分的和?
<p>哪位大虾帮小弟编写一个小lisp程序:基本内容如下:</p><p>在一张图纸中有很多这样的文字:(以下文字为单行文本,即D=200 L=53为单行文本)</p><p>D=200 L=52;D=100 L=20;D=300 L=36;D=100 L=30;D=100 L=58;D=200 L=53……</p><p>要求,求出 D=200时,所有L=?(D表示管径,L表示长度)</p><p> D=100时,所有L=?</p> 本帖最后由 作者 于 2009-3-18 21:17:12 编辑;计算管长 明经 ZZXXQQ 2009.3.10 - 2009.3.13
(defun c:tt ()
(setvar "CMDECHO" 0)
(setvar "DIMZIN" 0)
(setq dl (list))
(if (and
(princ "\n选择文本 :")
(setq ss (ssget '((0 . "TEXT") (1 . "D*"))))
) (progn
(setq i 0)
(repeat (sslength ss)
(setq txt (cdr(assoc 1 (entget(ssname ss i))))
i (1+ i))
(setq d (atoi (substr txt 3))
j 3)
(while (and (< j (strlen txt)) (/= (substr txt j 2) "L=")) (setq j (1+ j)))
(setq l (atof (substr txt (+ j 2))))
(if (assoc d dl)
(setq l (+ (cdr(assoc d dl)) l)
dl (subst (cons d l) (assoc d dl) dl))
(setq dl (cons (cons d l) dl))
)
)
(setq i 0)
(if (setq pt (getpoint "\nInsert Point :")) (progn
(setq ttx (strcat "\nD=" (itoa (car(nth i dl))) " L=" (rtos (cdr(nth i dl)) 2 1)))
(setq i (1+ i))
(command ".text" pt "" "" ttx)
(repeat (length dl)
(setq ttx (strcat "\nD=" (itoa (car(nth i dl))) " L=" (rtos (cdr(nth i dl)) 2 1)))
(setq i (1+ i))
(command ".text" "" ttx)
)
))
))
(setvar "CMDECHO" 1)
(princ)
)
<p>谢谢zzxxqq斑竹,试试先,如有什么问题,再行请教。</p> <p>版主,好像不能使用。请看图片。我需要求出D=200时,所有D=200后面所带的L的和。即下面图片中D=200 总的L=1500。最好能用文本显示出来。</p> <p>可以用程序实现,联系:ljttjl@ tom.com</p> 一个函数写错了。二楼已改,再试试。 <p>好像还是不行。</p> <p>二楼又改了。</p> <p>好的,基本上可以使用了。版主,能否留个QQ给我?以后有什么事情,我可以直接和你联系吗?</p><p></p> <p>版主,我觉得这个lisp程序使用范围太小,如果出现这样的文字,如图。出现这样的文字以后,程序就无法计算。能否想到别的方法处理?或者,一张图中同时出现了“D=、DN、DN+文字”,怎么处理?</p><p></p><p> </p>
页:
[1]
2