明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2346|回复: 18

[提问] 求一代码

[复制链接]
发表于 2021-1-18 14:12:05 | 显示全部楼层 |阅读模式
15明经币
本帖最后由 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



最佳答案

查看完整内容

請您測試一下 (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)) ; ...
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2021-1-18 14:12:06 | 显示全部楼层
本帖最后由 bssurvey 于 2021-1-25 08:45 编辑

請您測試一下
(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)
)
回复

使用道具 举报

发表于 2021-1-18 15:40:17 | 显示全部楼层
  1. (defun c:tt ()
  2.         (setq ss (ssget  '((0 . "MTEXT"))))
  3.         (setq slen (sslength ss))
  4.         (setq n 0)

  5.         (while (< n slen)
  6.                 (setq ssn (ssname ss n))
  7.                 (setq entdat (entget ssn))
  8.                 (setq pt  (cdr (assoc 10 entdat))       ;读取文字的插入点坐标
  9.               txt (cdr (assoc 1 entdat))        ;读取文字内容
  10.               zg  (cdr (assoc 40 entdat)))      ;读取文字的字高

  11.                 (setq i 1 ftxt "")
  12.                 (while (and (< i (strlen txt)) (/= (setq tmp (substr txt i 1)) "\\"))
  13.                         (setq ftxt (strcat ftxt tmp) i (1+ i))
  14.                 )
  15.                 (princ ftxt)    ;第一行

  16.                 (setq a1 (strlen ftxt))
  17.                 (setq txt (substr txt (+ 3 a1)))
  18.                 (setq i 1 gtxt "")
  19.                 (while (and (< i (strlen txt)) (/= (setq tmp (substr txt i 1)) "\\"))
  20.                         (setq gtxt (strcat gtxt tmp) i (1+ i))
  21.                 )
  22.                 (princ gtxt)    ;第二行

  23.                 (setq a2 (strlen gtxt))
  24.                 (setq txt (substr txt (+ 3 a2)))
  25.                 (setq i 1 htxt "")
  26.                 (while (and (< i (strlen txt)) (/= (setq tmp (substr txt i 1)) "\\"))
  27.                         (setq htxt (strcat htxt tmp) i (1+ i))
  28.                 )
  29.                 (princ htxt)    ;第三行

  30.                 (setq result (strcat ftxt" " gtxt " " htxt))    ;合并前三行
  31.                
  32.                 (entmake (list '(0 . "TEXT") (cons 1 result) (cons 10 pt) (cons 40 zg)))
  33.                 (entdel ssn)

  34.                 (setq n (+ 1 n))
  35.         )
  36. (princ)
  37. )


就你所提的要求简单写了下,如果需要更改为更宽的应用场景再做修改调整
回复

使用道具 举报

发表于 2021-1-18 16:24:10 | 显示全部楼层
  1. (defun c:tt ()
  2.         (vl-load-com)
  3.         (setq ss (ssget  '((0 . "MTEXT"))))
  4.         (setq slen (sslength ss))
  5.         (setq n 0)

  6.         (while (< n slen)
  7.                 (setq ssn (ssname ss n))
  8.                 (setq entdat (entget ssn))
  9.                 (setq pt  (cdr (assoc 10 entdat))       ;读取文字的插入点坐标
  10.               txt (cdr (assoc 1 entdat))        ;读取文字内容
  11.               zg  (cdr (assoc 40 entdat)))      ;读取文字的字高

  12.                 (setq ftxt (substr txt 1 (vl-string-search "\\P" txt)))     ;第一行

  13.                 (setq a1 (strlen ftxt))
  14.                 (setq txt (substr txt (+ 3 a1)))
  15.                 (setq gtxt (substr txt 1 (vl-string-search "\\P" txt)))     ;第二行

  16.                 (setq a2 (strlen gtxt))
  17.                 (setq txt (substr txt (+ 3 a2)))
  18.                 (setq htxt (substr txt 1 (vl-string-search "\\P" txt)))     ;第二行

  19.                 (setq result (strcat ftxt" " gtxt " " htxt))                                ;合并前三行
  20.                
  21.                 (entmake (list '(0 . "TEXT") (cons 1 result) (cons 10 pt) (cons 40 zg)))                ;创建单行文字
  22.                 (entdel ssn)                ;删除原多行文字

  23.                 (setq n (+ 1 n))
  24.         )
  25. (princ)
  26. )



修改了一下

评分

参与人数 1明经币 +1 收起 理由
bssurvey + 1 很给力!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2021-1-19 08:27:55 | 显示全部楼层
本帖最后由 wgij007 于 2021-1-19 08:37 编辑

有点问题,我的多行文本是去了换行符的。
显视
utyh 258
              1 Pli
                       447-8po
                                   最2548 587 mm2   

不能上传,好麻烦呀





回复

使用道具 举报

发表于 2021-1-19 08:39:53 | 显示全部楼层
wgij007 发表于 2021-1-19 08:27
有点问题,我的多行文本是去了换行符的。
显视
utyh 258

你的多行文本都是这种格式吗?  又没有什么规律  比如说:是否前面需要保留的字符数恒定?或者所有多行文字都是要去除“最”字之后的字符?
回复

使用道具 举报

 楼主| 发表于 2021-1-19 15:07:34 | 显示全部楼层
insufficient 发表于 2021-1-19 08:39
你的多行文本都是这种格式吗?  又没有什么规律  比如说:是否前面需要保留的字符数恒定?或者所有多行文 ...

是的,都没有换行符的

http://bbs.mjtd.com/thread-182786-1-1.html

都是转后的格式
回复

使用道具 举报

发表于 2021-1-20 11:13:32 | 显示全部楼层
wgij007 发表于 2021-1-19 15:07
是的,都没有换行符的

http://bbs.mjtd.com/thread-182786-1-1.html

可以用insufficient的LISP 把"\\P"改成"\n"試試
回复

使用道具 举报

 楼主| 发表于 2021-1-21 11:25:05 | 显示全部楼层
bssurvey 发表于 2021-1-20 11:13
可以用insufficient的LISP 把"\\P"改成"\n"試試

还是不行,一样的
回复

使用道具 举报

 楼主| 发表于 2021-1-22 08:15:00 | 显示全部楼层
可能去了换行符没标识就不好搞了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-17 05:46 , Processed in 0.174331 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表