Jump to content

Recommended Posts

Posted

Can any one help me to modify the below pasted codes? since that lisp which i got from other site...but i would like to modify as per my requirement...I am not familiar with lisp programs...pls some one help me..

 

 

currently this lisp will add numbers from first numbers only in each text selection (ie. 2, 3)...But i would like to change as below..

 

As per snap shot...Total = ((2*4)+(3*5)+(5*6)) = 53

 

1.JPG

 

the code is

 (Defun c:add()
 (setq sset(Ssget '(( 0 . "TEXT")))
Index 0
val 0)
 (repeat (sslength sset)
   (setq strend(- (strlen (cdr(Assoc 1 (entget(ssname sset index)))))4)	  
   	  cval (substr (cdr(Assoc 1 (entget(ssname sset index)))) 1 strend)
  cval1(atoi cval)
   	  val(+ val cval1))
   (Setq index (+ 1 index)))
 (alert (Strcat "Total " (rtos val 2 0) " No's found")))

Posted

That's a very specific set of circumstances.

 

Are the values always the 1st and 3rd characters

Are they always numeric values

 

etc...

 

 

-David

Posted

Thanks David Bethel...

 

Are the values always the 1st and 3rd characters

 

Yes...1st & 3rd characters only...but 3rd character will be one or two digits (Ex. 33, 43)

 

Are they always numeric values

 

Yes..all are always Numeric values only

Posted

Try this

 

(defun c:add (/ cval cval1 index l ss strend val)
 (setq ss    (ssget '(( 0 . "text")))
l     (sslength ss)
index 0
val   0)
 (repeat l
   (setq strend (cdr(assoc 1 (entget(ssname ss index))))	  
   	  cval   (atoi (substr strend 3))
  cval1  (atoi strend)
   	  val    (+ val (* cval cval1))
         index  (+ 1 index)))
 (alert (strcat "total = " (rtos val 2 0))))

Posted

Maybe :

 

[b][color=BLACK]([/color][/b]defun c:sumtext [b][color=FUCHSIA]([/color][/b]/ ss i en tv i1 i2 vl sum[b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]and [b][color=NAVY]([/color][/b]setq ss [b][color=MAROON]([/color][/b]ssget '[b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]0 . [color=#2f4f4f]"TEXT"[/color][b][color=BLUE])[/color][/b][b][color=BLUE]([/color][/b]1 . [color=#2f4f4f]"#?#*"[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
      [b][color=NAVY]([/color][/b]setq i 0[b][color=NAVY])[/color][/b]
      [b][color=NAVY]([/color][/b]while [b][color=MAROON]([/color][/b]setq en [b][color=GREEN]([/color][/b]ssname ss i[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
             [b][color=MAROON]([/color][/b]setq tv [b][color=GREEN]([/color][/b]cdr [b][color=BLUE]([/color][/b]assoc 1 [b][color=RED]([/color][/b]entget en[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
                   i1 [b][color=GREEN]([/color][/b]atoi [b][color=BLUE]([/color][/b]substr tv 1 1[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
                   i2 [b][color=GREEN]([/color][/b]if [b][color=BLUE]([/color][/b]wcmatch [b][color=RED]([/color][/b]substr tv 4 1[b][color=RED])[/color][/b] [color=#2f4f4f]"#"[/color][b][color=BLUE])[/color][/b]
                          [b][color=BLUE]([/color][/b]atoi [b][color=RED]([/color][/b]substr tv 3 2[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
                          [b][color=BLUE]([/color][/b]atoi [b][color=RED]([/color][/b]substr tv 3 1[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
                   vl [b][color=GREEN]([/color][/b]cons [b][color=BLUE]([/color][/b]* i1 i2[b][color=BLUE])[/color][/b] vl[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
             [b][color=MAROON]([/color][/b]setq i [b][color=GREEN]([/color][/b]1+ i[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
        [b][color=NAVY]([/color][/b]setq sum [b][color=MAROON]([/color][/b]apply '+ vl[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]prin1 sum[b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

 

-David

Posted

This will allow for any number of digits either side of the 'x':

(defun c:addit ( / a b c d )
   (if (setq a (ssget '((0 . "TEXT") (1 . "#*[xX]#*"))))
       (repeat (setq b (sslength a))
           (setq c (strcase (cdr (assoc 1 (entget (ssname a (setq b (1- b)))))))
                 d (cons (* (atoi c) (atoi (substr c (+ 2 (vl-string-position 88 c))))) d)
           )
       )
   )
   (print (apply '+ d))
   (princ)
)

Posted

Thanks paulmcz, David Bethel & Lee Mac.. Its working fine...thanks a lot..

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...