sdo7758258 发表于 2004-2-19 22:02:00

请大家帮忙编一个程序




帮我做一个程序,把相同的导线型号的数量相加,如BLV-35/38,BLV-35/120,把二全本、相加,得158,请大家帮忙了,在下感激不尽

meflying 发表于 2004-2-20 08:49:00

这些线有什么特征?就线的本身

Student 发表于 2004-2-20 15:34:00

下面的程序已测试通过,供参考:


(defun c:dxcd(/ )<BR>       (setq ss(ssget "x" '((0 . "MTEXT"))))<BR>       (setq sn(sslength ss))<BR>       (setq dxtab nil i 0)<BR>       <BR>       (while(&lt; i sn)<BR>                       (setq si(ssname ss i)<BR>                                                                       str(cdr(assoc 1 (entget si)))<BR>                       )<BR>                       (setq pos nil)<BR>                       (if(&lt; (strlen str) 15)<BR>                                       (setq pos(vl-string-position (ascii "/") str))<BR>                       )<BR>                       (if pos<BR>                                       (progn<BR>                                                       (setq xx(substr str 1 pos) cd(substr str (+ pos 2)) cd(atof cd))<BR>                                                       (setq dxlst(assoc xx dxtab))<BR>                                                       (if dxlst<BR>                                                                       (progn<BR>                                                                                       (setq cd(+ (cdr dxlst) cd))<BR>                                                                                       (subst (cons xx cd) dxlst dxtab)<BR>                                                                       )<BR>                                                                       (setq dxtab(append dxtab (list(cons xx cd))))<BR>                                                       )<BR>                                       )<BR>                       )<BR>                       (setq i(1+ i))<BR>       )<BR>       (princ "\n统计结果")<BR>       (princ "\n-----------------------")<BR>       (princ "\n导线型号                       导线长度")<BR>       (princ "\n-----------------------")<BR>       <BR>       (setq i 0)<BR>       (while(&lt; i (length dxtab))<BR>                       (setq dxlst(nth i dxtab))<BR>                       (princ (strcat "\n" (car dxlst) "                       " (rtos (cdr dxlst) 2 2)))<BR>                       (setq i(1+ i))<BR>       )<BR>       (princ "\n-----------------------")<BR>       (princ)       <BR>)<BR>                                       <BR>下面是运行结果:<BR>Command: dxcd


统计结果<BR>-----------------------<BR>导线型号                       导线长度<BR>-----------------------<BR>LGJ-95                       690.5<BR>BLV-35                       2873<BR>BLV-50                       1482.5<BR>BLV-70                       252<BR>LGJ-70                       125<BR>LGJ-120                       92<BR>-----------------------<BR>

sdo7758258 发表于 2004-2-20 23:07:00

多谢多谢,可我不懂怎么用?能教我使用否?OICQ:52001189

f5612140 发表于 2004-2-21 14:41:00

該程序檔案命名 ***.lsp       ***為自定       


command:下輸入appload         或 ap


載入檔案,執行dxcd

sdo7758258 发表于 2004-2-22 15:18:00

可我执行得下面的数字,和楼上的不一样


命令: dxcd<BR>统计结果<BR>-----------------------<BR>导线型号                       导线长度<BR>-----------------------<BR>LGJ-95                       52.5<BR>BLV-35                       47.5<BR>BLV-50                       21<BR>BLV-70                       11.5<BR>LGJ-70                       38<BR>LGJ-120                       48<BR>-----------------------

Student 发表于 2004-2-23 12:51:00

是程序的第21行没有写全,下面已改过。对不起。<BR>(defun c:dxcd(/ )<BR>       (setq ss(ssget "x" '((0 . "MTEXT"))))<BR>       (setq sn(sslength ss))<BR>       (setq dxtab nil i 0)<BR>       <BR>       (while(&lt; i sn)<BR>                       (setq si(ssname ss i)<BR>                                                                       str(cdr(assoc 1 (entget si)))<BR>                       )<BR>                       (setq pos nil)<BR>                       (if(&lt; (strlen str) 15)<BR>                                       (setq pos(vl-string-position (ascii "/") str))<BR>                       )<BR>                       (if pos<BR>                                       (progn<BR>                                                       (setq xx(substr str 1 pos) cd(substr str (+ pos 2)) cd(atof cd))<BR>                                                       (setq dxlst(assoc xx dxtab))<BR>                                                       (if dxlst<BR>                                                                       (progn<BR>                                                                                       (setq cd(+ (cdr dxlst) cd))<BR>                                                                                       (setq dxtab(subst (cons xx cd) dxlst dxtab));改动的行<BR>                                                                       )<BR>                                                                       (setq dxtab(append dxtab (list(cons xx cd))))<BR>                                                       )<BR>                                       )<BR>                       )<BR>                       (setq i(1+ i))<BR>       )<BR>       (princ "\n统计结果")<BR>       (princ "\n-----------------------")<BR>       (princ "\n导线型号                       导线长度")<BR>       (princ "\n-----------------------")<BR>       <BR>       (setq i 0)<BR>       (while(&lt; i (length dxtab))<BR>                       (setq dxlst(nth i dxtab))<BR>                       (princ (strcat "\n" (car dxlst) "                       " (rtos (cdr dxlst) 2 2)))<BR>                       (setq i(1+ i))<BR>       )<BR>       (princ "\n-----------------------")<BR>       (princ)       <BR>)<BR>

sdo7758258 发表于 2004-2-24 12:23:00

谢谢,我试试看

sdo7758258 发表于 2004-2-24 12:33:00

可以了谢谢

sdo7758258 发表于 2004-3-2 19:05:00

还有一个问题想请教,假如把“/”换成“\”程序如何改动?还有在图纸当中统计如“方框4”中各个方框数字的总和?
页: [1]
查看完整版本: 请大家帮忙编一个程序