dreams Posted February 28, 2013 Posted February 28, 2013 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 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"))) Quote
David Bethel Posted February 28, 2013 Posted February 28, 2013 That's a very specific set of circumstances. Are the values always the 1st and 3rd characters Are they always numeric values etc... -David Quote
dreams Posted February 28, 2013 Author Posted February 28, 2013 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 Quote
paulmcz Posted February 28, 2013 Posted February 28, 2013 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)))) Quote
David Bethel Posted February 28, 2013 Posted February 28, 2013 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 Quote
Lee Mac Posted February 28, 2013 Posted February 28, 2013 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) ) Quote
dreams Posted March 1, 2013 Author Posted March 1, 2013 Thanks paulmcz, David Bethel & Lee Mac.. Its working fine...thanks a lot.. Quote
Recommended Posts
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.