| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | |  | VOM SUCHEN UND FINDEN, eine Pressemitteilung
|
Autor
|
Thema: Dateipfad aufspalten (1525 / mal gelesen)
|
xxxmurdockxxx Mitglied techn. Zeichner

 Beiträge: 52 Registriert: 18.12.2007 WIN10, Civil 3D 2017 SP1.1
|
erstellt am: 05. Okt. 2018 12:09 <-- editieren / zitieren --> Unities abgeben:         
Hallo Zusammen, ich habe folgende Situation: Dateipfad: L:\AAAA-BBBBBB_CCCCCC\DDDDDD\04-CAD\EEEEEE A besteht aus Zahlen und hat immer 4 Stellen B, C, D und E sind in der Länge variabel. Nun möchte ich gerne im Plankopf den Pfad + Dateiname automatisch stehen haben. Bisher habe ich das relativ einfach über ein Schriftfeld mit DIESEL-Ausdruck gelöst. Zitat: $(substr,$(getvar,dwgprefix),1,8) ... $(substr,$(getvar,dwgprefix),$(-,$(strlen,$(getvar,dwgprefix)),30),31)$(getvar,dwgname)
Da sich allerdings unsere interne Ablagestruktur geändert hat ist es meist nicht möglich den gesamten Dateipfad im Plankopf darzustellen.
Ist es machbar den Pfad an einem bestimmten Zeichen zu teilen? Teil 1: L:\AAAA (kein Problem) Teil 2: DDDDDD\04-CAD\EEEEEE Teil 3: Dateiname (kein Problem) ------------------ Viele Grüße Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
       

 Beiträge: 22497 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 05. Okt. 2018 12:17 <-- editieren / zitieren --> Unities abgeben:          Nur für xxxmurdockxxx
Ich würde sagen Nein, aber es wäre doch sicher auch eine Lösung mit einer variablen Anzeige zu arbeiten: Wenn Pfad+Dateiname kürzer wie nnnn, dann komplett, ansonsten Ersten 6 Zeichen + "..." Letzten n Zeichen des Pfades + Dateiname Dafür hast du dann auch bereits alle nötige "Technik" in deinem aktuellen Diesel-Beispiel. L:\AAAA-BBBBBB_CCCCCC\DDDDDD\04-CAD\EEEEEE\MyFile.dwg L:\AAAA-...CCCCCCCCCC\DDDDDD\04-CAD\EEEEEE\MyFile.dwg oder so ähnlich
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
xxxmurdockxxx Mitglied techn. Zeichner

 Beiträge: 52 Registriert: 18.12.2007 WIN10, Civil 3D 2017 SP1.1
|
erstellt am: 05. Okt. 2018 12:24 <-- editieren / zitieren --> Unities abgeben:         
|
xxxmurdockxxx Mitglied techn. Zeichner

 Beiträge: 52 Registriert: 18.12.2007 WIN10, Civil 3D 2017 SP1.1
|
erstellt am: 11. Okt. 2018 18:37 <-- editieren / zitieren --> Unities abgeben:         
So, irgendwie steh ich grad auf dem Schlauch, da ich mit DIESEL nicht so vertraut bin. Ich hab nun folgenden Ausdruck der funktioniert:
Code: $(if, $(>,$(strlen,$(getvar,dwgprefix)),80),$(substr,$(getvar,dwgprefix),1,7) ... $(substr,$(getvar,dwgprefix),$(-,$(strlen,$(getvar,dwgprefix)),49),50)$(getvar,dwgname) , $(getvar,dwgprefix)$(getvar,dwgname))
Da leider der Dateiname in der Länge sehr variieren kann möchte ich gerne die Anzahl der Zeichen aus dem Dateinamen mit in die IF Anweisung reinnehmen.
Mit folgendem Ausdruck bekomme ich die Gesamtanzahl der Zeichen aus Pfad und Dateiname (klappt auch soweit):
Code: $(+,$(strlen,$(getvar,dwgname)),$(strlen,$(getvar,dwgprefix)))
Wenn ich den Ausdruck nun aber in den oberen integriere klappt es nicht: Code: $(if, $(>,$(+,$(strlen,$(getvar,dwgname)),$(strlen,$(getvar,dwgprefix))),80),$(substr,$(getvar,dwgprefix),1,7) ... $(substr,$(getvar,dwgprefix),$(-,$(strlen,$(getvar,dwgprefix)),49),50)$(getvar,dwgname) , $(getvar,dwgprefix)$(getvar,dwgname))
Wo könnte der Fehler liegen? ------------------ Viele Grüße Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
       

 Beiträge: 22497 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 11. Okt. 2018 19:53 <-- editieren / zitieren --> Unities abgeben:          Nur für xxxmurdockxxx
Ich sitze hier am 5" Bildschirm, aber funktioniert der Versuch überhaupt in irgendeiner Art und Weise? ₩₩₩₩₩₩ $(if, BEDINGUNG $(>, $(+ ,$(strlen,$(getvar,dwgname)) ,$(strlen,$(getvar,dwgprefix)) ), 80 ) DANN ,$(substr,$(getvar,dwgprefix),1,7) ... $(substr,$(getvar,dwgprefix), ANSONSTEN $(-,$(strlen,$(getvar,dwgprefix)),49),50)$(getvar,dwgname) , HUCH??? $(getvar,dwgprefix)$(getvar,dwgname) ) Aber wie angedeutet, ich kann am Smartphone leicht etwas falsch gemacht/übersehen haben bei so vielen Klammern. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
xxxmurdockxxx Mitglied techn. Zeichner

 Beiträge: 52 Registriert: 18.12.2007 WIN10, Civil 3D 2017 SP1.1
|
erstellt am: 12. Okt. 2018 09:48 <-- editieren / zitieren --> Unities abgeben:         
bin dem Fehler etwas Näher gekommen Was ja tadellos funktioniert ist der Ausdruck: IF "Pfad" > "X", DANN "gekürzter Pfad", SONST "Pfad+Dateiname" $(if, $(>,$(strlen,$(getvar,dwgprefix)),70),$(substr,$(getvar,dwgprefix),1,7) ... $(substr,$(getvar,dwgprefix),$(-,$(strlen,$(getvar,dwgprefix)),49),50)$(getvar,dwgname) , $(getvar,dwgprefix)$(getvar,dwgname)) Der gekürzte Pfad besteht aus einer Kombination: $(substr,$(getvar,dwgprefix),1,7) ... $(substr,$(getvar,dwgprefix),$(-,$(strlen,$(getvar,dwgprefix)),49),50)$(getvar,dwgname)
Ersten 7 Zeichen des Pfades: $(substr,$(getvar,dwgprefix),1,7) 3 Punkte: ... Die 50 letzten Zeichen des Pfades: $(substr,$(getvar,dwgprefix),$(-,$(strlen,$(getvar,dwgprefix)),49),50) Dateiname: $(getvar,dwgname) Wenn ich nun die Zeichen von Pfad+Dateiname zusammenzähle funktioniert es z.B. mit folgendem Ausdruck: $(if, $(>,$(+,$(strlen,$(getvar,dwgname)),$(strlen,$(getvar,dwgprefix))),90), $(substr,$(getvar,dwgprefix),1,7) ... $(getvar,dwgname), $(getvar,dwgprefix)$(getvar,dwgname)) Aber sobald ich zusätzlich noch den Ausdruck der letzten 50 Zeichen hinzufüge ignoriert er das völlig.. $(if, $(>,$(+,$(strlen,$(getvar,dwgname)),$(strlen,$(getvar,dwgprefix))),90), $(substr,$(getvar,dwgprefix),1,7) ... $(substr,$(getvar,dwgprefix),$(-,$(strlen,$(getvar,dwgprefix)),49),50)$(getvar,dwgname), $(getvar,dwgprefix)$(getvar,dwgname)) Scheinbar liegt das irgendwie an der Mehrfachverwendung. Wenn ich z.B. den Ausdruck (ersten 7 Zeichen) rauslösche, dann nimmt er die 50 letzten Zeichen. Mein Latein bzw. DIESEL ist am Ende. ------------------ Viele Grüße Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
       

 Beiträge: 22497 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 12. Okt. 2018 10:07 <-- editieren / zitieren --> Unities abgeben:          Nur für xxxmurdockxxx
|
cadffm Moderator 良い精神
       

 Beiträge: 22497 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 12. Okt. 2018 10:49 <-- editieren / zitieren --> Unities abgeben:          Nur für xxxmurdockxxx
So, zurück am Rechner nachgesehen: Du hast die ~240 Zeichengrenze mit dem Makro Diesel-Ausdruck geknackt, daher funktioniert es nicht. ~240 weil es evtl. unterschiedlich ist wenn ich mich recht erinnere. 237 Zeichen funktionieren aber recht sicher "immer". Das Makro ist also gut und richtig (da habe ich mich wohl verlesen auf dem Smartphone), aber der Dieselausdruck ist zu lang. Entfernst du die drei "..." einfach mal dann wirst du sehen: Funktioniert wie gewünscht. Zum Glück warst du verschwenderisch mit den Leerzeichen und wenn du diese entfernst dann passt es insgesamt wieder. $(if,$(>,$(+,$(strlen,$(getvar,dwgname)),$(strlen,$(getvar,dwgprefix))),90),$(substr,$(getvar,dwgprefix),1,7)...$(substr,$(getvar,dwgprefix),$(-,$(strlen,$(getvar,dwgprefix)),49),50)$(getvar,dwgname),$(getvar,dwgprefix)$(getvar,dwgname)) (237 Zeichen) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
xxxmurdockxxx Mitglied techn. Zeichner

 Beiträge: 52 Registriert: 18.12.2007 WIN10, Civil 3D 2017 SP1.1
|
erstellt am: 12. Okt. 2018 10:50 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Original erstellt von cadffm:
Warum hast du deinen ersten Text gelöscht? Da ist keine unnötige Bedingung in der IF... $(if, expr, dotrue [, dofalse]) expr $(>,$(+,$(strlen,$(getvar,dwgname)),$(strlen,$(getvar,dwgprefix))),90) dotrue $(substr,$(getvar,dwgprefix),1,7) ... $(substr,$(getvar,dwgprefix),$(-,$(strlen,$(getvar,dwgprefix)),49),50) dofalse $(getvar,dwgprefix)$(getvar,dwgname) Das Komma, dass du als dofalse interpretiert ist ja innerhalb der $(substr, string, start [, length]), sonst würde mein Ausdruck auch nicht funktionieren wenn ich den ersten Teil vor den ... lösche. Aber da klappt es ja.
------------------ Viele Grüße Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
xxxmurdockxxx Mitglied techn. Zeichner

 Beiträge: 52 Registriert: 18.12.2007 WIN10, Civil 3D 2017 SP1.1
|
erstellt am: 12. Okt. 2018 10:54 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Original erstellt von cadffm: So, zurück am Rechner nachgesehen: Du hast die ~240 Zeichengrenze mit dem Makro geknackt, daher funktioniert es nicht. ~240 weil es evtl. unterschiedlich ist wenn ich mich recht erinnere. 237 Zeichen funktionieren aber recht sicher "immer".Das Makro ist also gut und richtig (da habe ich mich wohl verlsen auf dem Smartphone), aber der Dieselausdruck ist zu lang. Entfernst du die drei "..." einfach mal dann wirst du sehen: Funktioniert wie gewünscht. Zum Glück warst du verschwenderisch mit den Leerzeichen und wenn du diese entfernst dann passt es insgesamt wieder. $(if,$(>,$(+,$(strlen,$(getvar,dwgname)),$(strlen,$(getvar,dwgprefix))),90),$(substr,$(getvar,dwgprefix),1,7)...$(substr,$(getvar,dwgprefix),$(-,$(strlen,$(getvar,dwgprefix)),49),50)$(getvar,dwgname),$(getvar,dwgprefix)$(getvar,dwgname)) (237 Zeichen)
Super... DANKE Da hätte ich ja lange rumprobieren können.
------------------ Viele Grüße Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
       

 Beiträge: 22497 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 12. Okt. 2018 11:06 <-- editieren / zitieren --> Unities abgeben:          Nur für xxxmurdockxxx
(das mit dem Text löschen hat den gleichen Grund wie die gestrige Antwort: Weil du nicht auf meine Vermutung eingegangen warst hat es sich für mich heute morgen auf 5" noch immer so dargestellt als wäre was falsch)Zurück am Rechner hat es aber gleich gepasst (sorry, ist halt schwierig mit so Klammerausdrücken auf dem dummphone). Also wer das Leben am Limit nicht so mag: Erstelle zwei Dieselausdrücke, für jeden der beiden Fälle einen. (if >90 DANN *ansonsten nichts*)(if <91 DANN *ansonsten nichts*) Code: $(if, $(>,$(+,$(strlen,$(getvar,dwgname)),$(strlen,$(getvar,dwgprefix))),90), $(substr,$(getvar,dwgprefix),1,7) ... $(substr,$(getvar,dwgprefix),$(-,$(strlen,$(getvar,dwgprefix)),49),50)$(getvar,dwgname),)$(if, $(<,$(+,$(strlen,$(getvar,dwgname)),$(strlen,$(getvar,dwgprefix))),91), $(getvar,dwgprefix)$(getvar,dwgname),)
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |