Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  retext - ssget

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  retext - ssget (910 mal gelesen)
THE_ONE
Mitglied
Student, Alter:23


Sehen Sie sich das Profil von THE_ONE an!   Senden Sie eine Private Message an THE_ONE  Schreiben Sie einen Gästebucheintrag für THE_ONE

Beiträge: 299
Registriert: 27.04.2005

AMD XP 2000, 512MB-RAM, WIN XP Pro
Readon 9600Pro
VIZ 2005, Autocad 2007,(Mechanical)

erstellt am: 18. Jul. 2008 10:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo!

Ich hab mir das Programm ReText (Lisp) von der Seite von mapcar geladen, das auch wunderbar funktioniert.
Das Lisp durchsucht die ganze Datei nach einen SUCHSTRING, wird dieser gefunden ersetzt diese Tool dann diesen SUCHSTRING durch den zu ersetzenden String. Das ganze n mal, also so oft wie diese Tool den String in dieser Datei findet.

Ich wollte nun diese Lispdatei so modifizieren das es nicht die ganze Datei durchsucht sondern lediglich alle Objekt die ich mit einem Fenster auswähle.

Hier mal ein Auszug des original Programms:

Code:

(defun ReTextg (fin repl / ss l n e as op x)
  (setq ss (ssget "X" (list ( cons -4 "<AND")(cons -4 "<OR")(cons 0 "TEXT")(cons 0 "MTEXT")(cons 0 "DIMENSION")(cons 0 "ATTRIB")(cons 0 "ATTDEF")(cons -4 "OR>")(cons 1 (strcat "*" fin "*"))(cons -4 "AND>"))))
  (if ss
    (progn
      (setq l 0)
      (setq n (sslength ss))
      (while (< l n)
(setq e (entget (ssname ss l)))
(setq as (assoc 1 e))
(setq op (cdr (assoc 1 e)))
(setq x (STD-STRCHG op fin repl))
(setq e (subst (cons 1 x) as e))
(entmod e)
(setq l (1+ l))
      ) ; while
      (princ (strcat "\n" (itoa (sslength ss)) " text strings modified."))
    ) ; progn
    (alert (strcat "Text " fin " not found"))
  ) ; if
  (princ)
)

Habe daher das X , bei ssget, durch W ersetzt. Funktioniert aber nicht da man wenn man W verwendet auch zwei Punkte angeben muss, also fix im Code (laut der Hilfe). Irgendwie blick ich bei ssget nicht durch und wäre daher für jede Hilfe dankbar.

Lg THE_ONE
ps:Wurde eigentlich schon mal nachgedacht über LISP Tags (Syntax highlighting ) hier im Forum? Würde die Lesbarkeit um vieles verbessern.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


Sehen Sie sich das Profil von Dorfy an!   Senden Sie eine Private Message an Dorfy  Schreiben Sie einen Gästebucheintrag für Dorfy

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 18. Jul. 2008 10:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für THE_ONE 10 Unities + Antwort hilfreich

Hallo,
schon mal ssget ohne "Zusatz" verwendet
oder für die Punkte eine Abfrage mittel getpoint?!
mfg heiko

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

THE_ONE
Mitglied
Student, Alter:23


Sehen Sie sich das Profil von THE_ONE an!   Senden Sie eine Private Message an THE_ONE  Schreiben Sie einen Gästebucheintrag für THE_ONE

Beiträge: 299
Registriert: 27.04.2005

AMD XP 2000, 512MB-RAM, WIN XP Pro
Readon 9600Pro
VIZ 2005, Autocad 2007,(Mechanical)

erstellt am: 18. Jul. 2008 10:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

  
Zitat:
Original erstellt von Dorfy:
Hallo,
schon mal ssget ohne "Zusatz" verwendet


Hallo und danke erstmal für dein Hilfe!

Genau das wäre die Lösung, aber dann kann ich die Filterliste nicht verwenden (ich brauche ja nur die Objekte die Text enthalten), obwohl genau wissen was die einzelnen Elemente in der Liste bedeuten tue ich sowieso nicht (für was gehören die ersten zwei und die letzen 3 Elemente in der Liste???). Ich will halt nur das das ganze funktioniert am Schluss und will daher nicht soviel verändern, ist ja nicht von mir das Lisp.

[Diese Nachricht wurde von THE_ONE am 18. Jul. 2008 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


Sehen Sie sich das Profil von Dorfy an!   Senden Sie eine Private Message an Dorfy  Schreiben Sie einen Gästebucheintrag für Dorfy

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 18. Jul. 2008 11:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für THE_ONE 10 Unities + Antwort hilfreich

...
na so?

(setq ss (ssget (list ( cons -4 "<AND")(cons ... ???

Edit
zum testen fehlt die STD-STRCHG

[Diese Nachricht wurde von Dorfy am 18. Jul. 2008 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

THE_ONE
Mitglied
Student, Alter:23


Sehen Sie sich das Profil von THE_ONE an!   Senden Sie eine Private Message an THE_ONE  Schreiben Sie einen Gästebucheintrag für THE_ONE

Beiträge: 299
Registriert: 27.04.2005

AMD XP 2000, 512MB-RAM, WIN XP Pro
Readon 9600Pro
VIZ 2005, Autocad 2007,(Mechanical)

erstellt am: 18. Jul. 2008 11:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi!

Hier mal der ganze (originale) Code!

Code:
;;;---------------------------------------------------------------
;;; ReText.lsp - Ändert gesuchten Teststring global.
;;; So geht's: (ReText "35" "42") ändert alle Vorkommen von "35"
;;; in "42". Auch wenn der gesuchte String in einem anderen steckt.
;;; ReText bearbeitet Text, MText, Attribute und Attributsdefinitionen
;;;
;;; Einschränkung: Durchsucht keine Blöcke.
;;;
;;;
;;; Teile des Programms stammen aus Reini Urbans STDLIB
;;;
;;; 1.0
;;; Juli, 2002
;;;
;;; CADchup@cad.de
;;;---------------------------------------------------------------
;;
;;
(defun ReText (fin repl / ss l n e as op x)
  (setq ss (ssget "X" (list ( cons -4 "<AND")(cons -4 "<OR")(cons 0 "TEXT")(cons 0 "MTEXT")(cons 0 "DIMENSION")(cons 0 "ATTRIB")(cons 0 "ATTDEF")(cons -4 "OR>")(cons 1 (strcat "*" fin "*"))(cons -4 "AND>"))))
  (if ss
    (progn
      (setq l 0)
      (setq n (sslength ss))
      (while (< l n)
(setq e (entget (ssname ss l)))
(setq as (assoc 1 e))
(setq op (cdr (assoc 1 e)))
(setq x (STD-STRCHG op fin repl))
(setq e (subst (cons 1 x) as e))
(entmod e)
(setq l (1+ l))
      ) ; while
      (princ (strcat "\n" (itoa (sslength ss)) " text strings modified."))
    ) ; progn
    (alert (strcat "Text " fin " not found"))
  ) ; if
  (princ)
)
;;;
;;; The following code is taken from Reini Urbans STDLIB.
;;;
;;;
;;; $Id: STDSTR.LSP 0.5004 2000/09/20 12:48:22 rurban Exp $-*-AutoLISP-*-
;;; Time-stamp: <2000-10-03 00:56:55 rurban>
;;; Copyright (c) 1998,99,2000 by Reini Urban
;;; Available for free at http://xarch.tu-graz.ac.at/autocad/stdlib/
;;;
;;; Permission to use, copy, modify and distribute this software and its
;;; documentation for any purpose is hereby granted without fee, provided
;;; 1) that the above copyright notice appear in all copies,
;;; 2) that the copyright notice, this permission notice and the pointer
;;;    where to download the source code for free appear in the
;;;    supporting documentation of source code distributions,
;;; 3) that the name of Reini Urban not be used in advertising or
;;;    publicity pertaining to distribution of the software and
;;; 4) that modifications without changing the defined function and
;;;    symbol names may not be published, distributed nor copied
;;; without specific, written prior permission.
;;;
;;; No Warranty
;;; Reini Urban makes no representations about the suitability of this
;;; software for any purpose, without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. It is provided
;;; "as is" without express or implied warranty.
;;; See the full Disclaimer for all detailed warranty exclusions.
;;; --------------------------------------------------------------------
;;; String function for the STDLIB
(defun STD-STRCHG (s old new / i ls lold)
  (if (= old "")
    (strcat new s)
    (progn
      (setq lold (strlen old)     ; length of substr to search
        ls (1+ (- (strlen s) lold)) ; max. position to search to
        i 1)
      (while (<= i ls)
        (if (= (substr s i lold) old)  ; found
          (setq s (strcat (if (> i 1)  (substr s 1 (1- i)) "")
                  new
  (if (<= i ls) (substr s (+ i lold)) ""))
        i (+ i (strlen new)))  ; next position to search
          (setq i (1+ i))
        )
      )
      s
)))
;;;
;;;
;;;
(princ "\nReText loaded.")
(princ "\nUsage: (ReText findstring replacestring). See file headers for details.")
(princ)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


Sehen Sie sich das Profil von Dorfy an!   Senden Sie eine Private Message an Dorfy  Schreiben Sie einen Gästebucheintrag für Dorfy

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 18. Jul. 2008 11:30    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für THE_ONE 10 Unities + Antwort hilfreich

ja, wie bereits geschrieben, halt ohne "X"
???
mfg heiko

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz