I tried using AutoCAD's Find with the FreeHand.shx font and it worked ok on our system. Here is a function that I wrote to be used in programs, but it can be run on the command line using the following syntax:
(FindReplaceAll "|" "1/4")
Use it with care, because it does exactly what it's named.
Terry Cadd
Code:
;-------------------------------------------------------------------------------
; 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 "|" "1/4")
; Returns: Updates Text, Mtext, Dimension and Attribute Block entities
;-------------------------------------------------------------------------------
(defun 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
[ Moderator Action = ON ] What are [ CODE ] tags... [ Moderator Action = OFF ]