Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Index automatisieren / Attribut (0 . ATTDEF) in Block (0 . INSERT) Filtern nach Wert

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:  Index automatisieren / Attribut (0 . ATTDEF) in Block (0 . INSERT) Filtern nach Wert (1273 mal gelesen)
Manuel486
Mitglied
Technischer Zeichner Elektro


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

Beiträge: 194
Registriert: 31.01.2020

erstellt am: 02. Jul. 2021 14:46    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


TGE-3-0-GR-E00-000--.dwg

 
Hallo  
Mir fehlt das letzte Puzzlestück zum automatischen Indizieren unserer Dateien.
Ich hatte ja hier:
http://ww3.cad.de/foren/ubb/Forum145/HTML/004803.shtml
und hier:
http://ww3.cad.de/foren/ubb/Forum145/HTML/003459.shtml
schon Fragen gestellt und bin, auf Grund eurer tollen Hilfe, jetzt fast am Ziel.  

Im Planstempel (siehe Anhang) gibt es ein Attribut (0 . "ATTDEF") mit der Bezeichnung (2 . "IND-1") und dem Inhalt (1 . "-").
Die Vorgabeeinstellung ist "-", was im Prinzip Index Planerstellung entspricht.

(if (ssget "_X" (list '(0 . "ATTDEF")'(2 . "IND-1")'(1 . "-")(cons 410 (getvar 'CTAB))))
(command "_.SCRIPTCALL" "G:/1000SONS/CAD/Faust/LISP/Planstempel-anpassen/KD-Stempel-Index/KD-Stempel-Index-A.scr"))

Das wäre meine suche gewesen..
ich habe auch schon festgestellt, dass es so nicht geht, auf Grund von verschachtelten Elementen.
Habe auch schon viel gesucht, aber meistens andere Lisp-Dateien gefunden die Attributwerte filtern.

Ich hätte es gerne so:
Wenn IND-1 = - und Blockname KD-Stempel-2010_A2-A0
dann _.SCRIPTCALL "KD-Stempel-Index-A.scr"
Wenn IND-1 = A und Blockname KD-Stempel-2010_A2-A0
dann _.SCRIPTCALL "KD-Stempel-Index-B.scr"
Wenn IND-1 = B und Blockname KD-Stempel-2010_A2-A0
dann _.SCRIPTCALL "KD-Stempel-Index-C.scr"
usw.

Der Rest ist alles fertig und funktioniert Einwandfrei.


"KD-Stempel-Index-A.scr"

Code:
(LOAD "G:/1000SONS/CAD/Faust/LISP/Planstempel-anpassen/KD-Stempel-Index/KD-Stempel-ATT-TAG-IND-1-Index-A.lsp")
(LOAD "G:/1000SONS/CAD/Faust/LISP/srxtext/SRXTEXT.VLX")
(setq _SRXTEXTNOZOOM 1)
SRXTEXT2
R
([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)
$1A
All
All
Y
(LOAD "G:/1000SONS/CAD/Faust/LISP/RRename/V1-3/RRename.VLX")
RRENAME
Layouts
([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)
$1A
_saveas
2018
(strcat (getvar 'DWGPREFIX) (substr (getvar 'dwgname) 1 (- (strlen (getvar 'dwgname)) 5)) "A")

"KD-Stempel-ATT-TAG-IND-1-Index-A"

Code:
(defun UPDATE-Title-Block ( INSERTNAME ATTRIBNAME  ATTRIBWERT / AUSWAHL INDEX OBJEKTDATEN)
  (if (= (type INSERTNAME) 'STR)
    (setq AUSWAHL (ssget "_x" (list '(0 . "INSERT")(cons 2 INSERTNAME))))
  )
  (if(or AUSWAHL
        (setq AUSWAHL (ssget "_x" '((0 . "INSERT"))))
    )
    (progn
      (setq INDEX -1)    
      (repeat (sslength AUSWAHL)
        (setq OBJEKTDATEN (entget (ssname AUSWAHL (setq INDEX (1+ INDEX)))))
        (if (assoc 66 OBJEKTDATEN)                  
          (while (/= (cdr (assoc 0 OBJEKTDATEN)) "SEQEND")
            (setq OBJEKTDATEN (entget (entnext (cdr (assoc -1 OBJEKTDATEN)))))
            (if (and(=(cdr (assoc 0 OBJEKTDATEN)) "ATTRIB")                      
                    (=(strcase (cdr(assoc 2 OBJEKTDATEN))) ATTRIBNAME)
                )
              (progn              
                (entmod(subst(cons 1 ATTRIBWERT)
                            (assoc 1 OBJEKTDATEN)
                            OBJEKTDATEN
                      )
                )
              )
            )
          )          
        )
      )              
    )
  )
)
(defun c:UPDATE-Title-Block ()
  (UPDATE-Title-Block "*KD-STEMPEL*" "PLANNR-INDEX"  "A")
  (UPDATE-Title-Block "*KD-STEMPEL*" "IND-1"  "A")
  (UPDATE-Title-Block "*KD-STEMPEL*" "DAT-IND-1"  "--.--.--")
  (UPDATE-Title-Block "*KD-STEMPEL*" "NAME-IND-1"  "--. / --.")
  (UPDATE-Title-Block "*KD-STEMPEL*" "ÄNDERUNG-IND-1"  "Anpassungen und Ergänzungen")
  (command "_.regenall")
)
(C:UPDATE-Title-Block)

von Index B auf C kommt noch dieses Script dazu:
KD-Stempel-ATT-TAG_IND-2_to_IND-1.scr

Code:
(LOAD "G:/1000SONS/CAD/Faust/LISP/Planstempel-anpassen/KD-Stempel-Index/KD-Stempel-COPY-ATT.lsp")
KD-Stempel-COPY-ATT
*KD-Stempel*
IND-2
IND-1
KD-Stempel-COPY-ATT
*KD-Stempel*
DAT-IND-2
DAT-IND-1
KD-Stempel-COPY-ATT
*KD-Stempel*
NAME-IND-2
NAME-IND-1
KD-Stempel-COPY-ATT
*KD-Stempel*
ÄNDERUNG-IND-2
ÄNDERUNG-IND-1

Ich weiß, manch einer von euch wird jetzt die Hände über dem Kopf zusammen schlagen.
Es geht bestimmt einfacher und eleganter, dass hier ist eher getreu dem Motto.
"Der Weg ist das Ziel"  

Vielleicht hat ja einer von euch einen Codeschnipsel parat,
den ich mir dann selbst noch etwas anpassen kann.

Schönes WE allerseits. 

VG
Manuel

[Diese Nachricht wurde von Manuel486 am 05. Jul. 2021 editiert.]

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

archtools
Mitglied



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

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 03. Jul. 2021 10:16    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 Manuel486 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Manuel486:
Ich hätte es gerne so:
Wenn IND-1 = - und Stempel KD-Stempel-2010_A2-A0
dann _.SCRIPTCALL "KD-Stempel-Index-A.scr"
Wenn IND-1 = A
dann _.SCRIPTCALL "KD-Stempel-Index-B.scr"
Wenn IND-1 = B
dann _.SCRIPTCALL "KD-Stempel-Index-C.scr"
usw.

1. Das übliche: Sieh' Dir die Lisp Funktion COND an.

2. das Elegante: Sieh' Dir OR an

Also:
(OR
  (AND  (= IND-1 "-")
        (= STEMPEL "KD-Stempel-2010_A2-A0")
        (setq SCRIPTNAME "KD-Stempel-Index-A.scr")
  )
  ;;
  (AND  (= IND-1 "A")
        (setq SCRIPTNAME "KD-Stempel-Index-B.scr")
  )
  ;;
  usw
)
;;
(if SCRIPTNAME (command "_.SCRIPTCALL" SCRIPTNAME))

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

Andreas Kraus
Mitglied
Elektrotechniker


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

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 04. Jul. 2021 18:20    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 Manuel486 10 Unities + Antwort hilfreich

Und noch etwas für die Eleganz 

Wenn du dir die Attributnamen wie "IND-1" mit strcat aus "IND-" und (itoa Zahl) zusammenbaust brauchst du wahrscheinlich weniger Scripte weil du den Eintrag (also die Zeile in der Indextabelle) mit dieser Zahl steuern kannst.

Wenn die Zahl direkt dem Index entspricht kannst du die sogar aus einer festen Liste holen.

(1+ (vl-position "B" '("A" "B" "C"))) = 2

Irgendwie so ...
Viel Spaß noch 

------------------
Geht nicht, gibts nicht

Gruß
Andreas

http://kraus-cad.de

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

Manuel486
Mitglied
Technischer Zeichner Elektro


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

Beiträge: 194
Registriert: 31.01.2020

erstellt am: 05. Jul. 2021 12:04    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

Ich verstehe den Aufbau der Funktion.
Ich weis aber nicht was ich angeben muss um kein Nil zu bekommen.

Befehl: (= IND-1 "-")
nil
Befehl: (= STEMPEL "KD-Stempel-2010_A2-A0")
nil

Wie gebe ich den Attributwert bzw. den Blocknamen in Lisp an?

(setq IND-1 (Funktion zum Auswerten von IND-1))
(setq STEMPEL (Funktion zum Auswerten von Blockname))
Sowas in der Art müsste an den Anfang der Lisp oder?

Ich steh komplett auf dem Schlauch wie ich da anfange.
Habe auch schon paar Lisp Tutorials durch.


[Diese Nachricht wurde von Manuel486 am 05. Jul. 2021 editiert.]

[Diese Nachricht wurde von Manuel486 am 05. Jul. 2021 editiert.]

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

Manuel486
Mitglied
Technischer Zeichner Elektro


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

Beiträge: 194
Registriert: 31.01.2020

Windows 10 Pro - 64-Bit -
Lenovo Thinkstation P520 -
Intel Xeon W-2255 CPU @ 3.70 GHz 10 Kerne -
3x32GB DDR4 RAM @ 2933 MHz -
WD Blue SN570 SSD 1000GB -
Samsung MZVLB512HAJQ-000L7 SSD 500GB -
NVIDIA Quadro P2200 5GB -
Elgato Stream Deck 15 Tasten -
AutoCAD MEP 2019 -
Revit 2018+2019+2020+2021+2022

erstellt am: 06. Jul. 2021 08:28    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

Code:
;; Get Attribute Value  -  Lee Mac
;; Returns the value held by the specified tag within the supplied block, if present.
;; blk - [vla] VLA Block Reference Object
;; tag - [str] Attribute TagString
;; Returns: [str] Attribute value, else nil if tag is not found.

(defun LM:vl-getattributevalue ( blk tag )
    (setq tag (strcase tag))
    (vl-some '(lambda ( att ) (if (= tag (strcase (vla-get-tagstring att))) (vla-get-textstring att))) (vlax-invoke blk 'getattributes))
)


Habe hier was von Lee Mac, für den Attributwert.

Eigentlich muss ich hier doch "nur" die Fett geschriebenen Sachen tauschen.
Also für den tag = IND-1 und blk = KD-Stempel-2010_A2-A0 oder?

Ergebnis:
Zu wenig Argumente

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

Andreas Kraus
Mitglied
Elektrotechniker


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

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 06. Jul. 2021 13: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 Manuel486 10 Unities + Antwort hilfreich

Nö !
Schau mal genau hin.
Da steht als Kommentar:
Zitat:
;; blk - [vla] VLA Block Reference Object

Das bedeutet dass du hier nicht einfach einen Blocknamen als Zeichenkette brauchst, sondern eine bestimmte Blockeinfügung als VLA-Object.

Mit (car (entsel)) bekommst du ja den Elementnamen von dem was du angeklickt hast.
mit (vlax-ename->vla-object (car (entsel))) bekommst du den Objectnamen (also das was du brauchst)

Du kannst schon deshalb nicht einfach den Blocknamen nehmen weil damit ja gar nicht klar ist welche Einfügung du meinst.
Wenn du was mit der Blockdefinition machen willst kommst du mit dem Blocknamen weiter, dann allerdings mit anderen Funktionen.
Aber das brauchst du ja nicht

Du brauchst das hier:
(LM:vl-getattributevalue (vlax-ename->vla-object (car (entsel))) "IND-1")

Und wenn du den Block nicht anklicken willst brauchst du da eben was mit ssget und einer Schleife zum Bearbeiten vom Auswahlsatz.

------------------
Geht nicht, gibts nicht

Gruß
Andreas

http://kraus-cad.de

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

Manuel486
Mitglied
Technischer Zeichner Elektro


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

Beiträge: 194
Registriert: 31.01.2020

erstellt am: 07. Jul. 2021 17:10    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

Mit den Attributen im Block macht mich fertig.
Da brauche ich zu viel Kenntnisse, die ich (noch)    nicht habe.

Das hier müsste zumindest die ssget Funtion sein die ich brauche?!

Code:
(ssget "_X" '((0 . "INSERT")(2 . "KD-Stempel-2010_A2-A0")(66 . 1)))


Ich habe es jetzt über den Dateinamen versucht.
Hier der Code aus dem Script:

Code:
(setq DWGNAME (getvar 'dwgname))
(wcmatch DWGNAME "*--.dwg")
(if T (command "_.SCRIPTCALL" "G:/1000SONS/CAD/Faust/LISP/Planstempel-anpassen/KD-Stempel-Index/KD-Stempel-Index-A.scr"))
(setq DWGNAME (getvar 'dwgname))
(wcmatch DWGNAME "*-A.dwg")
(if T (command "_.SCRIPTCALL" "G:/1000SONS/CAD/Faust/LISP/Planstempel-anpassen/KD-Stempel-Index/KD-Stempel-Index-B.scr"))

Funktioniert auch  
Jetzt läuft der Befehl aber einfach durch.
Wenn ich jetzt z.B. Index "--" habe, macht er "-A" und auch direkt "-B".
Wie sage ich "Stopp nach der ersten Ausführung"?
Bzw wie könnte ich es cleverer aufbauen.

Habe es jetzt so:

Code:
(setq DWGNAME (getvar 'dwgname))
(setq INDEX-- (wcmatch DWGNAME "*--.dwg"))
(setq INDEX-A (wcmatch DWGNAME "*-A.dwg"))
(setq INDEX-B (wcmatch DWGNAME "*-B.dwg"))
(if INDEX-- (command "_.SCRIPTCALL" "G:/1000SONS/CAD/Faust/LISP/Planstempel-anpassen/KD-Stempel-Index/KD-Stempel-Index-A.scr"))
(if INDEX-A (command "_.SCRIPTCALL" "G:/1000SONS/CAD/Faust/LISP/Planstempel-anpassen/KD-Stempel-Index/KD-Stempel-Index-B.scr"))
(if INDEX-B (command "_.SCRIPTCALL" "G:/1000SONS/CAD/Faust/LISP/Planstempel-anpassen/KD-Stempel-Index/KD-Stempel-Index-C.scr"))

Geht, aber geht bestimmt besser, oder?

VG
Manuel

[Diese Nachricht wurde von Manuel486 am 07. Jul. 2021 editiert.]

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

Andreas Kraus
Mitglied
Elektrotechniker


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

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 08. Jul. 2021 07:43    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 Manuel486 10 Unities + Antwort hilfreich

archtools hat doch schon cond erwähnt.

Code:
(setq DWGNAME (getvar 'dwgname))
(cond
  ((wcmatch DWGNAME "*--.dwg")
  (command
    "_.SCRIPTCALL"
    "G:/1000SONS/CAD/Faust/LISP/Planstempel-anpassen/KD-Stempel-Index/KD-Stempel-Index-A.scr"
  )
  )
  ((wcmatch DWGNAME "*-A.dwg")
  (command
    "_.SCRIPTCALL"
    "G:/1000SONS/CAD/Faust/LISP/Planstempel-anpassen/KD-Stempel-Index/KD-Stempel-Index-B.scr"
  )
  )
  ((wcmatch DWGNAME "*-B.dwg")
  (command
    "_.SCRIPTCALL"
    "G:/1000SONS/CAD/Faust/LISP/Planstempel-anpassen/KD-Stempel-Index/KD-Stempel-Index-C.scr"
  )
  )
)

------------------
Geht nicht, gibts nicht

Gruß
Andreas

http://kraus-cad.de

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

Manuel486
Mitglied
Technischer Zeichner Elektro


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

Beiträge: 194
Registriert: 31.01.2020

erstellt am: 08. Jul. 2021 10:34    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

Bekäme ich es hin aus dem Script "KD-Stempel-Index-A.scr"
diesen Ablauf:
Code:
SRXTEXT2
R
([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)
$1A
All
All
Y
in einem Lisp zum laufen zu bekommen?
Egal wie ich es schreibe, es läuft nur in einem Script durch wenn ich einfach SRXTEXT2 schreibe.

Befehl: (SRXTEXT2)
Zu wenig Argumente

Befehl: ("SRXTEXT2")
Fehlerhafte Funktion: "SRXTEXT2"

Befehl: (command "SRXTEXT2")
Unbekannter Befehl "SRXTEXT2". Drücken Sie F1-Taste für Hilfe.
nil

Oder geht das schlichtweg nicht?

Ich sehe gerade hier
https://www.cadstudio.cz/en/apps/srxtext/

Ich müsste es so schreiben.

Code:
(LOAD "G:/1000SONS/CAD/Faust/LISP/srxtext/SRXTEXT.VLX")
(SRXTEXT2 "R" "([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)" "$1A" "All")

Dann findet er nichts, obwohl der zu ersetzende Text in der Zeichnung ist.  

Befehl: (LOAD "G:/1000SONS/CAD/Faust/LISP/Planstempel-anpassen/KD-Stempel-Index/neu-Get-Value.lsp")
Express Tools may be required for Regular Expressions in old SRXTEXT

SRXTEXT2+SRXTEXTCSV+SRXMISSING commands loaded. (C)2020, www.cadstudio.cz
___________ CAD, BIM, GIS/FM custom application development _____________ 0


[Diese Nachricht wurde von Manuel486 am 08. Jul. 2021 editiert.]

[Diese Nachricht wurde von Manuel486 am 08. Jul. 2021 editiert.]

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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 10. Jul. 2021 08:51    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 Manuel486 10 Unities + Antwort hilfreich

Hallo Manuell,
probier es mal mit "Substring" anstatt "R", so hat es bei mir funktioniert.

(srxTEXT "Substring" "noch so" "dann so" "All")

------------------
viele Grüße

Jörn
http://www.bosse-engineering.com

Bosse_tools-Überblick

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

Manuel486
Mitglied
Technischer Zeichner Elektro


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

Beiträge: 194
Registriert: 31.01.2020

erstellt am: 12. Jul. 2021 12:16    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,
ich suche nicht nach einem "Substring", Kürzel S.
Ich Suche nach "Regular expression", deswegen auch Kürzel R,
Habe es jetzt ausgeschrieben, aber findet auch 0.

Code:
(LOAD "G:/1000SONS/CAD/Faust/LISP/srxtext/SRXTEXT.VLX")
(SRXTEXT2 "Regular expression" "([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)" "$1A" "All")

EDIT
So muss es geschrieben werden.  
Code:
(LOAD "G:/1000SONS/CAD/Faust/LISP/srxtext/SRXTEXT.VLX")
(SRXTEXT2 "Regular" "([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)" "$1A" "All")

VG
Manuel

[Diese Nachricht wurde von Manuel486 am 12. Jul. 2021 editiert.]

[Diese Nachricht wurde von Manuel486 am 12. Jul. 2021 editiert.]

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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 12. Jul. 2021 12:33    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 Manuel486 10 Unities + Antwort hilfreich

Hallo Manuel,
dann probier mal so:

(srxtext "Regular" (strcat(chr 92)(chr 92)) "|" "All")

Das hatte bei mir auch funktioniert.

------------------
viele Grüße

Jörn
http://www.bosse-engineering.com

Bosse_tools-Überblick

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

cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 12. Jul. 2021 12:38    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 Manuel486 10 Unities + Antwort hilfreich

Jörn,
das probiert er doch, da mußt du mal konkreter werden (Bezug auf das konkrete Beispiel/Datei)


EDIT

@Manuel
Dein regulärer Ausdruck muß gequotet werden oder in einen Lispausdruck gepackt werden (der den String dann aber nicht verändert).
(quote "MeinAusdruck")
dasselbe nur eleganter
'"MeinAusdruck"

hätte ebenso den unveränderten String als Rückgabe:
(strcat "MeinAusdruck")
(eval "MeinAusdruck")

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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 12. Jul. 2021 13:06    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 Manuel486 10 Unities + Antwort hilfreich

Hallo Sebastian,
ich dachte, es geht nur um das 1 Argument, was nicht akzeptiert wird?!?

Befehl: (srxtext "Regular expression" (strcat(chr 92)(chr 92)) "|" "All")
0
Befehl: (srxtext "Regular" (strcat(chr 92)(chr 92)) "|" "All")
1

Ich habe einfach mal einen Text mit Backslash's erstellt und dann den Code ausprobiert, das funktioniert, wenn "Regular" als Argument übergeben wird und nicht bei "Regular expression".

Bei inhaltlichen Sachen bin ich erstmal raus, weil ich da gar keine Ahnung von habe

------------------
viele Grüße

Jörn
http://www.bosse-engineering.com

Bosse_tools-Überblick

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

Manuel486
Mitglied
Technischer Zeichner Elektro


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

Beiträge: 194
Registriert: 31.01.2020

erstellt am: 12. Jul. 2021 13:13    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

Habe meinen Post editiert, jetzt geht es.
Stehe jetzt aber bei RRename vor einem ähnlichen Problem.
Code:
(LOAD "G:/1000SONS/CAD/Faust/LISP/RRename/V1-3/RRename.VLX")
(RRENAME "Layouts" "([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)" "$1A")

Ergebnis:
Befehl: (LOAD "G:/1000SONS/CAD/Faust/LISP/Planstempel-anpassen/KD-Stempel-Index/TEST-RRENAME-Schreibweise.lsp")
RRename command loaded. (C)2021, CAD Studio - www.cadstudio.cz
______ CAD, BIM, GIS/FM custom application development _______ no function definition: RRENAME

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

cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 12. Jul. 2021 13:31    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 Manuel486 10 Unities + Antwort hilfreich

Manuel486
Mitglied
Technischer Zeichner Elektro


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

Beiträge: 194
Registriert: 31.01.2020

erstellt am: 13. Jul. 2021 09:04    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

no function definition: RRENAME
Heißt doch schlicht, keine Lisp-Eingabe möglich, oder?

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

CAD-Huebner
Ehrenmitglied V.I.P. h.c.
Verm.- Ing., ATC-Trainer



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

Beiträge: 9732
Registriert: 01.12.2003

One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11

erstellt am: 13. Jul. 2021 09:18    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 Manuel486 10 Unities + Antwort hilfreich

Nö, dass heißt, das es keine von dir definierte Funktion namens RRENAME gibt bzw. diese zumindest nicht geladen ist.
Die Funktion aus RRENAME.VLX ist ja als Kommando definiert, die aufzurufende Funktion in Lisp sollte demnach wohl C:RRENAME lauten, da hat dann aber keine Parameter.

------------------
Mit freundlichem Gruß

Udo Hübner
www.CAD-Huebner.de

[Diese Nachricht wurde von CAD-Huebner am 13. Jul. 2021 editiert.]

[Diese Nachricht wurde von CAD-Huebner am 13. Jul. 2021 editiert.]

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

Manuel486
Mitglied
Technischer Zeichner Elektro


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

Beiträge: 194
Registriert: 31.01.2020

erstellt am: 13. Jul. 2021 10:10    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

Das ist echt bitter. 
Das wäre der letzte Befehl gewesen um alles in eine Lisp Datei zu bekommen,
ohne auf, in meinem Fall, 26 Script und 26 Lisp Dateien umzuspringen zu müssen.

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

CAD-Huebner
Ehrenmitglied V.I.P. h.c.
Verm.- Ing., ATC-Trainer



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

Beiträge: 9732
Registriert: 01.12.2003

One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11

erstellt am: 13. Jul. 2021 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 Manuel486 10 Unities + Antwort hilfreich

Ich hab jetzt nicht den ganzen Beitrag im Detail gelesen, aber
wenn das in Lisp definierte Kommando auf der Befehlzeile funktioniert, dann
versuche es mal ohne die () Klammern, wie einen normalen Befehl.
etwa so:
RRENAME "Layouts" "([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)" "$1A"

------------------
Mit freundlichem Gruß

Udo Hübner
www.CAD-Huebner.de

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

Manuel486
Mitglied
Technischer Zeichner Elektro


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

Beiträge: 194
Registriert: 31.01.2020

erstellt am: 14. Jul. 2021 08:36    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

Geht leider auch nicht.
Code:
(LOAD "G:/1000SONS/CAD/Faust/LISP/RRename/V1-3/RRename.VLX")
RRENAME "Layouts" "([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)" "$1A"

Ergebnis:
Befehl: (LOAD "G:/1000SONS/CAD/Faust/LISP/Planstempel-anpassen/KD-Stempel-Index/TEST-RRENAME-Schreibweise-Kopie.lsp")
RRename command loaded. (C)2021, CAD Studio - www.cadstudio.cz
______ CAD, BIM, GIS/FM custom application development _______ "$1A"

------------------
________

Gruß
Manuel

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

cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 14. Jul. 2021 09:40    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 Manuel486 10 Unities + Antwort hilfreich

Da es ja keine Lispfunktion RRENAME gibt redest du jetzt aber wieder von einem Script, oder?
Ich dachte eigentlich als Script hast du dein RRENAME bereits am Laufen gehabt 

Falls nicht: Der Suchausdruck erlaubt natürlich auch Leerzeichen, daher muß man hier ganz ordentlich
ein Enter senden um den Regulären Ausdruck zu beenden, also einen Zeilenumbruch.

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

Manuel486
Mitglied
Technischer Zeichner Elektro


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

Beiträge: 194
Registriert: 31.01.2020

erstellt am: 14. Jul. 2021 10:41    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

Das ist ja das Ding, wenn es keine Lisp-Funktion bei RRename gibt,
muss ich weiter mit meinen 26-Script und 26-Lisp arbeiten.

Im Script habe ich die Befehle ja zum laufen gebracht.
Ich wollte, in meinem Haupt-Lisp (KD-Stempel Index erhöhen.lsp) das hier umgehen.

Code:
(cond
  ((wcmatch KD-DWGNAME "*--.dwg")
  (command
    "_.SCRIPTCALL"
    "G:/1000SONS/CAD/Faust/SCRIPT/SCRIPTCALL/KD-Stempel-Index-A.scr"
  )
  )
  ((wcmatch KD-DWGNAME "*-A.dwg")
  (command
    "_.SCRIPTCALL"
    "G:/1000SONS/CAD/Faust/SCRIPT/SCRIPTCALL/KD-Stempel-Index-B.scr"

Ich wollte den Scriptcall raus bekommen, ich habe bis Index Z geschrieben, also 26-SCR/LSP-Dateien.
Das wäre mein Lisp (KD-Stempel-Index-A.lsp), was dann den Scriptcall ersetzten würde, was auch bis auf RRENAME Funktioniert...
Es hängt quasi alles an diesem Befehl  

Code:
(defun UPDATE-Title-Block ( INSERTNAME ATTRIBNAME  ATTRIBWERT / AUSWAHL INDEX OBJEKTDATEN)
  (if (= (type INSERTNAME) 'STR)
    (setq AUSWAHL (ssget "_x" (list '(0 . "INSERT")(cons 2 INSERTNAME))))
  )
  (if(or AUSWAHL
        (setq AUSWAHL (ssget "_x" '((0 . "INSERT"))))
    )
    (progn
      (setq INDEX -1)    
      (repeat (sslength AUSWAHL)
        (setq OBJEKTDATEN (entget (ssname AUSWAHL (setq INDEX (1+ INDEX)))))
        (if (assoc 66 OBJEKTDATEN)                  
          (while (/= (cdr (assoc 0 OBJEKTDATEN)) "SEQEND")
            (setq OBJEKTDATEN (entget (entnext (cdr (assoc -1 OBJEKTDATEN)))))
            (if (and(=(cdr (assoc 0 OBJEKTDATEN)) "ATTRIB")                      
                    (=(strcase (cdr(assoc 2 OBJEKTDATEN))) ATTRIBNAME)
                )
              (progn              
                (entmod(subst(cons 1 ATTRIBWERT)
                            (assoc 1 OBJEKTDATEN)
                            OBJEKTDATEN
                      )
                )
              )
            )
          )          
        )
      )              
    )
  )
)
(defun c:UPDATE-Title-Block ()
  (UPDATE-Title-Block "*KD-STEMPEL*" "PLANNR-INDEX"  "A")
  (UPDATE-Title-Block "*KD-STEMPEL*" "IND-1"  "A")
  (UPDATE-Title-Block "*KD-STEMPEL*" "DAT-IND-1"  "--.--.--")
  (UPDATE-Title-Block "*KD-STEMPEL*" "NAME-IND-1"  "--. / --.")
  (UPDATE-Title-Block "*KD-STEMPEL*" "ÄNDERUNG-IND-1"  "Anpassungen und Ergänzungen")
  (command "_.regenall")
)
(C:UPDATE-Title-Block)
(LOAD "G:/1000SONS/CAD/Faust/LISP/srxtext/SRXTEXT.VLX")
(setq _SRXTEXTNOZOOM 1)
(SRXTEXT2 "Regular" "([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)" "$1A" "All")
(LOAD "G:/1000SONS/CAD/Faust/LISP/RRename/V1-3/RRename.VLX")
(RRENAME "Layouts" "([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)" "$1A")
(setvar "cmdecho" 0)
(setvar "filedia" 0)
(command "_.SAVEAS" "2018" (strcat (getvar 'DWGPREFIX) (substr (getvar 'dwgname) 1 (- (strlen (getvar 'dwgname)) 5)) "A"))
(setvar "filedia" 1)
(setvar "cmdecho" 1)


Wäre echt doof, mit 55 .scr/.lsp, habe gerade nochmal gezählt, Dateien Arbeiten zu müssen.

------------------

Gruß
Manuel

[Diese Nachricht wurde von Manuel486 am 14. Jul. 2021 editiert.]

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

cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 14. Jul. 2021 11:11    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 Manuel486 10 Unities + Antwort hilfreich

>>"Im Script habe ich die Befehle ja zum laufen gebracht."
Das hatte Udo sicher beim überfliegen nicht richtig gesehen, daher sein Post - der nicht für die Verwendung in einer Lispdatei gedacht war.


Es gibt da immernoch mehrere (andere) Möglichkeiten für dich (Der Fokus ist ab und an eine Scheuklappe die das Sehen behindert   )
und auch wenn ich dir nichts zu Füßen legen möchte wie andere Tools, Hilfe zur Selbsthilfe immer wieder gern:

>>"muss ich weiter mit meinen 26-Script und 26-Lisp arbeiten."
Warum sagt mir mein Kopf: Da reicht auch EIN Script für RRENAME.. ein Script mit 26 RRENAME-Aufrufen 
Schau dir vielleicht noch einmal dein SUCH-Muster an, vielleicht wäre es sinnvoller nach einem
bestimmten Index zu suchen und diesen zu ersetzen, statt egal-welcher-Index mit "A" ( oder "B" usw. wie du es derzeit machst)

Aber wenn du jetzt nicht weiterkommst, dann ist es vielleicht nicht schlecht und endlich der (Zeit)Punkt
wieder bei Null anzufangen und sich mit (+ 1 2) zu beschäftigen - usw. Du weißt bescheid.

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

Manuel486
Mitglied
Technischer Zeichner Elektro


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

Beiträge: 194
Registriert: 31.01.2020

erstellt am: 15. Jul. 2021 08:26    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

>>"Schau dir vielleicht noch einmal dein SUCH-Muster an, vielleicht wäre es sinnvoller nach einem bestimmten Index zu suchen und diesen zu ersetzen"
Wenn man es so hört, dann fragt man sich, warum man es nicht gleich so gemacht hat.   

Code:
(DEFUN COPY-ATT (BLOCKNAME FROMatt TOatt / VALUE i l sset iBLK)
  (setq sset (ssget "x" (list (cons 2 BLOCKNAME))))
  (if (= sset nil)(setq l 0))
  (setq l (sslength sset))
  (setq i 0)
    (repeat l
      (setq iBLK (ssname sset i))
      (SETQ VALUE (GET-ATT FROMatt iBLK))
      (PUT-ATT iBLK TOatt VALUE)
      (setq i (1+ i))
    )
)
(DEFUN GET-ATT (tag blk / val enx)
  (WHILE
    (AND
      (NULL val)
      (= "ATTRIB" (CDR (ASSOC 0 (SETQ enx (ENTGET (SETQ blk (ENTNEXT blk)))))))
    )
     (IF (= (STRCASE tag) (STRCASE (CDR (ASSOC 2 enx))))
       (SETQ val (CDR (ASSOC 1 enx)))
     )
  )
)
(DEFUN PUT-ATT (blk tag val / end enx)
  (WHILE (AND (NULL end) (= "ATTRIB" (CDR (ASSOC 0 (SETQ enx (ENTGET (SETQ blk (ENTNEXT blk))))))))
    (IF (= (STRCASE tag) (STRCASE (CDR (ASSOC 2 enx))))
      (IF (ENTMOD (SUBST (CONS 1 val) (ASSOC 1 enx) enx))
(PROGN (ENTUPD blk) (SETQ end val))
      )
    )
  )
)
(DEFUN C:KD-Stempel-COPY-ATT (/ BLOCKNAME FROMatt TOatt)
  (SETQ BLOCKNAME (GETSTRING "\n\t=> Block name? ")
FROMatt   (GETSTRING "\n\t=> FROM attribute tag? ")
TOatt   (GETSTRING "\n\t=> TO attribute tag? ")
  )
  (COPY-ATT BLOCKNAME FROMatt TOatt)
)
(C:KD-Stempel-COPY-ATT "*KD-Stempel*" "IND-2" "IND-1")

(DEFUN C:KD-Stempel-COPY-ATT ()
  (COPY-ATT "*KD-Stempel*" "IND-2" "IND-1")
  (COPY-ATT "*KD-Stempel*" "DAT-IND-2" "DAT-IND-1")
  (COPY-ATT "*KD-Stempel*" "NAME-IND-2" "NAME-IND-1")
  (COPY-ATT "*KD-Stempel*" "ÄNDERUNG-IND-2" "ÄNDERUNG-IND-1")
)
(C:KD-Stempel-COPY-ATT)

EDIT:
Habe es umgeschrieben.
Habe jetzt auch kapiert was mein Fehler war. 


Dann noch etwas.
Ich habe nach
((wcmatch KD-DWGNAME "*-B.dwg") .....

erst ein
(LOAD .....

und dann kommt ein Lisp
(defun UPDATE-Title-Block .....

Er bearbeitet aber zuerst das Lisp und setzt den Load an den Schluss   
Wie kann ich denn hier die Reihenfolge angeben,
bzw. wie kann ich mehrere Befehle in wcmatch zusammenfassen?

------------------

Gruß
Manuel

[Diese Nachricht wurde von Manuel486 am 15. Jul. 2021 editiert.]

[Diese Nachricht wurde von Manuel486 am 15. Jul. 2021 editiert.]

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

cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 15. Jul. 2021 09:47    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 Manuel486 10 Unities + Antwort hilfreich

>> [EDIT: Habe es umgeschrieben.]

SORRY, meine Antwort war schon im Entstehen - jetzt poste ich diese auch (hoffent auf..)
Passt also auf den Post vor deinem EDIT, aber nicht mehr zur aktuell editierten Version.

Ergebnis:
Zu viele Argumente
Es sind doch die 3 Argumente die abgefragt werden

1. Wenn man Argumente übergeben möchte, dann ist es nicht sinnvoll die Funnktion als AutoCAD-Befehlsaufruf zu definieren (Funktionsnamen die mit "c:" beginnen),
   denn als Befehl gestartet kann man ohnehin keine Argumente übergeben, also: "c:" im Namen weg (welches Aussagt das diese Funktion als AutoCAD-Befehl definiert werden soll).

2. Die Variablen wurden als lokale Variablen deklariert, die Funktion erwartet also genau KEINE Argumente.
   (die Variablennamen stehen rechts vom Backslash, als erwartete Argumente müßten diese am Anfang bzw. links vom Backslash stehen)

Aber macht es Sinn über soetwas wie Argumente und lokale Variablen zu reden? Aktuell denke ich: Nein


Die Antwort könnte auch so ausfallen:
C:KD-Stempel-COPY-ATT ist super als AutoCAD-Befehl, also Befehl starten und den Anweisungen folgen,
lediglich der Befehlsname ist Quatsch, denn der Befehl ist ja allgemeingültig
und hat nichts mit Dörflinger und den Planköpfen zutun.
Auch bei "C:COPYCAT3" sehe ich keinen Sinn, aber ok.

(C:KD-Stempel-COPY-ATT "*KD-Stempel*" "IND-2" "IND-1")
Kann nicht funktionieren da C:KD-Stempel-COPY-ATT keine Argumente erwartet, es sind nur lokale Variablen definiert.
Zudem macht die Funktion Null Sinn, denn genau dafür hast du ja bereits die Funktion COPY-ATT und die erwartet auch drei Argumente,
(COPY-ATT "*KD-Stempel*" "IND-2" "IND-1")

Dann noch etwas.
Ich habe nach
((wcmatch KD-DWGNAME "*-B.dwg") .....

erst ein
(LOAD .....
Das sagt nur das lesen eine Lispdatei(vlx,fas,lsp) aus, nicht aber was passiert. Da kommt es auf den Inhalt der Datei an.

und dann kommt ein Lisp
(defun UPDATE-Title-Block .....
"dann kommt ein Lisp" zeigt schon etwas Verwirrung auf. Es ist ein Lispausdruck der eine Lispfunktion definiert

Er bearbeitet aber zuerst das Lisp Alles in deiner Beschreibung ist "Lisp"
und setzt den Load an den Schluss
mit Sicherheit nicht, aber um darüber vernünftig zu reden bräuchte man halt alle Information
                     Sicher wird bei (load...) die Datei gelesen und gemacht was darin steht. Danach wird die Funktion UPDATE-Title-Block definiert
                     was sicher aber wenig sinnvoll anhört - zumindest wenn es noch in dem Zusammenhang mit "wcmatch" steht.
                     Aber auch hier: Man muß viel interpretieren, denn du legst nicht alle nötigen Fakten dar.

Wie kann ich denn hier die Reihenfolge angeben,
In Lisp wird von oben nach unten, innen nach außen, links nach rechts abgearbeitet
und so bestimmt man dann auch *irgendwelche* Reihenfolgen.
Warum du etwas anderes erwartest wie passiert, das lässt sich nur sagen wenn man den Code kennt und was du möchtest.
Der Code ist hier aber aktuell unbekannt

bzw. wie kann ich mehrere Befehle in wcmatch zusammenfassen?
mit wcmatch lässt sich weder ein Befehl ausführen noch mehrere zusammenfassen!? Ich nehme an hier fehlt wieder die Hälfte an Informationen..

Ich rate mal (denn ich werde jetzt nicht über dein Profil und Suchfunktionieren versuchen die vermissten Puzzlestücke zu suchen):
Du hast irgendwo eine IF-Anweisung, vielleicht auch 26 Stück, in dieser Art: (if (wcmatch "X" "U") 'machdasA)
Jetzt möchtest du, falls ein X einem U entspricht, mehrere Funktionen ausführen lassen?
Dann schau dir PROGN an [F1]
Wenn du diese wcmatch-Zeile 26x hast, dann könnte auch der Hinweis aus COND statt IF die bessere Lösung sein,
cond findet man natürlich ebenso in der Hilfe [F1]

  

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

Manuel486
Mitglied
Technischer Zeichner Elektro


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

Beiträge: 194
Registriert: 31.01.2020

erstellt am: 15. Jul. 2021 11:36    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

Das ist jetzt der fertige Code bis Index-C,
danach widerholt sich alles Index-D...E usw.

Code:
;;;KD-Stempel Index erhöhen.lsp
;;;Ver. 1.1
;;;Manuel Faust, 07/2021
;
;
;
;CMDECHO (Systemvariable), Deaktiviert die Protokollierung. /
;
(setvar "cmdecho" 0)
;
;
;
;Liest den DWG-Namen mit Dateiendung aus /
;
(setq KD-DWGNAME (getvar 'dwgname))
;
;
;
;Eine Liste von Bedingungen wird erstellt /
;
(cond
;
;-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------A
;
;Sucht nach der Dateiendung "*xx.dwg", wenn wahr, dann führe nachfolgende Eingaben aus /
;
((wcmatch KD-DWGNAME "*--.dwg")
;
;
;
;Index-A erstellen
;
(defun UPDATE-Title-Block ( INSERTNAME ATTRIBNAME  ATTRIBWERT / AUSWAHL INDEX OBJEKTDATEN)
  (if (= (type INSERTNAME) 'STR)
    (setq AUSWAHL (ssget "_x" (list '(0 . "INSERT")(cons 2 INSERTNAME))))
  )
  (if(or AUSWAHL
        (setq AUSWAHL (ssget "_x" '((0 . "INSERT"))))
    )
    (progn
      (setq INDEX -1)    
      (repeat (sslength AUSWAHL)
        (setq OBJEKTDATEN (entget (ssname AUSWAHL (setq INDEX (1+ INDEX)))))
        (if (assoc 66 OBJEKTDATEN)                  
          (while (/= (cdr (assoc 0 OBJEKTDATEN)) "SEQEND")
            (setq OBJEKTDATEN (entget (entnext (cdr (assoc -1 OBJEKTDATEN)))))
            (if (and(=(cdr (assoc 0 OBJEKTDATEN)) "ATTRIB")                      
                    (=(strcase (cdr(assoc 2 OBJEKTDATEN))) ATTRIBNAME)
                )
              (progn              
                (entmod(subst(cons 1 ATTRIBWERT)
                            (assoc 1 OBJEKTDATEN)
                            OBJEKTDATEN
                      )
                )
              )
            )
          )          
        )
      )              
    )
  )
)
(defun c:UPDATE-Title-Block ()
  (UPDATE-Title-Block "*KD-STEMPEL*" "PLANNR-INDEX"  "A")
  (UPDATE-Title-Block "*KD-STEMPEL*" "IND-1"  "A")
  (UPDATE-Title-Block "*KD-STEMPEL*" "DAT-IND-1"  "--.--.--")
  (UPDATE-Title-Block "*KD-STEMPEL*" "NAME-IND-1"  "--. / --.")
  (UPDATE-Title-Block "*KD-STEMPEL*" "ÄNDERUNG-IND-1"  "Anpassungen und Ergänzungen")
  (command "_.regenall")
)
(C:UPDATE-Title-Block)
;_________________________________________________________________________________________________________________________
;
(LOAD "G:/1000SONS/CAD/Faust/LISP/SRXTEXT.VLX")
(setq _SRXTEXTNOZOOM 1)
(SRXTEXT2 "Regular" "([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)" "$1A" "All")
(LOAD "G:/1000SONS/CAD/Faust/LISP/RRename.VLX")
(command "_.SCRIPTCALL" "G:/1000SONS/CAD/Faust/SCRIPT/SCRIPTCALL/KD-Stempel-Layout-Index-A-Z.scr")
(setvar "cmdecho" 0)
(setvar "filedia" 0)
(command "_.SAVEAS" "2018" (strcat (getvar 'DWGPREFIX) (substr (getvar 'dwgname) 1 (- (strlen (getvar 'dwgname)) 5)) "A"))
(setvar "filedia" 1)
(setvar "cmdecho" 1)
)
;
;-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------B
;
;Sucht nach der Dateiendung "*xx.dwg", wenn wahr, dann führe nachfolgende Eingaben aus /
;
((wcmatch KD-DWGNAME "*-A.dwg")
;
;
;
;Index-B erstellen
;
(defun UPDATE-Title-Block ( INSERTNAME ATTRIBNAME  ATTRIBWERT / AUSWAHL INDEX OBJEKTDATEN)
  (if (= (type INSERTNAME) 'STR)
    (setq AUSWAHL (ssget "_x" (list '(0 . "INSERT")(cons 2 INSERTNAME))))
  )
  (if(or AUSWAHL
        (setq AUSWAHL (ssget "_x" '((0 . "INSERT"))))
    )
    (progn
      (setq INDEX -1)    
      (repeat (sslength AUSWAHL)
        (setq OBJEKTDATEN (entget (ssname AUSWAHL (setq INDEX (1+ INDEX)))))
        (if (assoc 66 OBJEKTDATEN)                  
          (while (/= (cdr (assoc 0 OBJEKTDATEN)) "SEQEND")
            (setq OBJEKTDATEN (entget (entnext (cdr (assoc -1 OBJEKTDATEN)))))
            (if (and(=(cdr (assoc 0 OBJEKTDATEN)) "ATTRIB")                      
                    (=(strcase (cdr(assoc 2 OBJEKTDATEN))) ATTRIBNAME)
                )
              (progn              
                (entmod(subst(cons 1 ATTRIBWERT)
                            (assoc 1 OBJEKTDATEN)
                            OBJEKTDATEN
                      )
                )
              )
            )
          )          
        )
      )              
    )
  )
)
(defun c:UPDATE-Title-Block ()
  (UPDATE-Title-Block "*KD-STEMPEL*" "PLANNR-INDEX"  "B")
  (UPDATE-Title-Block "*KD-STEMPEL*" "IND-2"  "B")
  (UPDATE-Title-Block "*KD-STEMPEL*" "DAT-IND-2"  "--.--.--")
  (UPDATE-Title-Block "*KD-STEMPEL*" "NAME-IND-2"  "--. / --.")
  (UPDATE-Title-Block "*KD-STEMPEL*" "ÄNDERUNG-IND-2"  "Anpassungen und Ergänzungen")
  (command "_.regenall")
)
(C:UPDATE-Title-Block)
;_________________________________________________________________________________________________________________________
;
(LOAD "G:/1000SONS/CAD/Faust/LISP/SRXTEXT.VLX")
(setq _SRXTEXTNOZOOM 1)
(SRXTEXT2 "Regular" "([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)" "$1B" "All")
(LOAD "G:/1000SONS/CAD/Faust/LISP/RRename.VLX")
(command "_.SCRIPTCALL" "G:/1000SONS/CAD/Faust/SCRIPT/SCRIPTCALL/KD-Stempel-Layout-Index-A-Z.scr")
(setvar "cmdecho" 0)
(setvar "filedia" 0)
(command "_.SAVEAS" "2018" (strcat (getvar 'DWGPREFIX) (substr (getvar 'dwgname) 1 (- (strlen (getvar 'dwgname)) 5)) "B"))
(setvar "filedia" 1)
(setvar "cmdecho" 1)
)
;
;-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------C
;
;Sucht nach der Dateiendung "*xx.dwg", wenn wahr, dann führe nachfolgende Eingaben aus /
;
((wcmatch KD-DWGNAME "*-B.dwg")
;
;
;
;Index-C erstellen
;
(DEFUN COPY-ATT (BLOCKNAME FROMatt TOatt / VALUE i l sset iBLK)
  (setq sset (ssget "x" (list (cons 2 BLOCKNAME))))
  (if (= sset nil)(setq l 0))
  (setq l (sslength sset))
  (setq i 0)
    (repeat l
      (setq iBLK (ssname sset i))
      (SETQ VALUE (GET-ATT FROMatt iBLK))
      (PUT-ATT iBLK TOatt VALUE)
      (setq i (1+ i))
    )
)
(DEFUN GET-ATT (tag blk / val enx)
  (WHILE
    (AND
      (NULL val)
      (= "ATTRIB" (CDR (ASSOC 0 (SETQ enx (ENTGET (SETQ blk (ENTNEXT blk)))))))
    )
     (IF (= (STRCASE tag) (STRCASE (CDR (ASSOC 2 enx))))
       (SETQ val (CDR (ASSOC 1 enx)))
     )
  )
)
(DEFUN PUT-ATT (blk tag val / end enx)
  (WHILE (AND (NULL end) (= "ATTRIB" (CDR (ASSOC 0 (SETQ enx (ENTGET (SETQ blk (ENTNEXT blk))))))))
    (IF (= (STRCASE tag) (STRCASE (CDR (ASSOC 2 enx))))
      (IF (ENTMOD (SUBST (CONS 1 val) (ASSOC 1 enx) enx))
(PROGN (ENTUPD blk) (SETQ end val))
      )
    )
  )
)
(DEFUN C:COPY-ATT ()
  (COPY-ATT "*KD-Stempel*" "IND-2" "IND-1")
  (COPY-ATT "*KD-Stempel*" "DAT-IND-2" "DAT-IND-1")
  (COPY-ATT "*KD-Stempel*" "NAME-IND-2" "NAME-IND-1")
  (COPY-ATT "*KD-Stempel*" "ÄNDERUNG-IND-2" "ÄNDERUNG-IND-1")
)
(C:COPY-ATT)
;_________________________________________________________________________________________________________________________
;
(defun UPDATE-Title-Block ( INSERTNAME ATTRIBNAME  ATTRIBWERT / AUSWAHL INDEX OBJEKTDATEN)
  (if (= (type INSERTNAME) 'STR)
    (setq AUSWAHL (ssget "_x" (list '(0 . "INSERT")(cons 2 INSERTNAME))))
  )
  (if(or AUSWAHL
        (setq AUSWAHL (ssget "_x" '((0 . "INSERT"))))
    )
    (progn
      (setq INDEX -1)    
      (repeat (sslength AUSWAHL)
        (setq OBJEKTDATEN (entget (ssname AUSWAHL (setq INDEX (1+ INDEX)))))
        (if (assoc 66 OBJEKTDATEN)                  
          (while (/= (cdr (assoc 0 OBJEKTDATEN)) "SEQEND")
            (setq OBJEKTDATEN (entget (entnext (cdr (assoc -1 OBJEKTDATEN)))))
            (if (and(=(cdr (assoc 0 OBJEKTDATEN)) "ATTRIB")                      
                    (=(strcase (cdr(assoc 2 OBJEKTDATEN))) ATTRIBNAME)
                )
              (progn              
                (entmod(subst(cons 1 ATTRIBWERT)
                            (assoc 1 OBJEKTDATEN)
                            OBJEKTDATEN
                      )
                )
              )
            )
          )          
        )
      )              
    )
  )
)
(defun c:UPDATE-Title-Block ()
  (UPDATE-Title-Block "*KD-STEMPEL*" "PLANNR-INDEX"  "C")
  (UPDATE-Title-Block "*KD-STEMPEL*" "IND-2"  "C")
  (UPDATE-Title-Block "*KD-STEMPEL*" "DAT-IND-2"  "--.--.--")
  (UPDATE-Title-Block "*KD-STEMPEL*" "NAME-IND-2"  "--. / --.")
  (UPDATE-Title-Block "*KD-STEMPEL*" "ÄNDERUNG-IND-2"  "Anpassungen und Ergänzungen")
  (command "_.regenall")
)
(C:UPDATE-Title-Block)
;_________________________________________________________________________________________________________________________
;
(LOAD "G:/1000SONS/CAD/Faust/LISP/SRXTEXT.VLX")
(setq _SRXTEXTNOZOOM 1)
(SRXTEXT2 "Regular" "([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)" "$1C" "All")
(LOAD "G:/1000SONS/CAD/Faust/LISP/RRename.VLX")
(command "_.SCRIPTCALL" "G:/1000SONS/CAD/Faust/SCRIPT/SCRIPTCALL/KD-Stempel-Layout-Index-A-Z.scr")
(setvar "cmdecho" 0)
(setvar "filedia" 0)
(command "_.SAVEAS" "2018" (strcat (getvar 'DWGPREFIX) (substr (getvar 'dwgname) 1 (- (strlen (getvar 'dwgname)) 5)) "C"))
(setvar "filedia" 1)
(setvar "cmdecho" 1)
)

Jetzt habe ich insgesamt 4 Dateien, (2x VLX / 1x SCR / 1x Hauptlisp) anstatt fast 60.
Vielen dank für eure tatkräftige Unterstützung.  

------------------

Gruß
Manuel

[Diese Nachricht wurde von Manuel486 am 15. Jul. 2021 editiert.]

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

cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 15. Jul. 2021 13:23    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 Manuel486 10 Unities + Antwort hilfreich

1. "Das ist jetzt der fertige Code bis Index-C, danach widerholt sich alles Index-D...E usw.
   DANKE
   "danach widerholt sich alles Index-D...E" DAS bezieht sich auf den vorherigen Abschnitt für "Index-C" nehme ich an?
   Okay, ich nehme deine Aussage ernst, also D-Z ist, bis auf den Indexbuchstaben, als wie für C.

2. OhJe

3. Dann wollen wir mal..
   Meine Antwort erfolgt in zwei Teilen, Teil.1 kommentiert deine Version, Teil.2 ist eine (ungetesteter) alternative Variante.

Teil.1

Code:


(cond
((wcmatch KD-DWGNAME "*--.dwg")
;
;
;
;Index-A erstellen
;
(defun UPDATE-Title-Block ( INSERTNAME ATTRIBNAME  ATTRIBWERT / AUSWAHL INDEX OBJEKTDATEN)
  ..
  Diese Funktion UPDATE-Title-Block steht 26x identisch in der Datei, sieht unnötige aus - und ist es auch.
     Die Funktion UPDATE-Title-Block gehört in den "allgemeinen Bereich", also noch über deine "(COND Zeile" ganz oben,
     HIER gehört die raus, auch aus dem Index A, B, C oder Z -Bereich.
  {EDIT, im Fall von Index - zu A und A zu B ist die Aussage nicht gnaz passend, aber für C - Z gilt es so}

  ..
)

(defun c:UPDATE-Title-Block () <- Hier einen AutoCAD-Befehl zu definieren um diesen nur EINMAL auszuführen ist nicht sinnvoll
     selbst also Lispfunktion ohne c: im Namen macht es bei einmaligem Aufruf keinen Sinn diese zu definieren.
     Die fünf Zeilen (UPDATE-Title-Block...) wären ausreichend, spart Platz und theoretisch auch Performance und Speicher

  (UPDATE-Title-Block "*KD-STEMPEL*" "PLANNR-INDEX"  "A")
  (UPDATE-Title-Block "*KD-STEMPEL*" "IND-1"  "A")
  (UPDATE-Title-Block "*KD-STEMPEL*" "DAT-IND-1"  "--.--.--")
  (UPDATE-Title-Block "*KD-STEMPEL*" "NAME-IND-1"  "--. / --.")
  (UPDATE-Title-Block "*KD-STEMPEL*" "ÄNDERUNG-IND-1"  "Anpassungen und Ergänzungen")
  (command "_.regenall") Macht wohl in deinem Fall hier keinen Sinn und wenn, dann gehört es nur einmal ans Ende der Datei
)
(C:UPDATE-Title-Block)diese Zeile würde dann auch entfallen
;_________________________________________________________________________________________________________________________
(LOAD "G:/1000SONS/CAD/Faust/LISP/SRXTEXT.VLX")
(setq _SRXTEXTNOZOOM 1)
   Diese zwei Zeilen (über dieser hier) gibt es 26x identisch in der Datei?
     Sieht unnötige aus - und ist es auch.
     Die beiden Zeilen gehören in den "allgemeinen Bereich", also noch über deine "(COND Zeile" ganz oben,
     HIER gehören die raus, auch aus dem Index A, B, C oder Z -Bereich.


(SRXTEXT2 "Regular" "([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)" "$1A" "All")
(LOAD "G:/1000SONS/CAD/Faust/LISP/RRename.VLX")  Diese Zeile steht 26x identisch in der Datei, sieht unnötige aus - und ist es auch.
     Die LOAD-Anweisung gehört in den "allgemeinen Bereich", also noch über deine "(COND Zeile" ganz oben,
     HIER gehört die raus, auch aus dem Index A, B, C oder Z -Bereich.


(command "_.SCRIPTCALL" "G:/1000SONS/CAD/Faust/SCRIPT/SCRIPTCALL/KD-Stempel-Layout-Index-A-Z.scr")
   Jetzt bin ich verwundert, da hast du nach meinem Wink wohl eine andere Lösung gefunden, aber nicht DIE Lösung..
     Meinen Satz "Schau dir vielleicht noch einmal dein SUCH-Muster an," hast du dir zu Herzen genommen,
     aber was ist mit " Da reicht auch EIN Script für RRENAME.. ein Script mit 26 RRENAME-Aufrufen " ?

     Ich dachte in dem Moment an folgendes:
     In deiner Lispdatei führst du nur noch ein und dasselbe Script aus für RRENAME,
     Aufbau der Scriptdatei: 26 Wiederholungen für
     Ersetze Y durch Z
     Ersetze X durch Y
     usw..
     EIN Script, was RRENAME korrekt durchführt, egal welcher valide Index aktuell im Layoutnamen steht.
     SO dachte ich es.. Erspart dir hier nicht den Aufruf des Scriptes, aber du hast nur noch ein  Script statt 26

(setvar "cmdecho" 0) Wofür ist das gut?, wenn-dann gehört das einmal ans Ende der Datei und nicht an 26 Stellen
(setvar "filedia" 0) Wofür ist das gut? Die Einstellung kann genau GAR NICHTS in Scripten und Commands.. außer Ärger verursachen ;)
(command "_.SAVEAS" "2018" (strcat (getvar 'DWGPREFIX) (substr (getvar 'dwgname) 1 (- (strlen (getvar 'dwgname)) 5)) "A"))
(setvar "filedia" 1) Wenn man es nicht auf 0 stellt, braucht man es auch nicht wieder auf 1 stellen.
        ganz streng genommen ist es sogar falsch, denn wenn man das Lisp hier startet wärend Filedia auf 0 steht, dann veränderst du ja
       die Einstellung welche die Variable vor Start hatte.
       Ja klar, es gibt eh nur einen einzigen mir bekannten Menschen der mit Filedia=0 arbeitet und alle normalen Menschen arbeiten
       ohnehin mit FileDia=1, aber ein Programm sollte Variablen nur verändert hinterlassen, wenn das Programm auch dafür da ist.

(setvar "cmdecho" 1) Warum stellst es am Anfang der Datei auf 0 und dann immer wieder hin und her?
       Du benutzt einmal command für das speichern und das willst du nicht sehen,
       also stelle cmdecho einmal gaaanz oben auf 0 (hast du)und gaaaanz unten auf 1 - wenn du das willst - sollte dann ausreichen, oder?

)
;
;-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------B
;
;Sucht nach der Dateiendung "*xx.dwg", wenn wahr, dann führe nachfolgende Eingaben aus /
;
((wcmatch KD-DWGNAME "*-A.dwg")
;
;
;
;Index-B erstellen
;
(defun UPDATE-Title-Block ( INSERTNAME ATTRIBNAME  ATTRIBWERT / AUSWAHL INDEX OBJEKTDATEN)
  ..
  wie oben kommentiert - das gehört hier weg und nur EINMAL über dem Cond platziert
  ..
)
(defun c:UPDATE-Title-Block () <-- wie oben kommentiert, am besten Zeile löschen.
  (UPDATE-Title-Block "*KD-STEMPEL*" "PLANNR-INDEX"  "B")
  (UPDATE-Title-Block "*KD-STEMPEL*" "IND-2"  "B")
  (UPDATE-Title-Block "*KD-STEMPEL*" "DAT-IND-2"  "--.--.--")
  (UPDATE-Title-Block "*KD-STEMPEL*" "NAME-IND-2"  "--. / --.")
  (UPDATE-Title-Block "*KD-STEMPEL*" "ÄNDERUNG-IND-2"  "Anpassungen und Ergänzungen")
  (command "_.regenall")<-- wie oben kommentiert, am besten Zeile löschen.
)<-- wie oben kommentiert, am besten Zeile löschen.
(C:UPDATE-Title-Block)<-- wie oben kommentiert, am besten Zeile löschen.
;_________________________________________________________________________________________________________________________
;
(LOAD "G:/1000SONS/CAD/Faust/LISP/SRXTEXT.VLX")<-wie oben kommentiert - das gehört hier weg und nur EINMAL über dem Cond platziert
(setq _SRXTEXTNOZOOM 1)<-wie oben kommentiert - das gehört hier weg und nur EINMAL über dem Cond platziert
(SRXTEXT2 "Regular" "([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)" "$1B" "All")
(LOAD "G:/1000SONS/CAD/Faust/LISP/RRename.VLX")<-wie oben kommentiert - das gehört hier weg und nur EINMAL über dem Cond platziert
(command "_.SCRIPTCALL" "G:/1000SONS/CAD/Faust/SCRIPT/SCRIPTCALL/KD-Stempel-Layout-Index-A-Z.scr") <-siehe oben, immer wieder ein und das gleiche Script würde ausreichen
(setvar "cmdecho" 0)<-wie oben kommentiert - unnötig
(setvar "filedia" 0)<-wie oben kommentiert - unnötig
(command "_.SAVEAS" "2018" (strcat (getvar 'DWGPREFIX) (substr (getvar 'dwgname) 1 (- (strlen (getvar 'dwgname)) 5)) "B"))
(setvar "filedia" 1)<-wie oben kommentiert - unnötig
(setvar "cmdecho" 1)<-wie oben kommentiert - unnötig
)
;
;-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------C
;
;Sucht nach der Dateiendung "*xx.dwg", wenn wahr, dann führe nachfolgende Eingaben aus /
;
((wcmatch KD-DWGNAME "*-B.dwg")
;
;
;
;Index-C erstellen
;
(DEFUN COPY-ATT (BLOCKNAME FROMatt TOatt / VALUE i l sset iBLK)
  ..
  Diese Funktion steht 25x identisch in der Datei, sieht unnötige aus - und ist es auch.
     Die Funktion gehört in den "allgemeinen Bereich", also noch über deine "(COND Zeile" ganz oben,
     HIER gehört die raus, auch aus dem Index A, B, C oder Z -Bereich.

  ..
)
(DEFUN GET-ATT (tag blk / val enx)
  ..
  Diese Funktion steht 25x identisch in der Datei, sieht unnötige aus - und ist es auch.
     Die Funktion gehört in den "allgemeinen Bereich", also noch über deine "(COND Zeile" ganz oben,
     HIER gehört die raus, auch aus dem Index A, B, C oder Z -Bereich.

  ..
)
(DEFUN PUT-ATT (blk tag val / end enx)
  ..
  Diese Funktion steht 25x identisch in der Datei, sieht unnötige aus - und ist es auch.
     Die Funktion gehört in den "allgemeinen Bereich", also noch über deine "(COND Zeile" ganz oben,
     HIER gehört die raus, auch aus dem Index A, B, C oder Z -Bereich.

  ..
)
(DEFUN C:COPY-ATT ()
  ..
  Diese Funktion steht 25x identisch in der Datei, sieht unnötige aus - und ist es auch.
     Die Funktion gehört in den "allgemeinen Bereich", also noch über deine "(COND Zeile" ganz oben,
     HIER gehört die raus, auch aus dem Index A, B, C oder Z -Bereich.

  ..
)
(C:COPY-ATT)
;_________________________________________________________________________________________________________________________
;

usw.
)


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

Manuel486
Mitglied
Technischer Zeichner Elektro


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

Beiträge: 194
Registriert: 31.01.2020

erstellt am: 15. Jul. 2021 14:21    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

>>"danach widerholt sich alles Index-D...E" DAS bezieht sich auf den vorherigen Abschnitt für "Index-C" nehme ich an?
  Okay, ich nehme deine Aussage ernst, also D-Z ist, bis auf den Indexbuchstaben, als wie für C.
Index-B ist wie Index-A aufgebaut. (Bis auf die Indexbuchstaben)
Ab Index-C kommt "COPY-ATT" dazu und dann ist Index-D-E-F-usw. wie Index-C aufgebaut. (Bis auf die Indexbuchstaben)

Danke für deine Mühe und die super Erklärungen.
Ich gestehe, ich habe es 1x zusammengebaut.
Nach dem es lief, habe ich es einfach durch kopiert,
ohne mir Gedanken zu machen wie ich es zusammenfassen könnte.

Ich melde mich wieder wenn ich es überarbeitet habe.

das hier ist der Scriptcall:
KD-Stempel-Layout-Index-A-Z.scr

Code:
RRENAME
Layouts
([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(Y)
$1Z
RRENAME
Layouts
([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(X)
$1Y
RRENAME
Layouts
([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(W)
$1X
RRENAME
Layouts
([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(V)
$1W
RRENAME
Layouts
([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(U)
$1V
RRENAME
Layouts
([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(T)
$1U
RRENAME
Layouts
([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(S)
$1T
RRENAME
Layouts
([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(R)
$1S
RRENAME
Layouts
([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(Q)
$1R
RRENAME
Layouts
([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(P)
$1Q
RRENAME
Layouts
([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(O)
$1P
RRENAME
Layouts
([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(N)
$1O
RRENAME
Layouts
([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(M)
$1N
RRENAME
Layouts
([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(L)
$1M
RRENAME
Layouts
([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(K)
$1L
RRENAME
Layouts
([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(J)
$1K
RRENAME
Layouts
([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(I)
$1J
RRENAME
Layouts
([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(H)
$1I
RRENAME
Layouts
([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(G)
$1H
RRENAME
Layouts
([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(F)
$1G
RRENAME
Layouts
([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(E)
$1F
RRENAME
Layouts
([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(D)
$1E
RRENAME
Layouts
([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(C)
$1D
RRENAME
Layouts
([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(B)
$1C
RRENAME
Layouts
([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(A)
$1B
RRENAME
Layouts
([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(-)
$1A

Ich denke so hattest du es gemeint, oder?

------------------

Gruß
Manuel

[Diese Nachricht wurde von Manuel486 am 15. Jul. 2021 editiert.]

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

cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 15. Jul. 2021 15: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 Manuel486 10 Unities + Antwort hilfreich

Ja genau so.
Vielleicht hatte ich das oben FALSCH interpretiert weil du das Script ~26 Mal aufrufst obwohl 1x ausreicht.
Das verwirrte mich in dem Moment wohl, passiert.

PS.: DU HAST POST

Teil.2

Code:

hier zeige ich nicht den Code sondern beschreibe den Aufbau wie das aussehen könnte - allerdings nicht mit nur Copy&Paste aus deiner Vorlage

-Notwendige Dateien laden (rrename zB.)
-Wenn nicht als externe Datei vorhanden, aber benötigt: Weitere Funktionen definieren (GET-ATT zB.)
-Vorbereitung/Einstellungen machen (CMDECHO oder auch KD-DWGNAME defineren zB.)
-Neuen Index ermitteln (als wenn "-", dann "A". Wenn A-Y, dann eins höher)
;---
Wenn neuer Index =A, dann Indexzeile 1 mit "A" ausfüllen
Wenn neuer Index =B, dann Indexzeile 2 mit "B" ausfüllen
Bei allen anderen Indexzeile 2 in 1 kopieren
und Indexzeile2 mit dem neuen Index füllen

SRXTEXT und RRENAME Layout ausführen mit neuem Index als Vorgabe

SpeichernUnter
Optional, Einstellungen zurücksetzen
; ENDE


So wäre es dann recht schlank.

Man muss es also möglichst variable gestalten.

; Ermittelt den aktuellen Index vom Dateinamen und legt den zukünftigen Index fest
;
(setq Index (strcase(substr KD-DWGNAME (-(strlen KD-DWGNAME)4) 1))) ; aktueller Dateinamen-Index
(cond
  ((= "-" Index) ; wenn aktueller Index "-"  -> Index "A"
  (setq Index "A"))
  ((< 64 (ascii INDEX) 90) ; wenn aktueller Index "A"-"Y" -> ein Buchstabe höher
  (setq Index (chr(1+(ascii Index)))))
  (T
  (alert (princ(strcat "Irgendwas stimmt da mit dem aktuellen Datei-Index nicht!? (" KD-DWGNAME ")")))
  (exit))
)

Die Funktionen zum schreiben/ändern der Daten erwarten INDEX als Argument
und da man den neuen Index bereits festgelegt hat -> schwupp, läuft.

statisch immer gleicher Ausdruck: (alert (strcat "Neuer Index ist: " Index))
aber je nach gebundenem Variablenwert,  => "Neuer Index ist: C" => "Neuer Index ist: D" usw.

Für derartige Späße empfehle ich ja aber besser noch mal bei Null zu starten, mit dem Kochbuch. 

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

Manuel486
Mitglied
Technischer Zeichner Elektro


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

Beiträge: 194
Registriert: 31.01.2020

erstellt am: 22. Jul. 2021 13:55    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

So, es ist vollbracht.  
Habe noch ein paar Sachen eingebaut.
Wie z.B.:
- Ermittlung des korrekten Dateinamens
- Zeichner ermitteln
- Zeichner Kürzel erstellen
- Planer ermitteln
- Planer Kürzel erstellen
- Aktuelles Datum ermitteln
Das wird dann alles automatisch in die Indexzeilen eingetragen.

Code:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;KD-Stempel Index erhöhen.lsp ;;;
;;;Ver. 1.2 ;;;
;;;Manuel Faust, 07/2021 ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;------------------------------------------------------------------------------------------------------------------------------
;CMDECHO (Systemvariable), Deaktiviert die Protokollierung im Textfenster /
;
(setvar "cmdecho" 0)
;------------------------------------------------------------------------------------------------------------------------------
;Liest den DWG-Namen mit Dateiendung aus /
;
(setq KD-DWGNAME (getvar 'dwgname))
;------------------------------------------------------------------------------------------------------------------------------
;Ermittelt die ersten drei Stellen im Dateinamen /
;
(setq DATEINAME-1-3 (substr KD-DWGNAME 1 3))
;------------------------------------------------------------------------------------------------------------------------------
;Ermittelt ob die KD-Plannummerierung vorliegt /
;
(if (not (wcmatch DATEINAME-1-3 "TGE,TGT,TGB,TGL,FRD")) ; erste drei Stellen NICHT = "xxx" -> Fehlermeldung
(progn
  (alert (princ(strcat "Keine KD-Plancodierung! (" KD-DWGNAME ")")))
  (exit))
)
;------------------------------------------------------------------------------------------------------------------------------
;Ermittelt den aktuellen Index des Dateinamens und legt den zukünftigen Index fest /
;
(setq INDEX (strcase(substr KD-DWGNAME (-(strlen KD-DWGNAME)4) 1))) ; aktueller Dateinamen-Index
(cond
  ((= "-" INDEX) ; wenn aktueller Index "-"  -> Index "A"
  (setq INDEX "A"))
  ((< 64 (ascii INDEX) 90) ; wenn aktueller Index "A"-"Y" -> ein Buchstabe höher
  (setq INDEX (chr(1+(ascii Index)))))
  (T
  (alert (princ(strcat "Fehler in der Plancodierung! (" KD-DWGNAME ")")))
  (exit))
)
;------------------------------------------------------------------------------------------------------------------------------
;Setzt das aktuelle Datum im Format "DD.MO.YY" "20.07.21" /
;
(setq DATUM-HEUTE (menucmd "M=$(edtime, $(getvar,date),DD.MO.YY)"))
;------------------------------------------------------------------------------------------------------------------------------
;Ermittelt den aktuellen Benutzer /
;
(setq AKT-BENUTZER (getvar "loginname"))
;------------------------------------------------------------------------------------------------------------------------------
;Legt für den aktuellen Benutzer ein Kürzel fest /
;
(cond
  ((= "faust" AKT-BENUTZER) ; wenn aktueller Benutzer "faust"  -> Kürzel " / Fa."
  (setq BENUTZER-KURZ " / Fa."))

;;;;;;;;;;;;;;;;;;USW USW

  (T
  (alert (princ "Fehler in der Benutzererkennung!"))
  (exit))
)
;------------------------------------------------------------------------------------------------------------------------------
;Ermittelt den Wert der Attributbezeichnung "NAME-GEP" /
;
(defun GET-ATT-TAG ( Blkname Tagname / ss blk tagn atts att )
(vl-load-com); if required
(setq ss nil rtn "")
(setq ss (ssget "_X" (list (cons 0 "INSERT")(cons 66 1)(cons 2 Blkname))))
(if ss
(progn
(setq blk (vlax-ename->vla-object (ssname ss 0)))
(if (safearray-value (setq atts (vlax-variant-value (vla-getattributes blk))))
(progn
(setq atts (vlax-safearray->list (vlax-variant-value (vla-getattributes blk))))
(foreach att atts
(setq tagn (strcase (vla-get-tagstring att)))
(if (= tagn (strcase Tagname))
(setq rtn (vla-get-textstring att))
); if
); foreach
); progn
); if
); progn
); if
rtn
); end function
(setq GEPLANT-VON (get-att-tag "*KD-Stempel*" "NAME-GEP"))
;------------------------------------------------------------------------------------------------------------------------------
;Legt für die Attributbezeichnung "NAME-GEP" ein Kürzel fest /
;
(cond
  ((= "Dörflinger" GEPLANT-VON) ; wenn geplant von "Dörflinger"  -> Kürzel "Dö."
  (setq GEPLANT-KURZ "Dö."))

;;;;;;;;;;;;;;;;;;USW USW

  (T
  (alert (princ "Name des Planers nicht vorhanden!"))
  (exit))
)
;------------------------------------------------------------------------------------------------------------------------------
;Lädt die LISP: SRRename.VLX / rRename - regex rename utility for AutoCAD tables /
;
(LOAD "G:/1000SONS/CAD/Faust/LISP/RRename.VLX")
;------------------------------------------------------------------------------------------------------------------------------
;Lädt die LISP: SRXTEXT.VLX / SRXTEXT - search/replace with regular expressions /
;
(LOAD "G:/1000SONS/CAD/Faust/LISP/SRXTEXT.VLX")
;------------------------------------------------------------------------------------------------------------------------------
;Stellt das Zoomen von SRXTEXT.VLX aus /
;
(setq _SRXTEXTNOZOOM 1)
;------------------------------------------------------------------------------------------------------------------------------
;Die Funktion "UPDATE-Title-Block" wird geladen /
;
(defun UPDATE-Title-Block ( INSERTNAME ATTRIBNAME  ATTRIBWERT / AUSWAHL INDEX OBJEKTDATEN)
  (if (= (type INSERTNAME) 'STR)
    (setq AUSWAHL (ssget "_x" (list '(0 . "INSERT")(cons 2 INSERTNAME))))
  )
  (if(or AUSWAHL
        (setq AUSWAHL (ssget "_x" '((0 . "INSERT"))))
    )
    (progn
      (setq INDEX -1)    
      (repeat (sslength AUSWAHL)
        (setq OBJEKTDATEN (entget (ssname AUSWAHL (setq INDEX (1+ INDEX)))))
        (if (assoc 66 OBJEKTDATEN)                  
          (while (/= (cdr (assoc 0 OBJEKTDATEN)) "SEQEND")
            (setq OBJEKTDATEN (entget (entnext (cdr (assoc -1 OBJEKTDATEN)))))
            (if (and(=(cdr (assoc 0 OBJEKTDATEN)) "ATTRIB")                      
                    (=(strcase (cdr(assoc 2 OBJEKTDATEN))) ATTRIBNAME)
                )
              (progn              
                (entmod(subst(cons 1 ATTRIBWERT)
                            (assoc 1 OBJEKTDATEN)
                            OBJEKTDATEN
                      )
                )
              )
            )
          )          
        )
      )              
    )
  )
)
;------------------------------------------------------------------------------------------------------------------------------
;Kopiert einen Attributwert von einem Attribut zu einem anderen Attribut derselben Blockreferenz,
;durchläuft alle TopLevel Referenzen des Blockes / nicht dyn.Block geeignet /
;
(DEFUN COPY-ATT (BLOCKNAME FROMatt TOatt / VALUE i l sset iBLK)
  (setq sset (ssget "x" (list (cons 2 BLOCKNAME))))
  (if (= sset nil)(setq l 0))
  (setq l (sslength sset))
  (setq i 0)
    (repeat l
      (setq iBLK (ssname sset i))
      (SETQ VALUE (GET-ATT FROMatt iBLK))
      (PUT-ATT iBLK TOatt VALUE)
      (setq i (1+ i))
    )
)
;Liest den Attributwert eines Attributes einer Blockreferenz und gibt den Wert zurück /
;
(DEFUN GET-ATT (tag blk / val enx)
  (WHILE
    (AND
      (NULL val)
      (= "ATTRIB" (CDR (ASSOC 0 (SETQ enx (ENTGET (SETQ blk (ENTNEXT blk)))))))
    )
     (IF (= (STRCASE tag) (STRCASE (CDR (ASSOC 2 enx))))
       (SETQ val (CDR (ASSOC 1 enx)))
     )
  )
)
;Ändert den Wert eines Attributes einer Blockreferenz /
;
(DEFUN PUT-ATT (blk tag val / end enx)
  (WHILE (AND (NULL end) (= "ATTRIB" (CDR (ASSOC 0 (SETQ enx (ENTGET (SETQ blk (ENTNEXT blk))))))))
    (IF (= (STRCASE tag) (STRCASE (CDR (ASSOC 2 enx))))
      (IF (ENTMOD (SUBST (CONS 1 val) (ASSOC 1 enx) enx))
(PROGN (ENTUPD blk) (SETQ end val))
      )
    )
  )
)
;------------------------------------------------------------------------------------------------------------------------------
;Funktionen um den Index im KD-Stempel zu erhöhen
;
;Indexzeile verschieben wenn Index C oder höher gesetzt werden soll
;
(if (wcmatch Index "[C-Z]")
(progn
(COPY-ATT "*KD-Stempel*" "IND-2" "IND-1")
(COPY-ATT "*KD-Stempel*" "DAT-IND-2" "DAT-IND-1")
(COPY-ATT "*KD-Stempel*" "NAME-IND-2" "NAME-IND-1")
(COPY-ATT "*KD-Stempel*" "ÄNDERUNG-IND-2" "ÄNDERUNG-IND-1")
)
)
;------------------------------------------------------------------------------------------------------------------------------
;Index A bis Z wird erstellt
;
(cond ((= Index "A")
(UPDATE-Title-Block "*KD-STEMPEL*" "PLANNR-INDEX" "A")
(UPDATE-Title-Block "*KD-STEMPEL*" "IND-1" "A")
(UPDATE-Title-Block "*KD-STEMPEL*" "DAT-IND-1" DATUM-HEUTE)
(UPDATE-Title-Block "*KD-STEMPEL*" "NAME-IND-1" (strcat GEPLANT-KURZ BENUTZER-KURZ))
(UPDATE-Title-Block "*KD-STEMPEL*" "ÄNDERUNG-IND-1" "Anpassungen und Ergänzungen")
)
(T ;(< 65 (ascii INDEX) 90) ; B bis Y
(UPDATE-Title-Block "*KD-STEMPEL*" "PLANNR-INDEX" INDEX)
(UPDATE-Title-Block "*KD-STEMPEL*" "IND-2" INDEX)
(UPDATE-Title-Block "*KD-STEMPEL*" "DAT-IND-2" DATUM-HEUTE)
(UPDATE-Title-Block "*KD-STEMPEL*" "NAME-IND-2" (strcat GEPLANT-KURZ BENUTZER-KURZ))
(UPDATE-Title-Block "*KD-STEMPEL*" "ÄNDERUNG-IND-2" "Anpassungen und Ergänzungen")
)
)
;------------------------------------------------------------------------------------------------------------------------------
;Dateiname im Stempel wird auf aktuellen Index gesetzt /
;
(SRXTEXT2 "Regular" "([A-Z][A-Z][A-Z]-[0-9]-.-[A-Z][A-Z]-...-[0-9][0-9][0-9]-)(.)" (strcat "$1" INDEX) "All")
;------------------------------------------------------------------------------------------------------------------------------
;Layoutnamen werden auf aktuellen Index gesetzt /
;
(command "_.SCRIPT" "G:/1000SONS/CAD/Faust/SCRIPT/SCRIPTCALL/KD-Stempel-Layout-Index-A-Z.scr")
;------------------------------------------------------------------------------------------------------------------------------
;Datei wird auf aktuellen Index gespeichert /
;
(command "_.SAVEAS" "2018" (strcat (getvar 'DWGPREFIX) (substr (getvar 'dwgname) 1 (- (strlen (getvar 'dwgname)) 5)) Index))
;------------------------------------------------------------------------------------------------------------------------------
;Alles Regenerieren /
;
(command "_.regenall")
;------------------------------------------------------------------------------------------------------------------------------
;CMDECHO (Systemvariable), Aktiviert die Protokollierung im Textfenster /
;
(setvar "cmdecho" 1)


Vielen dank nochmal, an alle fleißigen Helfer  

------------------

Gruß
Manuel

[Diese Nachricht wurde von Manuel486 am 22. Jul. 2021 editiert.]

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