Message 1 of 23
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
I've searched around and found a couple lisps that would find text and replace them (without a dialog). One exmple is from this forum post here: http://forums.augi.com/showthread.php?43053-Take-existing-drawings-and-find-all-quot-quot-and-replac... I have copied the code it below. I wanted to see if anyone could modify it to also find text inside of tables also which it doesn't seem to do.
Thanks!
;-------------------------------------------------------------------------------
; FindReplaceAll - Changes Text, Mtext, Dimensions and Attribute Block entities
; that have a Find$ string with a Replace$ string.
; Arguments: 2
; Find$ = Phrase string to find
; Replace$ = Phrase to replace it with
; Syntax: (FindReplaceAll "old string" "new string")
; Returns: Updates Text, Mtext, Dimension and Attribute Block entities
;-------------------------------------------------------------------------------
(defun c:FindReplaceAll (Find$ Replace$ / BlkEntList@ BlkEntName^ BlkEntType$ Cnt#
DimEntList@ DimEntName^ DimEntType$ EntList@ EntName^ EntType$ FindReplace:
Mid$ Mid2$ NewText$ Num# Replace$ SS& Text$)
;-----------------------------------------------------------------------------
; FindReplace: - Returns Str$ with Find$ changed to Replace$
; Arguments: 3
; Str$ = Text string
; Find$ = Phrase string to find
; Replace$ = Phrase to replace Find$ with
; Returns: Returns Str$ with Find$ changed to Replace$
;-----------------------------------------------------------------------------
(defun FindReplace: (Str$ Find$ Replace$ / Cnt# FindLen# Loop Mid$ NewStr$ ReplaceLen#)
(setq Loop t Cnt# 1 NewStr$ Str$ FindLen# (strlen Find$) ReplaceLen# (strlen Replace$))
(while Loop
(setq Mid$ (substr NewStr$ Cnt# FindLen#))
(if (= Mid$ Find$)
(setq NewStr$ (strcat (substr NewStr$ 1 (1- Cnt#)) Replace$ (substr NewStr$ (+ Cnt# FindLen#)))
Cnt# (+ Cnt# ReplaceLen#)
);setq
(setq Cnt# (1+ Cnt#))
);if
(if (= Mid$ "") (setq Loop nil))
);while
NewStr$
);defun FindReplace:
;-----------------------------------------------------------------------------
; Start of Main function
;-----------------------------------------------------------------------------
(if (and (= (type Find$) 'STR)(= (type Replace$) 'STR)(/= Find$ ""))
(progn
(if (setq SS& (ssget "x" (list '(-4 . "<AND")'(-4 . "<OR")'(0 . "TEXT")'(0 . "MTEXT")'(0 . "DIMENSION")'(0 . "INSERT")'(-4 . "OR>")(cons 410 (getvar "CTAB"))'(-4 . "AND>"))))
(progn
(command "UNDO" "BEGIN")
(setq Cnt# 0)
(repeat (sslength SS&)
(setq EntName^ (ssname SS& Cnt#)
EntList@ (entget EntName^)
EntType$ (cdr (assoc 0 EntList@))
Text$ (cdr (assoc 1 EntList@))
);setq
(if (= EntType$ "INSERT")
(if (assoc 66 EntList@)
(progn
(while (/= (cdr (assoc 0 EntList@)) "SEQEND")
(setq EntList@ (entget EntName^))
(if (= (cdr (assoc 0 EntList@)) "ATTRIB")
(progn
(setq Text$ (cdr (assoc 1 EntList@)))
(if (wcmatch Text$ (strcat "*" Find$ "*"))
(progn
(setq ReplaceWith$ (FindReplace: Text$ Find$ Replace$))
(entmod (subst (cons 1 ReplaceWith$) (assoc 1 EntList@) EntList@))
(entupd EntName^)
);progn
);if
);progn
);if
(setq EntName^ (entnext EntName^))
);while
);progn
);if
(if (wcmatch Text$ (strcat "*" Find$ "*"))
(progn
(setq ReplaceWith$ (FindReplace: Text$ Find$ Replace$))
(entmod (subst (cons 1 ReplaceWith$) (assoc 1 EntList@) EntList@))
(entupd EntName^)
);progn
);if
);if
(setq Cnt# (1+ Cnt#))
);repeat
(command "UNDO" "END")
);progn
);if
);progn
);if
(princ)
);defun FindReplaceAll
Dan Nicholson C.I.D.
PCB Design Engineer
PCB Design Engineer
Solved! Go to Solution.