明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: wgij007

[提问] 求一代码

[复制链接]
发表于 2021-1-22 08:45:02 | 显示全部楼层
wgij007 发表于 2021-1-22 08:15
可能去了换行符没标识就不好搞了

我用了您提供的Drawing1.dwg 右邊的字符,用insufficient大的 把"\\P" 改成"\n"是沒問題的
        (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 "\n" txt)))     ;第一行

                (setq a1 (strlen ftxt))
                (setq txt (substr txt (+ 3 a1)))
                (setq gtxt (substr txt 1 (vl-string-search "\n" txt)))     ;第二行

                (setq a2 (strlen gtxt))
                (setq txt (substr txt (+ 3 a2)))
                (setq htxt (substr txt 1 (vl-string-search "\n" 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)
)
回复

使用道具 举报

 楼主| 发表于 2021-1-22 15:05:27 | 显示全部楼层
bssurvey 发表于 2021-1-22 08:45
我用了您提供的Drawing1.dwg 右邊的字符,用insufficient大的 把"\\P" 改成"\n"是沒問題的
        (def ...

明经现在上传不了,好麻烦呀

上传那个是没处理的,用那个代码处理后才是。没换行符,
回复

使用道具 举报

发表于 2021-1-22 15:10:28 | 显示全部楼层
wgij007 发表于 2021-1-22 15:05
明经现在上传不了,好麻烦呀

上传那个是没处理的,用那个代码处理后才是。没换行符,

可以把檔案傳到百度網盤 或其他的網盤
回复

使用道具 举报

 楼主| 发表于 2021-1-22 19:00:47 | 显示全部楼层
bssurvey 发表于 2021-1-22 15:10
可以把檔案傳到百度網盤 或其他的網盤

麻烦你下一下了。
https://pan.baidu.com/s/1HexnYCK5r2znUcwW05LAyQ
提取码:yods

回复

使用道具 举报

发表于 2021-1-25 19:12:05 | 显示全部楼层
本帖最后由 lee50310 于 2021-1-26 12:25 编辑

執行前
utyh 258
1 Pli
447-8po
最2548 587 m2

執行後
utyh 258 1 Pli 447-8po 最2548 587 m2



*** 請執行下面的程式 就可以去掉多行文字的換行符號 ***


  1. ;;----------------------------------------------------------------------------------
  2. (defun c:tt ()
  3.                  (vl-load-com)
  4.                  (setq ss  (ssget  '((0 . "MTEXT"))))
  5.        (repeat (setq i   (sslength ss))                       
  6.                   (setq ssn (ssname ss (setq i(1- i)))
  7.                       entdat (entget ssn)
  8.                           txt  (cdr (assoc 1 entdat))                        ;取文字內容
  9.                          txt2  txt                                                   ;保存舊字串
  10.                         old_t  "\\P"                                               ;換行符號
  11.                        new_t  " "                                                  ;空1格
  12.                  )
  13.    
  14.             (while (vl-string-search "\\P" txt)                            ;判斷是否還有換行符號
  15.                      (setq txt(vl-string-subst new_t old_t txt))       ;去掉字串內的換行符號
  16.              )
  17.                                                                            
  18.                      (setq new_txt( cons 1 txt))     
  19.                      (setq old_txt( cons 1 txt2))
  20.                      (setq entdat (subst new_txt old_txt entdat))    ;更新資料串列
  21.                      (entmod entdat)                                           ;更新螢幕上的元體
  22.        )        
  23.               (princ)
  24. )
  25. ;;----------------------------------------------------------------------------------


回复

使用道具 举报

 楼主| 发表于 2021-1-25 21:15:37 | 显示全部楼层
bssurvey 发表于 2021-1-18 14:12
請您測試一下
(defun c:tt ()
        (vl-load-com)

谢谢你了,这是我想要的
回复

使用道具 举报

 楼主| 发表于 2021-2-21 08:07:05 | 显示全部楼层
bssurvey 发表于 2021-1-22 08:45
我用了您提供的Drawing1.dwg 右邊的字符,用insufficient大的 把"\\P" 改成"\n"是沒問題的
        (def ...

现在才发现,第二行与第三行都删了第一个字符,怎么回事。
回复

使用道具 举报

发表于 2021-2-22 08:02:27 | 显示全部楼层
wgij007 发表于 2021-2-21 08:07
现在才发现,第二行与第三行都删了第一个字符,怎么回事。

(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 "\n" txt)))     ;第一行                       
                                                                                                  
         (setq a1 (strlen ftxt))                                                                  
         (setq txt (substr txt (+ 2 a1)))                        ;這邊3改2                                       
         (setq gtxt (substr txt 1 (vl-string-search "\n" txt)))     ;第二行                       
                                                                                                  
         (setq a2 (strlen gtxt))                                                                  
         (setq txt (substr txt (+ 2 a2)))                         ;這邊3改2                                
         (setq htxt (substr txt 1 (vl-string-search "\n" 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)                                                                                          
)                                                                                                
回复

使用道具 举报

 楼主| 发表于 2021-2-22 08:06:50 | 显示全部楼层
bssurvey 发表于 2021-2-22 08:02
(defun c:tt ()                                                                                     ...

谢谢了.帮了大忙了
回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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