본문 바로가기
autocad

간단하게 리스트 내 요소들을 연산

by kmlab 2024. 12. 19.

어이상실 이렇게 간단할 수가~~~ 텍스트 선택으로 연산 가능 ^^

https://www.cadtutor.net/forum/topic/70076-sum-all-element-of-list/

 

sum all element of list

Hello every one I have a list like this (5 3 2 1 0) I want sum all I mean 5+3+2+1+0=11 Thanks all

www.cadtutor.net

(apply '+ lst)
더하기만 됨. 곱하기는 찾아봐야 함...
정말 간단하게 잘 됨^^

(apply '*lst)
곱하기도 잘 됨 ^^

다음은 LEE MAC 님의 문자열에서 숫자를 찾아 리스트로 만드는 함수입니다.
문자열을 파싱해서 0~9, 스페이스 아스키코드로 찾아서 변환합니다. (대단)

(defun LM:parsenumbers ( str ) 
    (   (lambda ( l )
             (read
                 (strcat "("
                     (vl-list->string
                         (mapcar
                            '(lambda ( a b c )
                                 (if (or (< 47 b 58) ;; ascii code char(48)="0";; char(57)="9"
                                         (and (= 45 b) (< 47 c 58) (not (< 47 a 58)))
                                         (and (= 46 b) (< 47 a 58) (< 47 c 58))
                                     )
                                     b 32 ;; ascii code char(32)=(space bar)
                                 )
                             )
                             (cons nil l) l (append (cdr l) '(()))
                         )
                     )
                     ")"
                 )
             )
         )
         (vl-string->list str)
     ) )

(defun c:tt (/ txt str lis)
  (setq txt (vla-get-TextString (vlax-ename->vla-object (car (entsel)))));; get string
  (setq str (LM:parsenumbers txt));; get numbers
  (defun KM:sum (lis) (apply '+ lis));; adding
  (propmt "+ ") (princ str) (prompt " = ")
(KM:sum str);; print result
)

(defun c:xx (/ txt str lis)
  (setq txt (vla-get-TextString (vlax-ename->vla-object (car (entsel)))));; get string
  (setq str (LM:parsenumbers txt));; get numbers
  (defun KM:mul (lis) (apply '* lis));; multiplying
  (propmt "x ") (princ str) (prompt " = ")
(KM: mul str);; print result
)



 

 

반응형