제가 리습 초보라서..
숫자를 한자로 변환하는 리습을 찾아서
이걸 한글을 한자로 변환하는 리습으로 수정을 해볼려고했는데
잘 안되네요.ㅠㅠ
전을 田 대를 大 이런 방법으로 변경하는 리습이 필요합니다.
제가 찾은 숫자를 한자로 바꾸는 리습은 이겁니다.
;change character
(defun c:c2c (/ Sset obj str Cnt txt nstr)
(vl-load-com)
(if (setq Sset (ssget (list (cons 0 “TEXT”))))
(progn
(setq obj (mapcar ‘vlax-ename->vla-object (vl-remove-if ‘listp (mapcar ‘cadr (ssnamex Sset)))))
(foreach x obj
(setq str (vla-get-textstring x))
(setq Cnt 1 nstr nill)
(while (not (= (setq txt (substr str Cnt 1)) “”))
(cond
((= (ascii txt) 48) (setq txt “零”)) ;0–> (ascii “0”)=48
((= (ascii txt) 49) (setq txt “一”)) ;1–> (ascii “1”)=49
((= (ascii txt) 50) (setq txt “二”)) ;2–> (ascii “2”)=50
((= (ascii txt) 51) (setq txt “三”)) ;3–> (ascii “3”)=51
((= (ascii txt) 52) (setq txt “四”)) ;4–> (ascii “4”)=52
((= (ascii txt) 53) (setq txt “五”)) ;5–> (ascii “5”)=53
((= (ascii txt) 54) (setq txt “六”)) ;6–> (ascii “6”)=54
((= (ascii txt) 55) (setq txt “七”)) ;7–> (ascii “7”)=55
((= (ascii txt) 56) (setq txt “八”)) ;8–> (ascii “8”)=56
((= (ascii txt) 57) (setq txt “九”)) ;9–> (ascii “9”)=57
(t txt)
)
(setq nstr (append nstr (list txt)))
(setq Cnt (1+ Cnt))
)
(vla-put-textstring x (apply ‘strcat nstr))
)
)
)
(princ)
)
여기다 한글을 추가하거나 ‘-‘같은 특수기호를 추가해봤는데 아예 한글이 삭제되거나 안됩니다.
공유
한글로 전이 한자로 全戰電展田 이렇게 한개가 아닌데…컴퓨터가 무슨 수로 매칭을 할런지요. 아예 사전을 탑재해야 되는데…
제가 받은 숫자를 한자로 바꾸는 리습에서는 1을 一 2를 二 3을 三 0을 零 이런식으로 지정해서 바꾸게 해놨더라고요. 한글도 제가 필요한 한글만 몇개지정해서 미리 지정한 한자로 변경하고 싶은건데 잘 안되더라구요
넵 올렸습니다.^^
한글은 2바이트 문자입니다.
한글 1글자는 영문 2글자이므로 한개만 교환하면 깨져버립니다.
문자열교환으로 만들었으니 사용해 보세요.
(defun c:c2c (/ Sset ch_data str )
(vl-load-com)
(setq ch_data ‘((“일” “一”)(“이” “二”)(“삼” “三”)(“사” “四”)(“오” “五”)
(“육” “六”)(“칠” “七”)(“팔” “八”)(“구” “九”)(“영” “零”)) )
(setq Sset (ssget (list (cons 0 “TEXT”))))
(mapcar ‘(lambda (x)
(setq str (vla-get-textstring x))
(mapcar ‘(lambda (y) (setq str (vl-string-subst (cadr y) (car y) str))) ch_data)
(vla-put-textstring x str)
)(mapcar ‘vlax-ename->vla-object (vl-remove-if ‘listp (mapcar ‘cadr (ssnamex Sset)))))
(princ)
);defun
아..그래서 안되거였군요.ㅠㅠ 감사합니다 ^^
저 혹시 그럼 위에꺼랑 아래꺼랑 합칠려면 어떤부분을 수정해야하나요?숫자랑 한글 다 한자로 바꾸는방법이요..
필요한 것을 넣어서 쓰도록 만든 것입니다.
ch_data 만 바꿔서 쓰세요.
(setq ch_data ‘( (“일” “一”)(“이” “二”)(“삼” “三”)(“사” “四”)(“오” “五”)
(“육” “六”)(“칠” “七”)(“팔” “八”)(“구” “九”)(“영” “零”)
(“1” “一”)(“2” “二”)(“3” “三”)(“4” “四”)(“5” “五”)
(“6” “六”)(“7” “七”)(“8” “八”)(“9” “九”)(“0” “零”) ) )
한번씩만 인식을 해서 ‘121-1 전’ 이렇게 있으면 ‘一二1-1 田’ 이렇게 되더라구요..
그래서 저걸 고칠려고 해볼려는데 자꾸 에러가 나네요 ㅠ
반복수행 추가하여 수정했습니다.
(defun c:c2c (/ Sset ch_data str )
(vl-load-com)
(setq ch_data ‘( (“일” “一”)(“이” “二”)(“삼” “三”)(“사” “四”)(“오” “五”)
(“육” “六”)(“칠” “七”)(“팔” “八”)(“구” “九”)(“영” “零”)
(“1” “一”)(“2” “二”)(“3” “三”)(“4” “四”)(“5” “五”)
(“6” “六”)(“7” “七”)(“8” “八”)(“9” “九”)(“0” “零”) ) )
(setq Sset (ssget (list (cons 0 “TEXT”))))
(mapcar ‘(lambda (x)
(setq str (vla-get-textstring x))
(mapcar ‘(lambda (y) (while (vl-string-search (car y) str)
(setq str (vl-string-subst (cadr y) (car y) str)))) ch_data)
(vla-put-textstring x str))
(mapcar ‘vlax-ename->vla-object (vl-remove-if ‘listp (mapcar ‘cadr (ssnamex Sset)))))
(princ)
);defun
와..감사합니다!!!!열심히 공부좀 해야겠어요 ㅠ