| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | | PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
|
Autor
|
Thema: nur teile eines String (1846 mal gelesen)
|
Petra_Sp Mitglied
Beiträge: 130 Registriert: 28.10.2003 AutoCad 2004 Deutsch AutoCad 2004 Englisch Jetzt auch AutoCad 2006 Deutsch
|
erstellt am: 03. Jun. 2004 14:15 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute Ich hab folgendes Problem, ich habe in einem Plankopf (zur kontrolle) einen String der in meinem Fall den Dateinamen und den den ganzen Pfad wo die Zeichnung liegt enthält-anzeigt!! Ok, so weit so gut hab ich das auch hinbekommen. Nun bin ich aber draufgekommen das diese ganze lange Wurst nicht in mein vorgesehenes Feld past! Kann ich auch nur einen Teil anzeigen lassen z.b.: jetzt schaut es so aus: Z:\999999\dwg\01 Zechnungen\Schalung\Detail\B001-20-5-001-.dwg und so würd ich es ganz gerne haben: \Schalung\Detail\B001-20-5-001-.dwg Ist das überhaupt möglich?? ich hab das erst so erstellt: $(getvar,dwgprefix)$(getvar,dwgname) Wenn ja, bitte helt mir Danke Petra ------------------ LG Petra Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 03. Jun. 2004 14:35 <-- editieren / zitieren --> Unities abgeben: Nur für Petra_Sp
.. die Spaltet den Path in eine Liste auf (defun PATH->List (PATH / POS LST) (if (=(type PATH)'STR) (progn (setq PATH (strcat PATH "/")) (while (or(vl-string-position (ascii "\\") PATH) (vl-string-position (ascii "/") PATH) ) (if (setq POS (if(< (if (vl-string-position (ascii "\\") PATH) (vl-string-position (ascii "\\") PATH) (1+ (strlen PATH)) ) (if (vl-string-position (ascii "/") PATH) (vl-string-position (ascii "/") PATH) (1+ (strlen PATH)) ) ) (vl-string-position (ascii "\\") PATH) (vl-string-position (ascii "/") PATH) ) ) (progn (if(>(strlen(substr PATH 1 POS))0) (setq LST (append LST (list (substr PATH 1 POS)))) ) (setq PATH (substr PATH (+ POS 2))) ) ) ) ) ) LST ) .... Die Funktion schneidet bei einer Anzahl Verzeichnissen ab: (defun Zchnstr ( VERZEICHNISSE / RETURN) (if (=(type VERZEICHNISSE)'INT) (progn (setq LST (reverse(path->List(getvar "dwgprefix")))) (if (> Verzeichnisse (length LST))(setq Verzeichnisse (length LST))) (setq RETURN (getvar "dwgname")) (setq Index -1) (repeat VERZEICHNISSE (setq RETURN (strcat (nth (setq INDEX(1+ INDEX))LST) "\\" RETURN)) ) ) ) RETURN ) .... und die bei einer Anzahl Buchstaben .. (defun Zchnstr ( ANZAHL / RETURN) (if (=(type VERZEICHNISSE)'INT) (progn (setq RETURN (strcat(getvar "dwgprefix")(getvar "dwgname"))) (setq RETURN (substr RETURN (-(strlen RETURN)Anzahl) (+ Anzahl 1))) ) ) ) Hoffe, kannst was mit anfangen und bei dir reinbasteln.. ------------------ - Thomas - [Diese Nachricht wurde von CADmium am 03. Jun. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Petra_Sp Mitglied
Beiträge: 130 Registriert: 28.10.2003 AutoCad 2004 Deutsch AutoCad 2004 Englisch Jetzt auch AutoCad 2006 Deutsch
|
erstellt am: 03. Jun. 2004 14:40 <-- editieren / zitieren --> Unities abgeben:
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 03. Jun. 2004 14:46 <-- editieren / zitieren --> Unities abgeben: Nur für Petra_Sp
|
Ex-Mitglied
|
erstellt am: 03. Jun. 2004 15:01 <-- editieren / zitieren -->
Zitat: Original erstellt von CADmium: .. die Spaltet den Path in eine Liste auf(defun PATH->List (PATH / POS LST) [...]
Das geht kürzer: (defun path->list (path) (while (vl-string-search "\\" path) (setq path (vl-string-subst "\" \"" "\\" path)) ) (read (strcat "(\"" path "\")")) ) ... und hier gibt's einen kleinen Fehler - statt (type VERZEICHNISSE) muss da (type ANZAHL) stehen: Zitat: (defun Zchnstr ( ANZAHL / RETURN) (if (=(type VERZEICHNISSE)'INT) (progn (setq RETURN (strcat(getvar "dwgprefix")(getvar "dwgname"))) (setq RETURN (substr RETURN (-(strlen RETURN)Anzahl) (+ Anzahl 1))) ) ) )
Davon abgesehen würde ich die Prüfung der Übergabeparameter immer in die aufrufende Funktion verlegen, um den Code möglichst sauber und redundanzfrei zu halten - d.h. also nur bei den Funktionen prüfen, die der Anwender selbst direkt aufruft. Tom Berger ------------------ Architekturwerkzeuge für AutoCAD: http://www.archtools.de |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 03. Jun. 2004 15:13 <-- editieren / zitieren --> Unities abgeben: Nur für Petra_Sp
na wenn dann so (der Allgemeingültigkeit wegen ) (defun path->list (path) (while (or(vl-string-search "\\" path) (vl-string-search "/" path) ) (setq path (vl-string-subst "\" \"" "\\" path)) (setq path (vl-string-subst "\" \"" "/" path)) ) (read (strcat "(\"" path "\")")) ) da Verzeichnisse in Lisp durch "\\" oder "/" getrennt werden können. Ansonsten muß ich dir rechtgeben. ------------------ - Thomas - [Diese Nachricht wurde von CADmium am 03. Jun. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 03. Jun. 2004 18:16 <-- editieren / zitieren -->
Zitat: Original erstellt von CADmium: na wenn dann so (der Allgemeingültigkeit wegen ) [...] da Verzeichnisse in Lisp durch "\\" oder "/" getrennt werden können.
Wo Du Recht hast, hast Du Recht :-) Und dann wird es natürlich auch Zeit für die allseits beliebte String->LIST Funktion mit beliebigem Trennzeichen: (defun string->list (string separator) (while (vl-string-search separator string) (setq string (vl-string-subst "\" \"" separator string)) ) (read (strcat "(\"" string "\")")) ) Und daraus basteln wir nun die ultimativ "richtige" path->list Funktion: (defun path->list (path) (apply 'apend (mapcar (function (lambda (tok) (string->list tok "/") ) ) (string->list path "\\") ) ) ) Keine Gewähr für Tippfehler. Und für Eleganz sowieso schon mal nicht :-) T:-)m Berger ------------------ Architekturwerkzeuge für AutoCAD: http://www.archtools.de |
Dabrunz Mitglied
Beiträge: 127 Registriert: 28.05.2003
|
erstellt am: 14. Jun. 2004 11:28 <-- editieren / zitieren --> Unities abgeben: Nur für Petra_Sp
Zitat: Und dann wird es natürlich auch Zeit für die allseits beliebte String->LIST Funktion mit beliebigem Trennzeichen:(defun string->list (string separator) (while (vl-string-search separator string) (setq string (vl-string-subst "\" \"" separator string)) ) (read (strcat "(\"" string "\")")) )
Die ist vielleicht allseits beliebt, funktioniert aber nur in einigen Fällen. Versuch's mal mit (string->list(getenv"ACAD")";") - das zeigt ziemlich drastisch, dass mit dem read in diesem Fall kein Blumentopf zu gewinnen ist. Ich würde an dieser Stelle eher folgende Lösung bevorzugen: Code:
(defun string->list (string separator / pos tokenOffset wordList) (setq pos (vl-string-search separator string);** 1.Pos.wo d.Pattern <separator> auftaucht tokenOffset (1+(strlen separator));** Verschiebung im String zum Auffinden des ;** nächsten Tokens (1+ TokenLength) ) (while pos (setq wordList (cons (substr string 1 pos) wordList) string (substr string (+ pos tokenOffset)) pos (vl-string-search separator string) ) ) (reverse (cons string wordList)) )
Achim Dabrunz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 14. Jun. 2004 12:08 <-- editieren / zitieren -->
Zitat: Original erstellt von Dabrunz: Die ist vielleicht allseits beliebt, funktioniert aber nur in einigen Fällen. Versuch's mal mit [b](string->list(getenv"ACAD")";") - das zeigt ziemlich drastisch, dass mit dem read in diesem Fall kein Blumentopf zu gewinnen ist. Achim Dabrunz[/B]
Interessant! Auf dieses Verhalten von READ bin ich in meiner Laufbahn noch nie gestossen. Ich würde das als Bug einordnen. Gruß Tom Berger ------------------ ArchTools: AutoCAD-Werkzeuge für Architektur, Bauplanung und Immobilienverwaltung
- architekturgerechte Bemaßung, beliebige Einheiten, hochgestellte Millimeter, Öffnungsmaße uvm ...
- "doppelt" assoziative Höhenkoten für Schnittdarstellung und Grundriss
- assoziative Flächenermittlung nach DIN 277 und II.BVO
- Textautomatisierung, Plotstempel uvm ...
Hier geht's zum ArchTools Forum, und hier zu weiteren Infos und zur kostenlosen Demoversion |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 14. Jun. 2004 12:15 <-- editieren / zitieren --> Unities abgeben: Nur für Petra_Sp
ist zwar nicht elegant, aber funktioniert dieser string im rtext eingebau, beschneidet den Pfad rechtsbündig auf 20 Zeichen (allerdings nicht beim nächsten \ sondern genau bei 20 Zeichen also meist mitten in einem Verzeichnisnamen) wenn du mehr oder weniger als 20 Zeichen willst, musst halt die 20 zweimal in diesem code auf deine gewünschte länge ändern $(if,$(>,$(strlen,$(getvar,dwgprefix)),20),$(substr,$(getvar,dwgprefix),$(-,$(strlen,$(getvar,dwgprefix)),20)),$(getvar,dwgprefix))$(getvar,dwgname) ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 14. Jun. 2004 14:18 <-- editieren / zitieren -->
Zitat: Original erstellt von Dabrunz: Ich würde an dieser Stelle eher folgende Lösung bevorzugen: [...]
Hallo Achim, da musste ich in meiner Mittagspause natürlich eine etwas LISPischere :-) Lösung finden. Hier ist sie: (defun string->list (string separator / tok result) (setq string (vl-string->list string) separator (vl-string->list separator) ) (while string (if (equal separator (n-car (length separator) string)) (setq result (cons (reverse tok) result) tok nil string (n-cdr (length separator) string) ) (setq tok (cons (car string) tok) string (cdr string) ) ) ) (mapcar 'vl-list->string (reverse result)) ) Die Funktion liesse sich sicherlich noch verbessern. Bis heute abend probiere ich das mal als Rekursion. Es werden zwei Hilfsfunktionen benötigt, die sowieso Bestandteil jeder Funktionsbibliothek sein sollten. Sie machen genau das, was sie sollen, nämlich die n ersten Elemente einer Liste zurück geben bzw eine Liste ohne ihre n ersten Elemente: (defun n-car (n lst / res) (repeat n (setq res (cons (car lst) res) lst (cdr lst) ) ) (reverse res) ) (defun n-cdr (n lst) (repeat n (setq lst (cdr lst)) ) ) Gruß Tom Berger ------------------ ArchTools: AutoCAD-Werkzeuge für Architektur, Bauplanung und Immobilienverwaltung
- architekturgerechte Bemaßung, beliebige Einheiten, hochgestellte Millimeter, Öffnungsmaße uvm ...
- "doppelt" assoziative Höhenkoten für Schnittdarstellung und Grundriss
- assoziative Flächenermittlung nach DIN 277 und II.BVO
- Textautomatisierung, Plotstempel uvm ...
Hier geht's zum ArchTools Forum, und hier zu weiteren Infos und zur kostenlosen Demoversion |
Dabrunz Mitglied
Beiträge: 127 Registriert: 28.05.2003
|
erstellt am: 15. Jun. 2004 11:35 <-- editieren / zitieren --> Unities abgeben: Nur für Petra_Sp
Zitat: Interessant! Auf dieses Verhalten von READ bin ich in meiner Laufbahn noch nie gestossen. Ich würde das als Bug einordnen.
Nein, das würde ich nicht. Ist schon korrektes Verhalten: (read "\\t") -> <TAB> Wird dann eben zur ESCAPE-Sequence und das kann ich schon akzeptieren. Netter Ansatz übrigens mit den ASCII-Code-Listen. Ist ziemlich performant und hat darüber hinaus auch noch den Vorteil, damit Unicode-Dateien parsen zu können - geht mit meiner Lösung definitiv nicht, dafür ist zu stark vl-string-zentriert und da ist Unicode noch immer ein Fremdwort .. Allerdings gibt's dennoch von mir einen Vorschlag für 'ne rekursive Umsetzung des STRING-zentrischen Ansatzes (hat eh nur akademischen Wert und ist übertragbar): Code:
(defun ::string->list (string separator / pos tokenoffset wordlist) (_string->list string separator (1+ (strlen separator))) )(defun _string->list (string separator tokenoffset) ((lambda (pos) (cond (pos (cons (substr string 1 pos) (_string->list (substr string (+ pos tokenoffset)) separator tokenoffset ) ) ) ('else string) ) ) (vl-string-search separator string) ) )
Achim Dabrunz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 15. Jun. 2004 12:20 <-- editieren / zitieren --> Unities abgeben: Nur für Petra_Sp
|
Ex-Mitglied
|
erstellt am: 15. Jun. 2004 12:31 <-- editieren / zitieren -->
Zitat: Original erstellt von Dabrunz: Nein, das würde ich nicht. Ist schon korrektes Verhalten:(read "\\t") -> <TAB> Wird dann eben zur ESCAPE-Sequence und das kann ich schon akzeptieren.
Stimmt, ich stand ein wenig auf dem Schlauch. Der String "a\b" ist ja gar nicht anzeigbar, da muss ja auch das "\" durch ein Escape-Zeichen maskiert werden. Ein "\\" im String wird als "\" angezeigt, und wenn ich eine n String in einen anderen verschachtele, dann benötige ich für die innere Struktur natürlich "\\\\", um bei Auflösung der äusseren Struktur ein "\\" zu erhalten. Richtig lautet der Pfad deshalb: (read "\"C:\\\\Pfad\"") Zitat:
Netter Ansatz übrigens mit den ASCII-Code-Listen. Ist ziemlich performant und hat darüber hinaus auch noch den Vorteil, damit [b]Unicode-Dateien parsen zu können - geht mit meiner Lösung definitiv nicht, dafür ist zu stark vl-string-zentriert und da ist Unicode noch immer ein Fremdwort .. Allerdings gibt's dennoch von mir einen Vorschlag für 'ne rekursive Umsetzung des STRING-zentrischen Ansatzes (hat eh nur akademischen Wert und ist übertragbar): Code:
(defun ::string->list (string separator / pos tokenoffset wordlist) (_string->list string separator (1+ (strlen separator))) )(defun _string->list (string separator tokenoffset) ((lambda (pos) (cond (pos (cons (substr string 1 pos) (_string->list (substr string (+ pos tokenoffset)) separator tokenoffset ) ) ) ('else string) ) ) (vl-string-search separator string) ) )
Achim Dabrunz[/B]
Sehr schön :-) Dein 'else finde ich auch nett und v.a. für BASIC und PASCAL Programmierer recht verständlich, aber Leute, die mit LISP als erster Sprache anfangen, könnten dadurch eher verwirrt werden. Vielleicht sollten wir hier ab und zu kleine LISP-Wettbewerbe austragen, ich jedenfalls hätte sicher Spaß dran. Bewertung der Funktionen erfolgt nach verschiedenen Kriterien: - beste Performance - kürzester Code - eleganteste Lösung Wenn Du eine Idee für eine Aufgabenstellung hast, dann poste die doch mal in einen neuen Thread. Als Titel für's Wiederfinden empfehle ich "LISP Challenge" o.ä. Gruß Tom Berger ------------------ ArchTools: AutoCAD-Werkzeuge für Architektur, Bauplanung und Immobilienverwaltung
- architekturgerechte Bemaßung, beliebige Einheiten, hochgestellte Millimeter, Öffnungsmaße uvm ...
- "doppelt" assoziative Höhenkoten für Schnittdarstellung und Grundriss
- assoziative Flächenermittlung nach DIN 277 und II.BVO
- Textautomatisierung, Plotstempel uvm ...
Hier geht's zum ArchTools Forum, und hier zu weiteren Infos und zur kostenlosen Demoversion |
Petra_Sp Mitglied
Beiträge: 130 Registriert: 28.10.2003 AutoCad 2004 Deutsch AutoCad 2004 Englisch Jetzt auch AutoCad 2006 Deutsch
|
erstellt am: 16. Jun. 2004 10:24 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute Vielen vielen vielen Dank für eure Antworten! Ich hab nur sehr wenig Ahnung von Lisp, drum würde ich noch eure Hilfe und Untestützung brauchen!! 1. Wie kann ich das am besten in meinem Plankopf einbauen der mittels Block einfügen eingesetzt wird! 2. Der User sollte auser das er diesen Kopf einfügt im Prinzip sonst nicht viel machen auser seine Felder (Attripute) ausfüllen. 3. Ist das überhaupt möglich mittels Lisp und so? 4. Wenn ja wie funktioniert das das er mir automatisch den Pfad an eine genau definierte Stelle schreibt und automatisch den Pfad nach einer bestimmten Länge abschneidet. eben z.b.: statt Z:\999999\dwg\01 Zeichnungen\Schalung\Detail\B001-20-5-001-.dwg auf z.b. diese Länge: chnungen\Schalung\Detail\B001-20-5-001-.dwg 5. Ich möchte das der Benutzer überhaupt nichts machen braucht da sonst nur Chaos und Vergessenheit auftetten. 6. Gibt es so etwas überhaupt schon? Bitte Helft mir Danke ------------------ LG Petra Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Petra_Sp Mitglied
Beiträge: 130 Registriert: 28.10.2003 AutoCad 2004 Deutsch AutoCad 2004 Englisch Jetzt auch AutoCad 2006 Deutsch
|
erstellt am: 16. Jun. 2004 10:27 <-- editieren / zitieren --> Unities abgeben:
Hallo fuchsi danke für deine Antwort Was meinst du mit "die 20 zweimal in diesem code auf deine gewünschte länge ändern" Heist das einfsch statt den 20 zweimal auf 40 umändern oder etwas anderes?? LG PEtra ------------------ LG Petra Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 16. Jun. 2004 10:34 <-- editieren / zitieren -->
Zitat: Original erstellt von Petra_Sp: 6. Gibt es so etwas überhaupt schon? [B][QUOTE]Du kannst Dier mal mein Programmn ansehen und darin das Modul DynaText. Das macht sowas automatisch, wobei die Texte auch vollautomatisch bei von Dir definierten Ereignissen aktualisiert werden. Beispielsweise kannst Du für einen Text, der das aktuelle Datum, den Dateinamen und den Pfad enthält, die Aktualisierung "vor dem Plotten" aktivieren, udn dann wird immer vollautomatisch vor dem Plotten der Plotstempel aktualisiert, ohne dass Du Dich drum kümmern musst.
Bitte Helft mir Danke [/B][/QUOTE] Nöö, Deine Wünsche gehen jedenfalls mir bei Weitem zu weit für eine kostenfreie Wunscherfüllung. Tom Berger ------------------ ArchTools: AutoCAD-Werkzeuge für Architektur, Bauplanung und Immobilienverwaltung
- architekturgerechte Bemaßung, beliebige Einheiten, hochgestellte Millimeter, Öffnungsmaße uvm ...
- "doppelt" assoziative Höhenkoten für Schnittdarstellung und Grundriss
- assoziative Flächenermittlung nach DIN 277 und II.BVO
- Textautomatisierung, Plotstempel uvm ...
Hier geht's zum ArchTools Forum, und hier zu weiteren Infos und zur kostenlosen Demoversion |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 16. Jun. 2004 15:05 <-- editieren / zitieren --> Unities abgeben: Nur für Petra_Sp
ja das heisst es: um den Pfad auf 40 Stellen zu beschränken lautet der string so $(if,$(>,$(strlen,$(getvar,dwgprefix)),40),$(substr,$(getvar,dwgprefix),$(-,$(strlen,$(getvar,dwgprefix)),40)),$(getvar,dwgprefix))$(getvar,dwgname) aber Achtung : Es wird NUR der Pfad auf 40 Stellen beschränkt und mit dem DWGNAMEN ergänzt. ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 16. Jun. 2004 15:17 <-- editieren / zitieren --> Unities abgeben: Nur für Petra_Sp
Z:\999999\dwg\01 Zeichnungen\Schalung\Detail\B001-20-5-001-.dwg soll ergeben chnungen\Schalung\Detail\B001-20-5-001-.dwg hab dir den Diesel-Ausdruck so umgebaut , dass das jetzt so rauskommt, d.h. auch die länge des Dateinamens (und nicht nur des pfades) wird jetzt berücksichtigt $(if,$(>,$(strlen,$(getvar,dwgprefix)$(getvar,dwgname)),40),$(substr,$(getvar,dwgprefix)$(getvar,dwgname),$(-,$(strlen,$(getvar,dwgprefix)$(getvar,dwgname)),40)),$(getvar,dwgpre fix)$(getvar,dwgname)) ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Petra_Sp Mitglied
Beiträge: 130 Registriert: 28.10.2003 AutoCad 2004 Deutsch AutoCad 2004 Englisch Jetzt auch AutoCad 2006 Deutsch
|
erstellt am: 16. Jun. 2004 15:32 <-- editieren / zitieren --> Unities abgeben:
|
Petra_Sp Mitglied
Beiträge: 130 Registriert: 28.10.2003 AutoCad 2004 Deutsch AutoCad 2004 Englisch Jetzt auch AutoCad 2006 Deutsch
|
erstellt am: 17. Jun. 2004 09:15 <-- editieren / zitieren --> Unities abgeben:
Hallo Fuchsi Danke nochmal, hat prima Funktioniert. Du hast mir sehr damit geholfen!! Eine Frag noch an alle: Kann ich mir aus einem Dateinamen z.b. Detail\B001-20-5-001-.dwg einen ganz bestimmete Position z.b. den 1 er (6. Position von rechts) rausfiltern und in meinen Plankopf automatisch auf eine bestimmte Position eintragen-verwenden? Ist das möglich?? Oder der umgekehrte Weg wäre auch nicht schlecht. Ich habe z.b. in meinem Plankopf Attripute wie Art (4), Plannr. (001) und Index (-). Diese sollen dann beim Abspeichern automatisch der abzuspeichernde Name ergebenergeben. z.b 4001-.dwg So das ich beim speichern gar nicht mehr überlegen muß wie die Zeichnung heißt. Ich kann mir denken das so was ganz schön eitaufwändig zum Programmieren? Aber vielleicht kann mir ja jemand weiterhelfen oder einen Ansatz geben als Lisp-Neuling?! Danke LG Petra ------------------ LG Petra Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 17. Jun. 2004 12:02 <-- editieren / zitieren -->
Zitat: Original erstellt von Petra_Sp: Ich kann mir denken das so was ganz schön eitaufwändig zum Programmieren? Aber vielleicht kann mir ja jemand weiterhelfen oder einen Ansatz geben als Lisp-Neuling?!
Solche Funktionen sind schon Bestandteil der Standardfunktionen jedes LISP Interpreters. Schau einfach mal in Deiner VisualLISP Online-Hilfe nach SUBSTR und STRCAT Tom Berger ------------------ ArchTools: AutoCAD-Werkzeuge für Architektur, Bauplanung und Immobilienverwaltung
- architekturgerechte Bemaßung, beliebige Einheiten, hochgestellte Millimeter, Öffnungsmaße uvm ...
- "doppelt" assoziative Höhenkoten für Schnittdarstellung und Grundriss
- assoziative Flächenermittlung nach DIN 277 und II.BVO
- Textautomatisierung, Plotstempel uvm ...
Hier geht's zum ArchTools Forum, und hier zu weiteren Infos und zur kostenlosen Demoversion |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 17. Jun. 2004 13:41 <-- editieren / zitieren --> Unities abgeben: Nur für Petra_Sp
Kann ich mir aus einem Dateinamen z.b. Detail\B001-20-5-001-.dwg einen ganz bestimmete Position z.b. den 1 er (6. Position von rechts) rausfiltern und in meinen Plankopf automatisch auf eine bestimmte Position eintragen-verwenden? Ist das möglich?? würd ich im Zeichnungskopf auch mit nem rtext machen $(substr,$(getvar,dwgname),$(-,$(strlen,$(getvar,dwgname)),5),1)
das filtert genau das 6. Zeichen von rechts, 1 Stelle lang heraus. brauchst du jedoch , die Zeichen von Links, z.B.: das 001 dann schaut der Diesel-Ausdruck so aus $(substr,$(getvar,dwgname),2,3) das 2,3 sagt aus, nimm AB dem 2. Zeichen die nächsten 3 Zeichen Wüdest du nur das B benötigen braucht du ab dem 1. Zeichen 1 Zeichen lang also $(substr,$(getvar,dwgname),1,1) ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|