AQucsaiJr Posted August 14, 2009 Share Posted August 14, 2009 I am using REPSTRING LISP in a script to replace text throughout a folder full of drawings. I am having trouble with a text replace problem I came across. I want to run a text replace that will find: 5X-123 and change it too: 5X-999. The problem is, in some of the drawings there exists: 15X123, 25X-123, and 35X-123. I do not want anything except the 5X-123 string to change. Anyone know how I can change the 5X-123 text string without effecting the 15X-123, 25X-123, or 35X-123 strings? Quote Link to comment Share on other sites More sharing options...
JohnM Posted August 14, 2009 Share Posted August 14, 2009 can you post the script? Quote Link to comment Share on other sites More sharing options...
AQucsaiJr Posted August 14, 2009 Author Share Posted August 14, 2009 (defun repstring (ostring nstring) (setq ss (ssget "X" (list (cons 0 "INSERT,TEXT,MTEXT,RTEXT,DTEXT,DIMENSION")))) (if ss (progn (repeat (sslength ss) (setq ent (ssname ss 0)) (setq en (entget ent)) (setq etype (cdr (Assoc 0 en))) (if (= etype "INSERT") (PROGN (IF (ASSOC 66 EN) (PROGN (SETQ SUB1 (ENTNEXT ENT)) (WHILE (= (CDR (ASSOC 0 (ENTGET SUB1))) "ATTRIB") (SETQ SUBEN (ENTGET SUB1)) (SETQ STG (CDR (aSSOC 1 SUBEN))) (SETQ STG (vl-string-subst NSTRING OSTRING STG)) (ENTMOD (sUBST (cONS 1 STG) (aSSOC 1 SUBEN) SUBEN)) (SETQ SUB1 (eNTNEXT SUB1)) ) (ENTUPD ENT) ) ) ) (PROGN (SETQ STG (CDR (aSSOC 1 EN))) (SETQ STG (vl-string-subst NSTRING OSTRING STG)) (ENTMOD (SUBST (CONS 1 STG) (ASSOC 1 EN) EN)) ) ) (ssdel ent ss) ) ) ) ) (defun c:repstring () (SETQ OSTRING (GETSTRING T "\nSTRING TO BE REPLACED: ")) (SETQ NSTRING (GETSTRING T "\nSTRING TO REPLACE WITH: ")) (REPSTRING OSTRING NSTRING) ) Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted August 14, 2009 Share Posted August 14, 2009 Its because it is using vl-string-subst which looks for the occurence in any string and substitutes it. Are the 5X-123 strings the only text in the text object? Quote Link to comment Share on other sites More sharing options...
AQucsaiJr Posted August 14, 2009 Author Share Posted August 14, 2009 the 5X-123 is in either a single line of text or MText, but ya it is the only text within text objects. Quote Link to comment Share on other sites More sharing options...
AQucsaiJr Posted August 14, 2009 Author Share Posted August 14, 2009 Here is an example. I would like to be able to change only the 5X-123 string. EXAMPLE.dwg Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted August 14, 2009 Share Posted August 14, 2009 Try this: [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] rstring [b][color=RED]([/color][/b]old new [b][color=BLUE]/[/color][/b] ss sel[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vl-load-com[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] old [b][color=RED]([/color][/b][b][color=BLUE]strcase[/color][/b] old[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] ss [b][color=RED]([/color][/b][b][color=BLUE]ssget[/color][/b] [b][color=#ff00ff]"_X"[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=#009900]-4[/color][/b] . [b][color=#ff00ff]"<OR"[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=#009900]0[/color][/b] . [b][color=#ff00ff]"*TEXT"[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=#009900]-4[/color][/b] . [b][color=#ff00ff]"<AND"[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=#009900]0[/color][/b] . [b][color=#ff00ff]"INSERT"[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=#009900]66[/color][/b] . [b][color=#009900]1[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=#009900]-4[/color][/b] . [b][color=#ff00ff]"AND>"[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=#009900]-4[/color][/b] . [b][color=#ff00ff]"OR>"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vlax-for[/color][/b] Obj [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] sel [b][color=RED]([/color][/b][b][color=BLUE]vla-get-ActiveSelectionSet[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-get-ActiveDocument[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vlax-get-acad-object[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b] [b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=#ff00ff]"AcDbBlockReference"[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-get-ObjectName[/color][/b] Obj[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]foreach[/color][/b] att [b][color=RED]([/color][/b][b][color=BLUE]append[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vlax-invoke[/color][/b] Obj [b][color=DARKRED]'[/color][/b]GetAttributes[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vlax-invoke[/color][/b] Obj [b][color=DARKRED]'[/color][/b]GetConstantAttributes[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] old [b][color=RED]([/color][/b][b][color=BLUE]strcase[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-get-TextString[/color][/b] att[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-put-TextString[/color][/b] att new[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]t[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] old [b][color=RED]([/color][/b][b][color=BLUE]strcase[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-get-TextString[/color][/b] Obj[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-put-TextString[/color][/b] Obj new[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-delete[/color][/b] sel[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b] [b][color=#ff00ff]"\n** No Text or Attributed Blocks Found **"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] c:test [b][color=RED]([/color][/b] [b][color=RED])[/color][/b] [b][color=RED]([/color][/b]rstring [b][color=#ff00ff]"Lee"[/color][/b] [b][color=#ff00ff]"Mac"[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] Quote Link to comment Share on other sites More sharing options...
AQucsaiJr Posted August 14, 2009 Author Share Posted August 14, 2009 I load this lsp and try and call it up, rstring, and I get unknown command. Any ideas? Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted August 14, 2009 Share Posted August 14, 2009 rString is a sub-function which needs to be supplied with two arguments, namely the old and new strings The code you made is the same format. Quote Link to comment Share on other sites More sharing options...
AQucsaiJr Posted August 14, 2009 Author Share Posted August 14, 2009 I don't get it. Do I have to select something? or type something in before rstring? Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted August 14, 2009 Share Posted August 14, 2009 I even included a test function in my post - to show you how to use it Quote Link to comment Share on other sites More sharing options...
AQucsaiJr Posted August 14, 2009 Author Share Posted August 14, 2009 I must be missing something. So the LISP I provided, you just call it up and it asks for the string to be replaced and then what to replace it with. I don't know where I am going wrong with your but I can't figure out how to call it up. P.S. I didn't write the REPSTRING LISP. That was a LISP I found here in the forums. Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted August 14, 2009 Share Posted August 14, 2009 If you look at the whole LISP there are two function definitions. One is a sub-function, the other is a test function. In the test function, you can see how I have called rstring (the sub-function) with two arguments ("Lee" & "Mac"). You can modify the test function to suit your needs, i.e. include prompts, etc. Quote Link to comment Share on other sites More sharing options...
AQucsaiJr Posted August 14, 2009 Author Share Posted August 14, 2009 I see... Let me give that a try. Quote Link to comment Share on other sites More sharing options...
NBC Posted August 14, 2009 Share Posted August 14, 2009 To get the code above, that Lee created for you; simply change the text within the " " marks at the bottom. Change "Lee" to whatever text you want to replace, and change "Mac" to the text you want it to become. Then simply load the lsp, and type Test, and it should work. It did for me, in any case Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted August 14, 2009 Share Posted August 14, 2009 Have a good read of this: http://www.afralisp.net/lispa/lisp5.htm Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted August 14, 2009 Share Posted August 14, 2009 Here's with prompts just to clear the confusion [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] rstring [b][color=RED]([/color][/b]old new [b][color=BLUE]/[/color][/b] ss sel[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vl-load-com[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] old [b][color=RED]([/color][/b][b][color=BLUE]strcase[/color][/b] old[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] ss [b][color=RED]([/color][/b][b][color=BLUE]ssget[/color][/b] [b][color=#ff00ff]"_X"[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=#009900]-4[/color][/b] . [b][color=#ff00ff]"<OR"[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=#009900]0[/color][/b] . [b][color=#ff00ff]"*TEXT"[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=#009900]-4[/color][/b] . [b][color=#ff00ff]"<AND"[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=#009900]0[/color][/b] . [b][color=#ff00ff]"INSERT"[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=#009900]66[/color][/b] . [b][color=#009900]1[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=#009900]-4[/color][/b] . [b][color=#ff00ff]"AND>"[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=#009900]-4[/color][/b] . [b][color=#ff00ff]"OR>"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vlax-for[/color][/b] Obj [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] sel [b][color=RED]([/color][/b][b][color=BLUE]vla-get-ActiveSelectionSet[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-get-ActiveDocument[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vlax-get-acad-object[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b] [b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=#ff00ff]"AcDbBlockReference"[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-get-ObjectName[/color][/b] Obj[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]foreach[/color][/b] att [b][color=RED]([/color][/b][b][color=BLUE]append[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vlax-invoke[/color][/b] Obj [b][color=DARKRED]'[/color][/b]GetAttributes[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vlax-invoke[/color][/b] Obj [b][color=DARKRED]'[/color][/b]GetConstantAttributes[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] old [b][color=RED]([/color][/b][b][color=BLUE]strcase[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-get-TextString[/color][/b] att[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-put-TextString[/color][/b] att new[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]t[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] old [b][color=RED]([/color][/b][b][color=BLUE]strcase[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-get-TextString[/color][/b] Obj[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-put-TextString[/color][/b] Obj new[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-delete[/color][/b] sel[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b] [b][color=#ff00ff]"\n** No Text or Attributed Blocks Found **"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] c:repstring [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] old new[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] old [b][color=RED]([/color][/b][b][color=BLUE]getstring[/color][/b] [b][color=BLUE]t[/color][/b] [b][color=#ff00ff]"\nOld String: "[/color][/b][b][color=RED])[/color][/b] new [b][color=RED]([/color][/b][b][color=BLUE]getstring[/color][/b] [b][color=BLUE]t[/color][/b] [b][color=#ff00ff]"\nNew String: "[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]rstring old new[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] Quote Link to comment Share on other sites More sharing options...
AQucsaiJr Posted August 14, 2009 Author Share Posted August 14, 2009 Ah Ha.... I misunderstood what you were saying. I guess I was trying to use it like the other LISP. I got it now. Thanks for the detailed explanation. Sorry for the confusion. Quote Link to comment Share on other sites More sharing options...
AQucsaiJr Posted August 14, 2009 Author Share Posted August 14, 2009 You continue amaze me Lee. This works perfect. I apologize for my ignorance. I have read back through this thread to see were I lost you and it seems I overlooked a post. I was able to figure it out from your test example at the end of the LISP, I was just blind to it in the beginning. Thank you for such quick responses to all my questions. Cheers:) Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted August 14, 2009 Share Posted August 14, 2009 Not a problem - as I say, that article on AfraLISP should answer everything you need to know about sub-function/main functions etc. Lee Quote Link to comment Share on other sites More sharing options...
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.