• Dieses Forum ist die maschinengenerierte Übersetzung von www.cad3d.it/forum1 - der italienischen Design-Community. Einige Begriffe sind nicht korrekt übersetzt.

Blockname von Raum zu Unterstrich ändern

  • Ersteller Ersteller 77marco77
  • Erstellt am Erstellt am

77marco77

Guest
Guten Abend, Ich suche einen Weg, den Namen einer Vielzahl von Blöcken (ca. 6500) in einer Zeichnung zu ändern. die notwendige Änderung ist, die in den Namen der Blöcke vorhandenen Räume zu ersetzen (einige Namen von Blöcken haben nicht, andere haben 1, andere 2 oder sogar 3...) mit dem darunterliegenden Strich. Ich versuchte mit allen möglichen Kombinationen von * umzubenennen, aber es funktioniert nicht, es sei denn, Sie entscheiden sich für mehrere Buchstaben und Zahlen und reduzieren das Feld auf 2 oder 3 zu einer Zeit.
Danke.
 
Haben Sie bereits eine Suche im Forum gemacht? ist ein Thema, das bereits mehrmals diskutiert wurde und vielleicht finden Sie ein fertiges Skript in den veque Diskussionen geschrieben.
 
Also sollte es gehen. die beiden Funktionen vl-search-string-t und vl-string-subst-t stammen aus den Funktionen vl-string-search und vl-string-subst. der Unterschied ist, dass diese letzten beiden nur das erste Teilzeichen erkennen.
Code:
(Defun c:renblock)
(setq Blöcke (vla-get-blöcke))
(vlax-für elem Blöcke)
(wenn (vl-string-search-t " (vla-get-name elem))
(vla-put-name elem (vl-string-subst-t "_" (vla-get-name elem))
)
)
)

(Schläft) [schlafen] [schlafen] (Schläft) (Schläft) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) [Schläft] [Schläft] [Schläft] (Schläft) [Schläft] [Schläft] [Schläft] [Schläft] (Schläft) (Schläft) (schlafen) (schlafen) (schlafen) (schlafen)
;;; Funktion, die eine Liste mit den Positionen eines Substrings in einem String zurückgibt
(defun vl-string-search-t (string/number list)
(Setq Zähler 0 Liste() Nummer 0)
Zahl
(Setq-Nummer (vl-string-search element string counter))
(falls Nummer)
(Progn)
(Sekt Listen)
Zähler (1+ Anzahl)
)
)
)
)
(Reverse Listings)
)

(Schläft) (schlafen) [Schläft] [Schläft] [Schläft] (Schläft) (Schläft) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) [Schläft] [Schläft] [Schläft] (Schläft) (Schläft) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) [Schläft] [Schläft] [Schläft] [Ble]
;;; Funktion, die Substrings durch andere ersetzt, in einem String
(defun vl-string-subst-t (stringanuova stringavekkia string / stringa1 counter number)
(Setq-Listen (vl-string-search-t stringavekkia string))
(setq string1 string)
(Setq Zähler 0)
(foreach elem list
(setq number (vl-string-search stringavekkia stringa1 (+ elem counter))))
(setq stringa1 (vl-string-subst stringavekkia stringa1 number))
(setq Zähler (- (strlen string1)(strlen string))
)
String
)
 
Also sollte es gehen. die beiden Funktionen vl-search-string-t und vl-string-subst-t stammen aus den Funktionen vl-string-search und vl-string-subst. der Unterschied ist, dass diese letzten beiden nur das erste Teilzeichen erkennen.
Code:
(Defun c:renblock)
(setq Blöcke (vla-get-blöcke))
(vlax-für elem Blöcke)
(wenn (vl-string-search-t " (vla-get-name elem))
(vla-put-name elem (vl-string-subst-t "_" (vla-get-name elem))
)
)
)

(Schläft) [schlafen] [schlafen] (Schläft) (Schläft) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) [Schläft] [Schläft] [Schläft] (Schläft) [Schläft] [Schläft] [Schläft] [Schläft] (Schläft) (Schläft) (schlafen) (schlafen) (schlafen) (schlafen)
;;; Funktion, die eine Liste mit den Positionen eines Substrings in einem String zurückgibt
(defun vl-string-search-t (string/number list)
(Setq Zähler 0 Liste() Nummer 0)
Zahl
(Setq-Nummer (vl-string-search element string counter))
(falls Nummer)
(Progn)
(Sekt Listen)
Zähler (1+ Anzahl)
)
)
)
)
(Reverse Listings)
)

(Schläft) (schlafen) [Schläft] [Schläft] [Schläft] (Schläft) (Schläft) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) [Schläft] [Schläft] [Schläft] (Schläft) (Schläft) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) (schlafen) [Schläft] [Schläft] [Schläft] [Ble]
;;; Funktion, die Substrings durch andere ersetzt, in einem String
(defun vl-string-subst-t (stringanuova stringavekkia string / stringa1 counter number)
(Setq-Listen (vl-string-search-t stringavekkia string))
(setq string1 string)
(Setq Zähler 0)
(foreach elem list
(setq number (vl-string-search stringavekkia stringa1 (+ elem counter))))
(setq stringa1 (vl-string-subst stringavekkia stringa1 number))
(setq Zähler (- (strlen string1)(strlen string))
)
String
)
Das ist Magie.

Vielen Dank, tun Sie genau das, was Sie tun müssen!
 
Ich weiß, dass das Problem gelöst wurde und ich verstehe, dass durch Kopieren/Einfügen zu einem Prolisso-Code mit Doppelschleife zu anderen Fragmenten führt, die heute nicht für notwendig halten (perhaps mit alten Versionen, boh), meiner Meinung nach (obwohl es funktioniert) kann der Code sauberer und optimiert werden.

Ich schlage meine Version vor, getestet auf der 2016 Version von Autocad und Arbeiten.
Ich hatte keine 6.500 Blöcke zur Verfügung, aber es sollte kein Problem geben. .
Code:
(Defun c:renblock2)
(Setq Blöcke (vla-get Blöcke)
(vlax-für elektrische Blöcke)
(vl-string-search) (vla-get-name elem)
(vl-put-name elem (vl-string-translate "_"(vla-get-name elem))))
)
)
)
Wenn jemand es testen will, möchte ich Ihr Feedback, sogar zu verstehen, ob es funktioniert, wie es sollte.
 
Hier habe ich die vl-string-translate Funktion verpasst, nie unter anderem verwendet (kein ist perfekt). die beiden Funktionen, die ich sie vor langer Zeit geschrieben habe, nutzte ich ihre Existenz, um den Befehl mit weniger Zeilen zu tun. Dank der Beratung und Optimierung.
 
Ich weiß, dass das Problem gelöst wurde und ich verstehe, dass durch Kopieren/Einfügen zu einem Prolisso-Code mit Doppelschleife zu anderen Fragmenten führt, die heute nicht für notwendig halten (perhaps mit alten Versionen, boh), meiner Meinung nach (obwohl es funktioniert) kann der Code sauberer und optimiert werden.

Ich schlage meine Version vor, getestet auf der 2016 Version von Autocad und Arbeiten.
Ich hatte keine 6.500 Blöcke zur Verfügung, aber es sollte kein Problem geben. .
Code:
(Defun c:renblock2)
(Setq Blöcke (vla-get Blöcke)
(vlax-für elektrische Blöcke)
(vl-string-search) (vla-get-name elem)
(vl-put-name elem (vl-string-translate "_"(vla-get-name elem))))
)
)
)
Wenn jemand es testen will, möchte ich Ihr Feedback, sogar zu verstehen, ob es funktioniert, wie es sollte.
Wenn ich sehe, wie diese Dinge mit wenigen Zeilen gelöst sind, verstehe ich, wie sehr ich wirklich "klein" bin. .
funktioniert perfekt mit 6358 Blöcken :)
Vielen Dank!
 

Statistik des Forums

Themen
58.521
Beiträge
499.056
Mitglieder
104.110
Neuestes Mitglied
ChristianR

Zurzeit aktive Besucher

Keine Mitglieder online.
Zurück
Oben