bssurvey 发表于 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)
)

wgij007 发表于 2021-1-22 15:05:27

bssurvey 发表于 2021-1-22 08:45
我用了您提供的Drawing1.dwg 右邊的字符,用insufficient大的 把"\\P" 改成"\n"是沒問題的
      (def ...

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

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

bssurvey 发表于 2021-1-22 15:10:28

wgij007 发表于 2021-1-22 15:05
明经现在上传不了,好麻烦呀

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

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

wgij007 发表于 2021-1-22 19:00:47

bssurvey 发表于 2021-1-22 15:10
可以把檔案傳到百度網盤 或其他的網盤

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

lee50310 发表于 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



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


;;----------------------------------------------------------------------------------
(defun c:tt ()
               (vl-load-com)
               (setq ss(ssget'((0 . "MTEXT"))))
       (repeat (setq i   (sslength ss))                     
                  (setq ssn (ssname ss (setq i(1- i)))
                      entdat (entget ssn)
                        txt(cdr (assoc 1 entdat))                        ;取文字內容
                         txt2txt                                                   ;保存舊字串
                        old_t"\\P"                                             ;換行符號
                     new_t" "                                                ;空1格
               )
   
            (while (vl-string-search "\\P" txt)                            ;判斷是否還有換行符號
                     (setq txt(vl-string-subst new_t old_t txt))       ;去掉字串內的換行符號
             )
                                                                           
                     (setq new_txt( cons 1 txt))   
                     (setq old_txt( cons 1 txt2))
                     (setq entdat (subst new_txt old_txt entdat))    ;更新資料串列
                     (entmod entdat)                                           ;更新螢幕上的元體
       )      
            (princ)
)
;;----------------------------------------------------------------------------------


wgij007 发表于 2021-1-25 21:15:37

bssurvey 发表于 2021-1-18 14:12
請您測試一下
(defun c:tt ()
      (vl-load-com)


谢谢你了,这是我想要的

wgij007 发表于 2021-2-21 08:07:05

bssurvey 发表于 2021-1-22 08:45
我用了您提供的Drawing1.dwg 右邊的字符,用insufficient大的 把"\\P" 改成"\n"是沒問題的
      (def ...

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

bssurvey 发表于 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)                                                                                          
)                                                                                                

wgij007 发表于 2021-2-22 08:06:50

bssurvey 发表于 2021-2-22 08:02
(defun c:tt ()                                                                                     ...

谢谢了.帮了大忙了
页: 1 [2]
查看完整版本: 求一代码