이럴 때 사용하세요
A동-101, A동-102의 A동을 B동으로 일괄 바꿉니다. 변경 전 검색어가 의도한 부분에만 쓰였는지 확인하세요.
지원 범위와 주의사항
- 대소문자를 구분하는 부분 일치입니다. 바꿀 문자열을 비우면 찾은 내용을 삭제합니다.
- 필드(%<)와 MTEXT 서식 제어·중괄호가 들어간 문자는 건너뜁니다. 줄바꿈 MTEXT도 포함됩니다.
- 잠긴 레이어는 변경하지 않습니다. 블록 내부 문자·속성 문자는 제외합니다.
코드에서 살펴볼 부분
c:TREPLACE는 입력을 받고, autocats-treplace-로 시작하는 함수가 실제 처리를 맡습니다. 객체 선택 조건과 입력값 검사를 먼저 확인하면 다른 도면 작업에도 응용할 수 있습니다.
각 파일은 단독으로 로드할 수 있습니다. CATS Pro 설치가 필요하지 않으며, 같은 이름의 사용자 명령이 있다면 defun c: 이름을 바꿔 사용하세요.
사용 순서
- 1
autocats-text-replace.lsp를 다운로드하고 APPLOAD로 로드합니다.
- 2
TREPLACE를 입력합니다.
- 3
명령행 안내에 따라 값을 입력하거나 기준 객체를 고릅니다.
- 4
대상 객체를 선택하고 Enter를 누른 뒤 결과를 확인합니다.
코드 전문
다운로드 파일은 아래 코드와 100% 동일합니다. 붙여넣기보다 파일 다운로드 후 APPLOAD 로드를 권장합니다.
;;; AutoCATS 리습 자료실
;; 명령: TREPLACE
;; 기능: 선택한 일반 TEXT·서식 없는 MTEXT에서 문자열을 찾아 모두 치환합니다.
;; 출처: https://www.autocats.co.kr/lisp/text-replace
;; 버전: 1.0 (2026-10-23)
;; 라이선스: 자유 사용·수정, 재배포 시 출처(autocats.co.kr) 표기
;; 안전: 잠긴 레이어·외부참조 보호, 변경은 UNDO 그룹, 명령별 범위는 상세 가이드 참고
(vl-load-com)
(defun autocats-treplace-safe-p (ent / data row block)
(setq data (entget ent)
row (tblsearch "LAYER" (cdr (assoc 8 data))))
(and data row (= 0 (logand 4 (cdr (assoc 70 row))))
(or (/= "INSERT" (cdr (assoc 0 data)))
(and (setq block (tblsearch "BLOCK" (cdr (assoc 2 data))))
(= 0 (logand 12 (cdr (assoc 70 block))))))))
(defun autocats-treplace-replace-pair (code value data)
(if (assoc code data) (subst (cons code value) (assoc code data) data)
(append data (list (cons code value)))))
(defun autocats-treplace-put (ent property value / data)
(if (autocats-treplace-safe-p ent)
(progn
(setq data (entget ent))
(if (= "MTEXT" (cdr (assoc 0 data)))
(progn
(setq data (vl-remove-if '(lambda (pair) (member (car pair) '(1 3))) data))
(while (> (strlen value) 250)
(setq data (append data (list (cons 3 (substr value 1 250)))) value (substr value 251)))
(setq data (append data (list (cons 1 value)))))
(setq data (autocats-treplace-replace-pair 1 value data)))
(if (entmod data) (progn (entupd ent) T)))))
(defun autocats-treplace-get (ent property / data value)
(setq data (entget ent) value "")
(if (= "MTEXT" (cdr (assoc 0 data)))
(progn (foreach pair data (if (member (car pair) '(1 3)) (setq value (strcat value (cdr pair))))) value)
(cdr (assoc 1 data))))
(defun autocats-treplace-batch (selection action / index changed skipped ent result)
(setq index 0 changed 0 skipped 0)
(if selection
(repeat (sslength selection)
(setq ent (ssname selection index)
result (if (autocats-treplace-safe-p ent) (vl-catch-all-apply action (list ent))))
(if (and result (not (vl-catch-all-error-p result)))
(setq changed (1+ changed))
(setq skipped (1+ skipped)))
(setq index (1+ index))))
(princ (strcat "\n[TREPLACE] 완료: " (itoa changed) " / 건너뜀: " (itoa skipped)))
(list changed skipped))
(defun autocats-treplace-replace (value old new / start found result)
(setq start 0 result "")
(if (/= old "")
(progn
(while (setq found (vl-string-search old value start))
(setq result (strcat result (substr value (1+ start) (- found start)) new)
start (+ found (strlen old))))
(strcat result (substr value (1+ start))))))
(defun autocats-treplace-apply (ent old new / value data)
(setq data (entget ent) value (autocats-treplace-get ent 'TextString))
(and (/= old "") (member (cdr (assoc 0 data)) '("TEXT" "MTEXT")) value
(null (vl-string-search "%<" value))
(or (= "TEXT" (cdr (assoc 0 data)))
(not (vl-some '(lambda (s) (vl-string-search s value)) '("\\" "{" "}"))))
(vl-string-search old value)
(autocats-treplace-put ent 'TextString (autocats-treplace-replace value old new))))
(defun c:TREPLACE (/ *error* undo-open old new selection)
(defun *error* (msg)
(if undo-open (progn (command-s "_.UNDO" "_End") (setq undo-open nil)))
(if (and msg (not (wcmatch (strcase msg) "*CANCEL*,*QUIT*,*EXIT*,*취소*")))
(princ (strcat "\n[TREPLACE] 중단: " msg)))
(princ))
(setq old (getstring T "\n찾을 문자열 (대소문자 구분): "))
(if (/= old "")
(progn
(setq new (getstring T "\n바꿀 문자열 (Enter=삭제): "))
(princ "\n대상 객체를 선택하세요: ")
(setq selection (ssget '((0 . "TEXT,MTEXT"))))
(if selection
(progn
(command "_.UNDO" "_Begin")
(setq undo-open T)
(autocats-treplace-batch selection '(lambda (ent) (autocats-treplace-apply ent old new)))
(command "_.UNDO" "_End")
(setq undo-open nil)))))
(princ))
(princ "\n[AutoCATS] TREPLACE 로드 완료")
(princ)
호환 CAD
위 환경에서 확인했습니다. 목록에 없는 CAD는 샘플 도면에서 먼저 결과를 대조한 뒤, CAD 종류·버전과 함께 네이버 카페에 알려주세요.
함께 쓰면 좋은 CATS 명령
자주 묻는 질문
CATS Pro와 기능이 완전히 같은가요?
CATS Pro의 TRP 관련 작업을 명령 탐색기에서 확인할 수 있습니다. 아래 리습은 설명된 범위의 독립 예제입니다.
변경을 되돌릴 수 있나요?
도면을 변경하는 명령은 한 UNDO 그룹으로 묶습니다. 완료 후 U로 되돌릴 수 있습니다. 집계·조회 명령은 도면을 변경하지 않습니다. 작업 전 복사본에서 결과를 확인하세요.