안녕하세요.
단축키 Y를 실행하여 문자를 일괄 변경하는 Lisp을 사용하고 있습니다.
현재 Lisp은 예를 들면 “A1A2A3″라는 문장에서 A를 X로 변경하면 “A1A2X3“로 가장 오른쪽에 있는 문자부터 변경이 됩니다. 제가 원하는 것은 이 Lisp을 사용하여 변경하였을 때 왼쪽부터 순차적으로 변경되는 것 그러니깐 “X1A2A3″로 변경되는 것을 원하거든요… 수정 가능할까요?? ㅠㅠ
————————————————————————————
(defun C:y (/ sset n index txlist tx newtx newlist tx1)
(prompt “n Multi TEXTs Change..Pick Texts…<according DIMENSION>..”)
(setq o_txt (getstring “n ORIG’L TEXT in-put….”))
(setq n_txt (getstring “n NEW TEXT in-put….”))
(setq o_qty (strlen o_txt))
(prompt “nPick TEXTs to change…”)
(setq sset (ssget ))
(setq count (sslength sset))
(setq osu 0)
(repeat count
(COND ((OR (= (cdr (assoc 0 (setq txtin (entget (ssname sset OSU))))) “MTEXT”)
(= (cdr (assoc 0 (setq txtin (entget (ssname sset OSU))))) “TEXT”)
)
(setq newtx (cdr (assoc 1 (setq txtin (entget (ssname sset OSU))))) )
;;;(setq txtin (entget (ssname sset osu)))
(setq txt (cdr (assoc 1 txtin)))
(setq su 1)
(setq index 0)
(setq rm-k “”)
(setq rm+k “”)
(setq rmsame nil)
(setq co (strlen txt))
(repeat co
(setq rmk (substr txt su o_qty))
(setq rm-k (substr txt 1 (- su 1)))
(setq rm+k (substr txt (+ su o_qty) co))
(cond ((= o_txt rmk)
(setq f_txt (strcat rm-k n_txt rm+k))
(setq rmsame 111)
))
(setq su (+ su 1))
)
(if (= rmsame 111) (entmod (subst (cons 1 f_txt) (assoc 1 txtin) txtin)))
))
(setq osu (+ 1 osu))
)
)
레드망고님 진심 감사 드립니다.
(defun c:y ()
(setq OldVarList (list “osmode” “cmdecho” “cmddia” “filedia”))
(setq OldVarValue (mapcar ‘getvar OldVarList))
(mapcar ‘setvar OldVarList'(0 0 0 0))
(prompt “n Multi TEXTs Change..Pick Texts…<according DIMENSION>..”)
(setq o_txt (getstring “n ORIG’L TEXT in-put….”))
(setq n_txt (getstring “n NEW TEXT in-put….”))
(setq sel (ssget (list (cons 0 “*text”))))
(setq k 0)
(repeat (sslength sel)
(setq ss (ssname sel k))
(setq ssn_vl (vlax-ename->vla-object ss))
(setq txt_string (vlax-get-property ssn_vl ‘TextString))
(setq ch_str (vl-string-subst n_txt o_txt txt_string))
(vla-put-TextString ssn_vl ch_str)
(setq k (+ 1 k))
)
(setq *error* oer seterr nil)
(mapcar ‘setvar OldVarList OldVarValue)
(princ)
)
이렇게 한번 사용해보세요.