koalabear 发表于 2004-3-25 16:35:00

求教

求教:


               请问如何获得多行文字编辑器编写的内容。我打算直接选取多行文字(用MTEXT编写的数字)。计算加和。但是不知道如何获取里面的数值。请大虾指教。

meflying 发表于 2004-3-25 16:41:00

(cdr (assoc 1 (entget (car (entsel)))));可能会有一些格式

koalabear 发表于 2004-3-25 17:06:00

谢谢斑竹。我试试。

koalabear 发表于 2004-3-25 17:11:00

顺便问一下,为什么我用MTEXT写入数据(比如10,20,30,中间逗号为回车)。用命令获取的时候只能读第一个数据10?不能计算后面的20,30。

meflying 发表于 2004-3-25 18:27:00

不会啊,

koalabear 发表于 2004-3-25 20:15:00

谢谢斑竹。我的意思是要获取文本里面的数值,比如运行mtext输入10回车20回车30,然后运行我的程序,选择这些文字要求算出和来,但是每次只能算出10来。下面是源程序,希望斑竹抽空瞅瞅,不胜感激。


(defun c:jszl()<BR>        (setvar "cmdecho" 0)<BR>        (setvar "blipmode" 0)<BR>        (setq OS (GETVAR "OSMODE"))               ;设置捕捉关闭<BR>        (setvar "OSMODE" 0)


        (princ "\n选取数字")


        (setq ss (ssget))<BR>        (setq i 0)<BR>        (setq S 0)<BR>        (setq SM 0)<BR>        (repeat (sslength ss)<BR>       (setq ssn (ssname ss i))<BR>       (setq ssdata (entget ssn))<BR>       (setq sstyp (cdr (assoc 0 ssdata)))        <BR>       (if (= sstyp "MTEXT")                                                               ;文字样式,为MTEXT,假若为TEXT书写改为TEXT<BR>                       (progn<BR>        (setq SM (1+ SM))<BR>                                               (setq txt (cdr (assoc 1 ssdata)))<BR>               (setq X (atof txt))<BR>               (setq S (+ S X))<BR>                               )<BR>       )                                               ;if结束括号<BR>       (setq i (1+ i))                                                               <BR>        )<BR>               (setq chksty (tblsearch "style" "技术要求"))<BR>               (if (= chksty nil)<BR>                                               (command "style" "技术要求" "ysr,hztxt" "" 0.75 "" "" "")<BR>               )<BR>        <BR>               (setq TZ (GETVAR "TEXTSIZE"))                                                                                                                                                               ;获取原文字高度<BR>               (setvar "TEXTSIZE" 5)                                                                                                                                                                                                                               ;确定文字高度<BR>               (setq A0 (getpoint"输入的中心点:"))<BR>               (command "text" A0 "" 0 (strcat "所选" (rtos SM 2) "个数据的和是=" (rtos S 2 1)))<BR>               (setvar "OSMODE" os)<BR>               (setvar "TEXTSIZE" TZ)                                                                                                                                                                                                                               ;恢复原文字高度<BR>)<BR>(prompt"\n命令提示符&lt;&lt;jszl&gt;&gt;")<BR>(prin1)

meflying 发表于 2004-3-25 20:36:00

我前面说了,提取出来的文本会有一些格式,如我的图中提取出来的就是10\\P20\\P30,这里的<A href="file://\\p" target="_blank" >\\p</A>就是格式,你要去除这些格式,把你需要的内容提出来,这就是一个字符串操作的过程。。。

yxp 发表于 2004-3-25 21:33:00

<BR>;文本计算器



(defun C:tad( / ss1 ssna sum ss2 x)<BR>                                               (setq ss1 (ssget '((0 . "text"))))                                                                       ;选择对象并过滤文本<BR>                                               (setq ssna(sslength ss1))       


                                      (princ (strcat "\n 共选择了" (itoa ssna) "个数据文本。"))<BR>                                               (setq sum 0.0 n 0 tum 0)<BR>                                               (while (&lt; n ssna) <BR>                                                                               (setq ss2 (assoc 1 (entget (ssname ss1 n))))                       ;得到第n个文本<BR>                                                                               (setq x (atof (cdr ss2)))                                                                       ;从点表中取得数据并转化为数字格式<BR>                                                                               (setq tum (+ tum (* x x)))<BR>                                                                               (setq sum (+ sum x) n (1+ n))                                       ;累加计算后,赋值给SUM<BR>                                                               )<BR>                               (princ (strcat "\n 参加计算:" (rtos n) "个" "       计算结果=" (rtos sum 2 4) "       平均值=" (rtos (/ sum ssna) 2 4) "       平方和=" (rtos tum 2 4)))<BR>                               (princ)<BR>)<BR>

koalabear 发表于 2004-3-25 21:49:00

楼上的谢谢,但是我运行你的程序还是不能对mtext命令的数值进行计算,只能炸开后才能计算。

koalabear 发表于 2004-3-25 21:53:00

谢谢斑竹,我明白你的意思了。谢谢!!
页: [1]
查看完整版本: 求教