<<*** 批量多行文字刪除第一行轉單行文字 ***>>
本帖最后由 lee50310 于 2023-4-6 05:26 编辑原請求帖:
http://bbs.mjtd.com/thread-187536-1-1.html
程式要求: (1)框選指定對象 (2)只處理 "TechnicExplain" 圖層 上的多行文字
(3)刪除第一行。 (4)轉換成單行文字
執行指令:tt2
執行效果:如動態圖所示
本帖最后由 lee50310 于 2023-4-7 13:00 编辑
bai2000 发表于 2023-4-6 18:36
很不错,但是不需要 “(3)刪除第一行“的功能,怎么改。最好图层点选,更通用一点
(princ "\n批量選擇要轉換的多行文字 : ")
(setq ss(ssget (list (cons 0 "MTEXT") (cons 8 "TechnicExplain")) ));過濾多行文字及圖層
指定圖層 可修改程式中 (cons 8 "TechnicExplain") 將 "TechnicExplain"圖層名 改成你要的圖層名 例: "temp"
(princ "\n批量選擇要轉換的多行文字 : ")
(setq ss(ssget (list (cons 0 "MTEXT") (cons 8 "temp")) ));過濾多行文字及圖層
刪除第一行是原主的要求
若不要刪除第一行那 只剩 多行文字轉 單行文字
只需將程式中 此處修改成下面樣式即可
(if (eq (vla-get-objectname obj) "AcDbMText")
(progn
;|-------此段以下當作註解*****
(setq b1(rh:regexp "\\\\" (vla-get-TextString obj) "")) ;取出文字串 例: b1="底板\tA05 底板: 1300x480x16=1"
(setq tn (strlen b1)) ;字串長度
(if (setq k(vl-string-position (ascii "\t") b1 0 T) ) ;換行符號 "/t" ,vl-string-position ==> 字串字數從0開始數到 換行符號 "\t" 的長度
(setq b2(substr b1 (+ k 2) tn)) ;刪除文字串第一行 "底板" , b2= "A05 底板: 1300x480x16=1"
(setq b2 b1) ;沒有找到回原字串
);end_if
(vla-put-TextString obj b2) ;更新文字串
|; -------此段以上當作註解******
(vl-cmdf "explode" ent ) ;分解成單行文字
(setq data(entget (entlast)))
(setq op_ip(assoc 10 data))
(setq data(subst np_ip op_ip data)) ;換插入點為左下點
(entmod data)
);end_progn
(alert "不是多行文字實體")
);end_if
本帖最后由 lee50310 于 2023-10-18 15:58 编辑
hhjjwww 发表于 2023-10-17 06:58
这个正需要,谢了。另外,有办法指定删除特定行吗,例如3行里的第二行?
[程式:多行文字轉單行文字並刪除指定的行 ]
執行指令:tt
1.選擇一個多行文字:
2.輸入要刪除第幾行:
修正版 ttb2_chs.lspttb2_cht.lsp==> 修正dxf 錯誤 日期:版ˋ2023/10/18
lee50310 发表于 2023-10-17 16:31
[程式:多行文字轉單行文字並刪除指定的行 ]
執行指令:tt
1.選擇一個多行文字:
不错,可以用,准备后边想个办法能批量操作多个多行文字,谢谢!:D-
測試時請下載 原請求帖所提供的測試圖檔測試
点赞!!! 多谢分享!!!! 谢谢楼主分享! 挺好的程序 谢谢分享,学习了
{:1_1:}谢谢楼主分享! 很不错,但是不需要 “(3)刪除第一行“的功能,怎么改。最好图层点选,更通用一点 謝謝樓主分享!
页:
[1]
2