iDwgLsp 프로그램을 설치하면 구글 블로거에 등록된 리습코드를 구동 시켜주는 기능을 지원합니다. - 다운로드 사이트 : http://arx119.egloos.com/10973367 - 지원버전 오토캐드 (2007~2013)
2012년 12월 25일 화요일
[LISP-GSJ] 콤마붙이는 프로그램 (포스트아이디 : 431355445408298573)
;;=====================================================================================================
;; http://cafe.daum.net/zwcad & http://www.lispcenter.net
;;=====================================================================================================
;; 선택된 객체들 중에서 콤마를 제거한다.
;; 숫자 형태의 문자열이 아니어도 콤마가 존재하면 모두 제거한다.
;;=====================================================================================================
(defun C:RC( / SSetEnt01 SSetEnt02 EntCount01 EntCount02 CountNum01 CountNum02 EntName EntList EntType TextVal TextVal01 TextVal02)
;;--------------------------------------------------------------------------------------------------
(setq SSetEnt01 nil)
(setq SSetEnt02 nil)
(setq SSetEnt01 (ssget))
;;--------------------------------------------------------------------------------------------------
(if (/= SSetEnt01 nil)
(setq EntCount01 (sslength SSetEnt01))
(setq EntCount01 0)
)
;;--------------------------------------------------------------------------------------------------
(setq SSetEnt02 (ssadd))
(setq CountNum01 0)
(repeat EntCount01
(setq EntName (ssname SSetEnt01 CountNum01))
(setq EntList (entget EntName))
(setq EntType (cdr (assoc 0 EntList)))
(if (or (= "TEXT" EntType) (= "MTEXT" EntType))
(progn
(setq TextVal (cdr (assoc 1 EntList)))
(if (> (PatternCount TextVal ",") 0)
(ssadd EntName SSetEnt02)
)
)
)
(setq CountNum01 (+ CountNum01 1))
)
;;--------------------------------------------------------------------------------------------------
(if (/= SSetEnt02 nil)
(setq EntCount02 (sslength SSetEnt02))
(setq EntCount02 0)
)
;;--------------------------------------------------------------------------------------------------
(setq CountNum02 0)
(repeat EntCount02
(setq EntName (ssname SSetEnt02 CountNum02))
(setq EntList (entget EntName))
(setq TextVal01 (cdr (assoc 1 EntList)))
(setq TextVal02 (RemoveChar TextVal01 ","))
(setq TextVal01 (assoc 1 EntList))
(setq TextVal02 (cons 1 TextVal02))
(setq EntList (subst TextVal02 TextVal01 EntList))
(entmod EntList)
(setq CountNum02 (+ CountNum02 1))
)
;;--------------------------------------------------------------------------------------------------
(princ (strcat "\n" (itoa EntCount01) "개의 객체 중에서 " (itoa EntCount02) "개의 문자열을 수정했습니다!"))
;;--------------------------------------------------------------------------------------------------
(princ)
)
;;=====================================================================================================
;;=====================================================================================================
;; 선택된 객체들 중에서 숫자 형태의 문자열에 콤마를 삽입한다.
;;=====================================================================================================
(defun C:IC( / SSetEnt01 SSetEnt02 EntCount01 EntCount02 CountNum01 CountNum02 EntName EntList EntType TextVal TextVal01 TextVal02)
;;--------------------------------------------------------------------------------------------------
(setq SSetEnt01 nil)
(setq SSetEnt02 nil)
(setq SSetEnt01 (ssget))
;;--------------------------------------------------------------------------------------------------
(if (/= SSetEnt01 nil)
(setq EntCount01 (sslength SSetEnt01))
(setq EntCount01 0)
)
;;--------------------------------------------------------------------------------------------------
(setq SSetEnt02 (ssadd))
(setq CountNum01 0)
(repeat EntCount01
(setq EntName (ssname SSetEnt01 CountNum01))
(setq EntList (entget EntName))
(setq EntType (cdr (assoc 0 EntList)))
(if (or (= "TEXT" EntType) (= "MTEXT" EntType))
(progn
(setq TextVal (cdr (assoc 1 EntList)))
(if (= (NumberP_Func TextVal) 'T)
(ssadd EntName SSetEnt02)
)
)
)
(setq CountNum01 (+ CountNum01 1))
)
;;--------------------------------------------------------------------------------------------------
(if (/= SSetEnt02 nil)
(setq EntCount02 (sslength SSetEnt02))
(setq EntCount02 0)
)
;;--------------------------------------------------------------------------------------------------
(setq CountNum02 0)
(repeat EntCount02
(setq EntName (ssname SSetEnt02 CountNum02))
(setq EntList (entget EntName))
(setq TextVal01 (cdr (assoc 1 EntList)))
(setq TextVal02 (InsertComma TextVal01))
(setq TextVal01 (assoc 1 EntList))
(setq TextVal02 (cons 1 TextVal02))
(setq EntList (subst TextVal02 TextVal01 EntList))
(entmod EntList)
(setq CountNum02 (+ CountNum02 1))
)
;;--------------------------------------------------------------------------------------------------
(princ (strcat "\n" (itoa EntCount01) "개의 객체 중에서 " (itoa EntCount02) "개의 문자열을 수정했습니다!"))
;;--------------------------------------------------------------------------------------------------
(princ)
)
;;=====================================================================================================
;;=====================================================================================================
;; 전달 받은 문자열에서 지정한 문자를 삭제한다.
;;=====================================================================================================
(defun RemoveChar(iTextVal iDelChar / iTextVal iRChar iRtnText iCountNum)
;;--------------------------------------------------------------------------------------------------
(setq iRtnText "")
;;--------------------------------------------------------------------------------------------------
(setq iCountNum 1)
(repeat (strlen iTextVal)
(if (/= (substr iTextVal iCountNum 1) iDelChar)
(setq iRtnText (strcat iRtnText (substr iTextVal iCountNum 1)))
)
(setq iCountNum (+ iCountNum 1))
)
;;--------------------------------------------------------------------------------------------------
iRtnText
)
;;=====================================================================================================
;;=====================================================================================================
;; 전달 받은 문자열에 콤마를 삽입한다.
;;=====================================================================================================
(defun InsertComma(iTextVal / iTextVal iTextType iTextTail iTextHead iCountNum)
;;--------------------------------------------------------------------------------------------------
(setq iTextType (type (read iTextVal))) ;;
(if (= iTextType 'REAL)
(progn
(setq iTextTail (SplitRearChar iTextVal "."))
(setq iTextHead (SplitFrontChar iTextVal "."))
)
(progn
(setq iTextTail "")
(setq iTextHead iTextVal)
)
)
;;--------------------------------------------------------------------------------------------------
(setq iTextHead (vl-string->list iTextHead))
(setq iTextHead (reverse iTextHead))
(setq iTextHead (vl-list->string iTextHead))
;;--------------------------------------------------------------------------------------------------
(setq iTextVal "")
;;--------------------------------------------------------------------------------------------------
(setq iCountNum 1)
(repeat (strlen iTextHead)
(if (= (rem iCountNum 3) 0)
(setq iTextVal (strcat "," (substr iTextHead iCountNum 1) iTextVal ))
(setq iTextVal (strcat (substr iTextHead iCountNum 1) iTextVal ))
)
(setq iCountNum (+ iCountNum 1))
)
;;--------------------------------------------------------------------------------------------------
(if (= (substr iTextVal 1 1) ",")
(setq iTextVal (substr iTextVal 2))
)
;;--------------------------------------------------------------------------------------------------
(if (= iTextType 'REAL)
(setq iTextVal (strcat iTextVal "." iTextTail))
)
;;--------------------------------------------------------------------------------------------------
iTextVal
)
;;=====================================================================================================
;;=====================================================================================================
;; 구분자를 기준으로 절단하여 뒤부분을 리턴한다
;;=====================================================================================================
(defun SplitRearChar(iTextData iSplitChar / iTextData iSplitChar iPositionNum)
(setq iPositionNum (vl-string-search iSplitChar iTextData 0))
(if (/= iPositionNum nil)
(setq iTextData (substr iTextData (+ iPositionNum 2)))
(alert "문자열 분리 실패 ")
)
)
;;=====================================================================================================
;;=====================================================================================================
;; 구분자를 기준으로 절단하여 앞부분을 리턴한다
;;=====================================================================================================
(defun SplitFrontChar(iTextData iSplitChar / iTextData iSplitChar iPositionNum)
(setq iPositionNum (vl-string-search iSplitChar iTextData 0))
(if (/= iPositionNum nil)
(setq iTextData (substr iTextData 1 iPositionNum))
(alert "문자열 분리 실패 ")
)
)
;;=====================================================================================================
;;=====================================================================================================
;; 문자열이 숫자인지 판단
;;=====================================================================================================
(defun NumberP_Func(iTextData / iTextData iRtnValue)
(if (numberp (read iTextData))
(setq iRtnValue 'T)
(setq iRtnValue nil)
)
iRtnValue
)
;;=====================================================================================================
;;=====================================================================================================
;; 전달받은 문자열에서 구분자를 카운트한다.
;;=====================================================================================================
(defun PatternCount(iTextData iPatternChar / iTextData iPatternChar iPatternCount iPositionNum iTextLength)
(setq iPatternCount 0)
(setq iPositionNum -1)
(setq iTextLength (strlen iTextData))
(while (and (/= iPositionNum nil) (<= iPositionNum iTextLength))
(setq iPositionNum (+ iPositionNum 1))
(setq iPositionNum (vl-string-search iPatternChar iTextData iPositionNum))
(if (and (/= iPositionNum nil) (<= iPositionNum iTextLength))
(setq iPatternCount (+ iPatternCount 1))
)
)
iPatternCount
)
;;=====================================================================================================
(princ "\nhttp://cafe.daum.net/zwcad & http://www.lispcenter.net")
(princ)
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기
즐거운 하루되세요...^^