Jump to content

Recommended Posts

Posted

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?

Posted
(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)
)

Posted

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?

Posted

the 5X-123 is in either a single line of text or MText, but ya it is the only text within text objects.

Posted

Here is an example. I would like to be able to change only the 5X-123 string.

EXAMPLE.dwg

Posted

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]

Posted

I load this lsp and try and call it up, rstring, and I get unknown command. Any ideas?

Posted

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.

Posted

I don't get it. Do I have to select something? or type something in before rstring?

Posted

I even included a test function in my post - to show you how to use it :)

Posted

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.

Posted

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.

Posted

I see... Let me give that a try.

Posted

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

Posted

Here's with prompts just to clear the confusion :glare:

 

[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]

Posted

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.

Posted

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:)

Posted

Not a problem - as I say, that article on AfraLISP should answer everything you need to know about sub-function/main functions etc.

 

Lee

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...