明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 402|回复: 13

[源码] 求一个单行文本替换的源码

[复制链接]
发表于 7 天前 | 显示全部楼层 |阅读模式
499明经币
本帖最后由 夏雨雪 于 2024-11-7 13:15 编辑

要求:



        1. 我图号的前半部分是机台号 ,后半部分是图纸编号;要替换的每张图纸的机台号是一样的(2432B)。图纸编号(R05)每张图纸不一样。我现在就是要把机台编号批量换掉,换成另一台机的。比如把2432B-R05   2432B-R06换成2435A-R05   2435A-R06.
         2.我的这个代码只能实现全部替换  就是把2432B替换成2435A  不能实现2432B-R05替换成2435A-R05
         

  • defun find_replace(/ dir str_old str_new )
  •   (setq dir "D://THSOFT//hsh//工作目录//find.ini")
  •   (if (=(setq n(:::read dir 1)) "1")
  •     (progn
  •       (setq str_old (:::read dir 2))
  •       (setq str_new (:::read dir 3))
  •   
  •       (while (setq a (ssget "x" (list (cons 1 str_old))))
  •         ;(setq a (ssget "x" (list (cons 1 str_old))));;;
  •         (setq a1 (ssname a 0))
  •         (setq a2 (entget a1))
  •         (setq a2 (subst (cons 1 str_new) (assoc 1 a2) a2));;用新项替换旧项
  •         (entmod a2) ;;;更新图元
  •       )
  •     )
  •   )
  •   
  •   
  • )
  • (find_replace)



最佳答案

查看完整内容

(defun X:chgterr (s / p) (if (/= s "Function cancelled") ; If an error (such as CTRL-C) occurs (princ (strcat "\nError: " s)) ; while this command is active... ) (setq p nil) ; Free selection set (setq *error* olderr) ; Restore old *error* handler (princ) ) (defun XJ:CHANGETEXT (SS OLD NEW / p l n e os as ns st s nsl osl sl si chf chm olderr) ...
发表于 7 天前 | 显示全部楼层


(defun X:chgterr (s / p)
        (if (/= s "Function cancelled")   ; If an error (such as CTRL-C) occurs
                (princ (strcat "\nError: " s)) ; while this command is active...
        )
        (setq p nil)                      ; Free selection set
        (setq *error* olderr)             ; Restore old *error* handler
        (princ)
)
(defun XJ:CHANGETEXT (SS OLD NEW / p l n e os as ns st s nsl osl sl si chf chm olderr)
        (setq olderr  *error*             ; Initialize variables
                *error* X:chgterr
                chm     0)
        (setq p SS)                  ; Select objects
        (if p (progn                      ; If any objects selected
                                        ;      (while (= 0 (setq osl (strlen (setq os (getstring t "\nOld string: ")))))
                                        (while (= 0 (setq osl (strlen (setq os OLD))))
            (princ "Null input invalid")
                                        )
                                        ;      (setq nsl (strlen (setq ns (getstring t "\nNew string: "))))
                                        (setq nsl (strlen (setq ns NEW)))
                                        (setq l 0 n (sslength p))
                                        (while (< l n)                 ; For each selected object...
                                                (setq e (entget (ssname p l)))
                                                (cond ((= "TEXT" (cdr (assoc 0 e)))              ; Look for TEXT entity type (group 0)  
                    (setq chf nil si 1)
                    (setq s (cdr (setq as (assoc 1 e))))
                    (while (= osl (setq sl (strlen
                                                                                                                                                                                 (setq st (substr s si osl)))))
                                                                                        (if (= st os)
                                                                                                (progn
                                                                                                        (setq s (strcat (substr s 1 (1- si)) ns
                                                                                                                                                (substr s (+ si osl))))
                                                                                                        (setq chf t) ; Found old string
                                                                                                        (setq si (+ si nsl))
                                                                                                )
                                                                                                (setq si (1+ si))
                                                                                        )
                    )
                    (if chf (progn        ; Substitute new string for old
                                                                                                                        (setq e (subst (cons 1 s) as e))
                                                                                                                        (entmod e)         ; Modify the TEXT entity
                                                                                                                        (setq chm (1+ chm))
                                                                                                                ))
                                                                        )                      ; Treat TEXT entity type (group 0)  
                                                        ((= "MTEXT" (cdr (assoc 0 e)))              ; Look for MTEXT entity type (group 0)  
                                                                (setq chf nil si 1)
                                                                (setq s (cdr (setq as (assoc 1 e))))
                                                                (while (= osl (setq sl (strlen
                                                                                                                                                                 (setq st (substr s si osl)))))
                                                                        (if (= st os)
                                                                                (progn
                                                                                        (setq s (strcat (substr s 1 (1- si)) ns
                                                                                                                                (substr s (+ si osl))))
                                                                                        (setq chf t) ; Found old string
                                                                                        (setq si (+ si nsl))
                                                                                )
                                                                                (setq si (1+ si))
                                                                        )
                                                                )
                                                                (if chf (progn        ; Substitute new string for old
                                                                                                        (setq e (subst (cons 1 s) as e))
                                                                                                        (entmod e)         ; Modify the MTEXT entity
                                                                                                        (setq chm (1+ chm))
                                                                                                ))
                                                        )                      ; Treat MTEXT entity type (group 0)  
                                                        ((= "ATTDEF" (cdr (assoc 0 e)))              ; Look for Attrib entity type (group 0)  
                                                                (setq chf nil si 1)
                                                                (setq s (cdr (setq as (assoc 2 e))))
                                                                (while (= osl (setq sl (strlen
                                                                                                                                                                 (setq st (substr s si osl)))))
                                                                        (if (= st os)
                                                                                (progn
                                                                                        (setq s (strcat (substr s 1 (1- si)) ns
                                                                                                                                (substr s (+ si osl))))
                                                                                        (setq chf t) ; Found old string
                                                                                        (setq si (+ si nsl))
                                                                                )
                                                                                (setq si (1+ si))
                                                                        )
                                                                )
                                                                (if chf (progn        ; Substitute new string for old
                                                                                                        (setq e (subst (cons 2 s) as e))
                                                                                                        (entmod e)         ; Modify the TEXT entity
                                                                                                        (setq chm (1+ chm))
                                                                                                ))
                                                        )                      ; Treat TEXT entity type (group 0)  
                                                )        ;cond
                                                (setq l (1+ l))
                                        )
                                ))
        (princ "一共修改了")                ; Print total lines changed
        (princ chm)
        (princ " 个位置的文字.")
        (terpri)
        (setq *error* olderr)             ; Restore old *error* handler
        (princ)
)
(defun find_replace (/ i s1 ss)
  (if(and
                         (setq dir "D://THSOFT//hsh//工作目录//find.ini")
                         (=(setq n(:::read dir 1)) "1")
                         (setq str_old (:::read dir 2))
                         (setq str_new (:::read dir 3))
                         (setq ss (ssget "x" (list (cons 1 (strcat str_old "*") ))))
                         (setq i -1)
                 )
                (progn
                        (xj:changetext ss str_old str_new)
                )
        )               
)
(princ)
)
(find_replace)
;;;; 你都测试过你贴的函数了,那:::read这个函数你肯定有,复制到一起就行了,瞎玩一下,凑凑热闹
回复

使用道具 举报

发表于 7 天前 | 显示全部楼层
试试这个excel多文档替换

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

 楼主| 发表于 7 天前 | 显示全部楼层
wu0146 发表于 2024-11-6 18:13
试试这个excel多文档替换

这么用啊,点击按键没反应
回复

使用道具 举报

发表于 7 天前 | 显示全部楼层
240506-F005 中的-F005,是固定的吗?
回复

使用道具 举报

发表于 7 天前 | 显示全部楼层
论坛好久没这么大悬赏的功能需求了,大佬们冲呀.................................

点评

穷得叮当响了  发表于 7 天前
回复

使用道具 举报

 楼主| 发表于 7 天前 | 显示全部楼层
qazxswk 发表于 2024-11-6 19:56
240506-F005 中的-F005,是固定的吗?

不是的     -号前面是固定的,-号后面不是固定的   -号前面是机台编号,同一台机是固定的,F005是图纸编号,是不固定的
回复

使用道具 举报

发表于 7 天前 | 显示全部楼层
本帖最后由 黄翔 于 2024-11-6 22:29 编辑

lee-mac的 Batch Find & Replace Text 这个程序就可以了.

https://www.lee-mac.com/bfind.html



回复

使用道具 举报

发表于 7 天前 | 显示全部楼层
'iMini迷你工具'能够不开图批量实现替换,包括塑型块内的‘单行文字’!
回复

使用道具 举报

发表于 6 天前 | 显示全部楼层
http://bbs.mjtd.com/thread-187447-1-1.html  你是想批量的话还有这种不打开文件替换文本的参考这个帖子
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-13 14:17 , Processed in 0.217607 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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