偏爱云~小吴 发表于 2013-11-6 12:27:24

单行文字合并多行文字后不要跟\N

各位大侠,如何让上面的程序多行文字后面不加\n,只在中间的值上加,我要合并X,Y,Z三个单行文本,仅需要在X,Y的数据后加\n, z值后面不要\N,如何改
(defun C:test (/ EN ENT LST LST1 OLDAUN OLDOSM PT SS STR TXT ZG)
(setq oldaun (getvar "aunits")
oldosm (getvar "osmode"))
(setvar "aunits" 3)   ;设为弧度
(setvar "osmode" 0 )                   ;设为无捕捉方式
(setq ss (ssget '((0 . "TEXT"))))
   (if (not ss)                     ;图中没有插入各种符号
    (progn (alert " 没有选中文本")
         (exit))
    (progn
      (while (> (sslength ss) 0)
(setq ent (entget(setq en (ssname ss 0))));取出第一个数据
(setq pt (cdr(assoc 10 ent))
      txt (cdr(assoc 1 ent))
      zg (cdr(assoc 40 ent))
      lst (cons (list pt txt zg) lst);;获取表
      ss (ssdel en ss))
(entdelen));删除图元
      (setq lst1 (vl-sort lst
         (function (lambda (e1 e2)
                (< (cadr(car e1)) (cadr(car e2))) ) ) ));根据y坐标排序
      (setq str "")
      (foreach e lst1
(setq str (strcat (cadr e) "\n" str))
(setq pt (car e);插入点
    zg (caddr e)));字高
      (setq pt (polar pt (* pi 0.5) zg))
      (command "MTEXT" pt "H" zg "W" 0 str "")))
(setvar "aunits" oldaun)   ;设为弧度
(setvar "osmode" oldosm )
(princ)
)
各位大侠,如何让上面的程序多行文字后面不加\n,只在中间的值上加,我要合并X,Y,Z三个单行文本,总是在Z后面加\n,


偏爱云~小吴 发表于 2013-11-6 12:29:38

(setq str (strcat (cadr e) "\n" str))改为(setq str (strcat "\n" (cadr e)str))后X前面又有了,如何只让X,Y后面有分列符

偏爱云~小吴 发表于 2013-11-6 13:33:14

如何不让Z后面的差值换行

偏爱云~小吴 发表于 2013-11-6 13:34:16

(1 . "x: 10000\ny: 10000\nz: 10000\n")
成为(1 . "x: 10000\ny: 10000\nz: 10000")
就可以了

q3_2006 发表于 2013-11-6 13:49:13

(command "MTEXT" pt "H" zg "W" 0 str "")))
改成
(vl-cmdf "MTEXT" pt "H" zg "W" 0 (substr str 1 (1- (strlen str))) "")))

偏爱云~小吴 发表于 2013-11-7 12:22:49

感谢大神

偏爱云~小吴 发表于 2013-11-8 12:30:43

另外弱弱的问下,如果坐标值外有框,可不可以通过框定位进行批量转换

q3_2006 发表于 2013-11-8 12:43:18

当然没问题

q3_2006 发表于 2013-11-8 12:44:21

上测试图研究

偏爱云~小吴 发表于 2013-11-9 12:11:42

如测试图的矩形框内的坐标值怎么批量转为多行
页: [1] 2
查看完整版本: 单行文字合并多行文字后不要跟\N