cxg121 发表于 2006-7-20 17:31:00

请问该怎么办啊?

<P>我做好的一幅图里,有很多这样的文字注记"S=12.6783" "S=135.3476"……</P>
<P>现在想将数字部分乘个0.0015,然后取三位小数,怎样能用lisp将他们全部改过来呢?</P>
<P>请各位帮帮忙!</P>

ZZXXQQ 发表于 2006-7-20 22:27:00


(DEFUN C:TEST ()
(IF (SETQ SS (SSGET '((0 . "TEXT") (1 . "S=*")))) (PROGN
(SETQ I -1)
(REPEAT (SSLENGTH SS)
   (SETQ ENT (ENTGET (SSNAME SS (SETQ I (1+ I))))
TXT (SUBSTR (CDR (ASSOC 1 ENT)) 3))
   (IF (<= "0" (SUBSTR TXT 1 1) "9") (PROGN
    (SETQ TMP (STRCAT "S=" (RTOS (* (ATOF TXT) 0.0015) 2 3))
   ENT (SUBST (ASSOC 1 ENT) (CONS 1 TMP) ENT))
    (ENTMODE ENT)
   ))
)
))
(PRINC)
)

cxg121 发表于 2006-7-21 11:08:00

还有点问题啊,大虾,帮人帮到底啊!帮我再看看,万分感谢!

cxg121 发表于 2006-7-21 12:02:00

搞定了,万分感谢!

rongyifei 发表于 2006-7-22 19:59:00

<P>也可以这样写:</P>
<P>(defun c:test ()<BR>&nbsp; (setq&nbsp;selectionsets (vla-get-selectionsets<BR>&nbsp;&nbsp;&nbsp;(vla-get-activedocument (vlax-get-acad-object))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;i&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vla-get-count selectionsets)<BR>&nbsp; )<BR>&nbsp; (while (&gt; i 0)<BR>&nbsp;&nbsp;&nbsp; (setq sset (vla-item selectionsets 0))<BR>&nbsp;&nbsp;&nbsp; (vla-delete sset)<BR>&nbsp;&nbsp;&nbsp; (setq i (- i 1))<BR>&nbsp; )<BR>&nbsp; (setq&nbsp;sset&nbsp;&nbsp; (vla-add selectionsets "sset")<BR>&nbsp;listcode&nbsp; (vlax-make-safearray vlax-vbinteger '(0 . 1))<BR>&nbsp;listvalue (vlax-make-safearray vlax-vbvariant '(0 . 1))<BR>&nbsp; )<BR>&nbsp; (vlax-safearray-put-element listcode 0 0)<BR>&nbsp; (vlax-safearray-put-element listcode 1 1)<BR>&nbsp; (vlax-safearray-put-element listvalue 0 "TEXT")<BR>&nbsp; (vlax-safearray-put-element listvalue 1 "s=*")<BR>&nbsp; (vla-select<BR>&nbsp;&nbsp;&nbsp; sset acSelectionSetAll nil nil listcode listvalue)<BR>&nbsp; (setq ssetcount (vla-get-count sset))<BR>&nbsp; (while (&gt; ssetcount 0)<BR>&nbsp;&nbsp;&nbsp; (setq<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value (vla-get-textstring (vla-item sset (- ssetcount 1)))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value (vl-string-left-trim "s=" value)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value (* (atof value) 0.0015)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value (strcat "s=" (rtos value 2 3))<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; (vla-put-textstring (vla-item sset (- ssetcount 1)) value)<BR>&nbsp;&nbsp;&nbsp; (vla-update (vla-item sset (- ssetcount 1)))<BR>&nbsp;&nbsp;&nbsp; (setq ssetcount (- ssetcount 1))<BR>&nbsp; )<BR>)</P>
页: [1]
查看完整版本: 请问该怎么办啊?