求一代码
本帖最后由 wgij007 于 2021-1-22 08:19 编辑把多行文本的格式改一下,4行删最后一行.要框选(多行文本没有换行符的)。同时处理多个。
http://bbs.mjtd.com/thread-182786-1-1.html 这程序处理过的 最后一行最前面第一个字都是最
utyh 258
1 Pli
447-8po
最2548 587 m2
改为
utyh 258 1 Pli 447-8po
本帖最后由 bssurvey 于 2021-1-25 08:45 编辑
wgij007 发表于 2021-1-22 19:00
麻烦你下一下了。
https://pan.baidu.com/s/1HexnYCK5r2znUcwW05LAyQ
提取码:yods
請您測試一下
(defun c:tt ()
(vl-load-com)
(setq ss (ssget'((0 . "MTEXT"))))
(setq slen (sslength ss))
(setq n 0)
(while (< n slen)
(setq ssn (ssname ss n))
(setq entdat (entget ssn))
(setq pt(cdr (assoc 10 entdat)) ;读取文字的插入点坐标
txt (cdr (assoc 1 entdat)) ;读取文字内容
zg(cdr (assoc 40 entdat)) ;读取文字的字高
zg1(cdr (assoc 71 entdat))
lay1(cdr (assoc 8 entdat))
st1(cdr (assoc 7 entdat)))
(setq ftxt (substr txt 1 (vl-string-search "\n" txt))) ;第一行
(setq a1 (strlen ftxt))
(setq txt (substr txt (+ 2 a1)))
(setq gtxt (substr txt 1 (vl-string-search "\n" txt))) ;第二行
(setq a2 (strlen gtxt))
(setq txt (substr txt (+ 2 a2)))
(setq htxt (substr txt 1 (vl-string-search "\n" txt))) ;第三行
(setq result (strcat ftxt" " gtxt " " htxt)) ;合并前三行
(entmake (list '(0 . "MTEXT") '(100 . "AcDbEntity") '(100 . "AcDbMText") (cons 7 st1) (cons 1 result) (cons 10 pt)(cons 40 zg)(cons 71 zg1)(cons 8 lay1))) ;创建多行文字
(entdel ssn) ;删除原多行文字
(setq n (+ 1 n))
)
(princ)
) (defun c:tt ()
(setq ss (ssget'((0 . "MTEXT"))))
(setq slen (sslength ss))
(setq n 0)
(while (< n slen)
(setq ssn (ssname ss n))
(setq entdat (entget ssn))
(setq pt(cdr (assoc 10 entdat)) ;读取文字的插入点坐标
txt (cdr (assoc 1 entdat)) ;读取文字内容
zg(cdr (assoc 40 entdat))) ;读取文字的字高
(setq i 1 ftxt "")
(while (and (< i (strlen txt)) (/= (setq tmp (substr txt i 1)) "\\"))
(setq ftxt (strcat ftxt tmp) i (1+ i))
)
(princ ftxt) ;第一行
(setq a1 (strlen ftxt))
(setq txt (substr txt (+ 3 a1)))
(setq i 1 gtxt "")
(while (and (< i (strlen txt)) (/= (setq tmp (substr txt i 1)) "\\"))
(setq gtxt (strcat gtxt tmp) i (1+ i))
)
(princ gtxt) ;第二行
(setq a2 (strlen gtxt))
(setq txt (substr txt (+ 3 a2)))
(setq i 1 htxt "")
(while (and (< i (strlen txt)) (/= (setq tmp (substr txt i 1)) "\\"))
(setq htxt (strcat htxt tmp) i (1+ i))
)
(princ htxt) ;第三行
(setq result (strcat ftxt" " gtxt " " htxt)) ;合并前三行
(entmake (list '(0 . "TEXT") (cons 1 result) (cons 10 pt) (cons 40 zg)))
(entdel ssn)
(setq n (+ 1 n))
)
(princ)
)
就你所提的要求简单写了下,如果需要更改为更宽的应用场景再做修改调整 (defun c:tt ()
(vl-load-com)
(setq ss (ssget'((0 . "MTEXT"))))
(setq slen (sslength ss))
(setq n 0)
(while (< n slen)
(setq ssn (ssname ss n))
(setq entdat (entget ssn))
(setq pt(cdr (assoc 10 entdat)) ;读取文字的插入点坐标
txt (cdr (assoc 1 entdat)) ;读取文字内容
zg(cdr (assoc 40 entdat))) ;读取文字的字高
(setq ftxt (substr txt 1 (vl-string-search "\\P" txt))) ;第一行
(setq a1 (strlen ftxt))
(setq txt (substr txt (+ 3 a1)))
(setq gtxt (substr txt 1 (vl-string-search "\\P" txt))) ;第二行
(setq a2 (strlen gtxt))
(setq txt (substr txt (+ 3 a2)))
(setq htxt (substr txt 1 (vl-string-search "\\P" txt))) ;第二行
(setq result (strcat ftxt" " gtxt " " htxt)) ;合并前三行
(entmake (list '(0 . "TEXT") (cons 1 result) (cons 10 pt) (cons 40 zg))) ;创建单行文字
(entdel ssn) ;删除原多行文字
(setq n (+ 1 n))
)
(princ)
)
修改了一下 本帖最后由 wgij007 于 2021-1-19 08:37 编辑
insufficient 发表于 2021-1-18 16:24
修改了一下
有点问题,我的多行文本是去了换行符的。
显视
utyh 258
1 Pli
447-8po
最2548 587 mm2
不能上传,好麻烦呀
wgij007 发表于 2021-1-19 08:27
有点问题,我的多行文本是去了换行符的。
显视
utyh 258
你的多行文本都是这种格式吗?又没有什么规律比如说:是否前面需要保留的字符数恒定?或者所有多行文字都是要去除“最”字之后的字符? insufficient 发表于 2021-1-19 08:39
你的多行文本都是这种格式吗?又没有什么规律比如说:是否前面需要保留的字符数恒定?或者所有多行文 ...
是的,都没有换行符的
http://bbs.mjtd.com/thread-182786-1-1.html
都是转后的格式
wgij007 发表于 2021-1-19 15:07
是的,都没有换行符的
http://bbs.mjtd.com/thread-182786-1-1.html
可以用insufficient的LISP 把"\\P"改成"\n"試試 bssurvey 发表于 2021-1-20 11:13
可以用insufficient的LISP 把"\\P"改成"\n"試試
还是不行,一样的 可能去了换行符没标识就不好搞了
页:
[1]
2