Autor
|
Thema: CAD Daten aus txt-Datei durchsuchen (2639 mal gelesen)
|
Ex-Mitglied
|
erstellt am: 24. Aug. 2010 08:49 <-- editieren / zitieren -->
Hallo, ich versuche momentan mittels Makro mit einer gegebenen Textdatei (die die Bezeichnung von CAD Daten enthält) einliest. Die Textdatei ist wie folgt aufgebaut: xxx Bezeichnung-Komponente1 xyz xxx Bezeichnung-Komponente2 xyz Der Speicherort der CAD Daten liegt auf D:\CATIAdaten Nun möchte ich die Komponenten in CATIA nacheinander einlesen. Gibt es die Möglichkeit eines Makros, dass zunächst die CAD Komponentenbezeichnung der txt Datei einliest und anschließend die Komponente auf meinem Laufwerk D durchsucht und in CATIA lädt? |
DanielFr. Moderator Manager
Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 24. Aug. 2010 08:56 <-- editieren / zitieren --> Unities abgeben:
Hallo , sind in deiner *.txt Datei nur die Komponentennamen gespeichert oder ist dort auch der Dateipfad samt Name angegeben. Ist nur der Komponentenname gespeichert dann wird es extrem schwer bzw. es dauert sehr lange. Hier würde ich nur die Möglichkeit sehen zuerst die *.txt Datei auszulesen (die Strings in einen Collection zu schieben) und anschließend jedes Bauteil eines gegebenen Ordners zu lesen (mittels "read"). Dann kommst du auch an den ComponenteName ran und kannst diesen mit der Liste vergleichen (ggf. über einen BubbleSort). Das Ganze muss dann wieder in ein sortiertes Array und dann kannst du alle Bauteile nacheinander einfügen. Das Problem ist hierbei das es sehr zeitaufwendig ist, da CATIA zum lesen des Komponentennamens die Datei zu mindestens lesen muss. ------------------ MFG Daniel Systeminformation | Inoffizielle CATIA Hilfeseite | CATIA FAQ | Suche | TraceParts (Normteile...) | 3D Content Central (noch mehr Normteile...) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 24. Aug. 2010 09:02 <-- editieren / zitieren -->
Hallo Daniel, leider ist in meiner txt Datei nur der Komponentenname enthalten. Idealerweise soll das Makro dann den Speicherort der CAD Komponenten auf meinem Laufwerk D durchsuchen (ist natürlich sehr zeitaufwendig) Leider weiß ich momentan nicht, wie ich den Komponentennamen einlesen und dann auf meinem D Laufwerk suchen kann. Mit einer Excel Tabelle ist das natürlich einfacher, soll aber in diesem Fall mit einer txt Datei erfolgen... |
Ex-Mitglied
|
erstellt am: 24. Aug. 2010 16:50 <-- editieren / zitieren -->
Hallo Daniel, das hört sich gut an, nur weiß ich ehrlich gesagt nicht wie ich das umsetzen soll. Hast du evtl. eine Vorlage oder ein Beispiel an dem ich das nachvollziehen kann? Ich weiß beispielsweise nicht, wie ich die eingelesene Bauteil- bzw. Komponentenbezeichnung aus meiner Excel Tabelle --> WS.Cells(nRow, 2).Text) so einbauen kann, dass CATIA unter meinem Speicherpfad D.? nach dieser Bezeichnung sucht und die Komponente anschließend lädt. Vielleicht kannst du mir ja weiterhelfen... |
Ex-Mitglied
|
erstellt am: 24. Aug. 2010 16:52 <-- editieren / zitieren -->
...zur Einfachheit halber kann auch von einer Excel Tabelle ausgegangen werden, falls das Dateneinlesen einer txt Datei um einiges schwieriger ist als mit einer Excel Datei |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 24. Aug. 2010 17:05 <-- editieren / zitieren --> Unities abgeben:
Hallo NewCADuser, ich habe deine Beiträge auch verfolgt und vorallem gemerkt, dass du etliche Beiträge zum gleichen Thema aufmachst. Meiner Meinung nach ist dies hier kein Schulungsforum, in dem man sich austoben kann... Du hast hier auf die Frage "Wie lese ich eine Datei aus" die Antwort schon erhalten. Wir können dir nicht zu allem etwas programmieren und oder vll. sogar schon genau das für dich schreiben was du brauchst. Wir helfen dir gerne, aber mach dich am besten erstmal überhaupt mit der Programmierung vertraut. Bei Hilfestellungen kannst du dich dann gerne wieder an uns wenden. Ich für meinen Teil antworte in jedem Fall nicht mehr auf so dürftige Problemstellungen, die dann doch sehr viel Arbeit und Code mit sich bringen. Wenn du das geschriebene nicht verstehst, dann nim den Befehl, gehe auf Google.de und suche nach dem Befehl und VBA (Beispiel: FileSystemObject CATIA VBA) Da findest du genügend Beispiele. Wenn dir diese nicht weiterhelfen, dann kannst du dich ebenfalls gerne wieder an uns wenden, aber bitte mach es dir nicht so einfach! Das bringt dich nicht weiter und uns an den Rand der... Außerdem öffne nicht zig Threads zum gleichen Thema, sondern mach dir erst Gedanken, was du willst, dann probiere es selbst und such dich durch. Wenn du dann irgendwo nicht weiter kommst, dann poste den Teil des Codes und frag explizit nachdem, was dir fehlt! In nur einem einzigen deiner Threads steht ein Code drin und der scheint mir via Makrorecorder aufgenommen. Du kannst auch erstmal mit VB.Net oder VB6 anfangen, denn dazu gibt es etliche kostenlose Onlinebüche wie z.B. Galileo Computing. BTW alternativ gibt es für der artige Aufgaben auch Dienstleister! ------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities [Diese Nachricht wurde von RSchulz am 24. Aug. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DanielFr. Moderator Manager
Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 24. Aug. 2010 17:07 <-- editieren / zitieren --> Unities abgeben:
Hallo, das Problem an dieser Sache ist as du ÜBERHAUPT nicht dateibasiert nach diesen Dateien suchen kannst. Die Keykriterien zum Suchen nach Dateien sind: 1. Dateipfad (der wird vom Anwender gegeben) 2. Dateiname (den weißt du nicht da es keine direkte Zuordnung zwischen dem Komponentennamen und dem physikalischen Dateinamen gibt) Das heißt das du jede Datei eines ausgewählten Ordners (z.B. "D:\Test") lesen (CATIA.Documents.Read) musst um dann an diesem Objekt den Komponentennamen abzufragen. Das ist aber sehr zeitaufwendig da du ja jedes Dokument in CATIA lesen musst [EDIT]Was ist für dich eigentlich der Komponentenname? Ist das der "Instance name" welcher nur innerhalb eines Produktes existiert oder ist das für die die "Nomenclature" des Bauteils welche innerhalb des Bauteils gespeichert wird?[/EDIT}] ------------------ MFG Daniel Systeminformation | Inoffizielle CATIA Hilfeseite | CATIA FAQ | Suche | TraceParts (Normteile...) | 3D Content Central (noch mehr Normteile...) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 25. Aug. 2010 07:53 <-- editieren / zitieren -->
Hallo Daniel, ich meine mit meiner Komponentenbezeichnung die "Nomenclature" des Bauteils innerhalb des Bauteils. In meiner Liste taucht beispielsweise die Bezeichnung testkomponente auf, die irgendwo auf meinem D Laufwerk als testkomponente.CATPart abgespeichert ist. Wenn ich den Pfad direkt angebe D:testkomponente.CATPart ist das laden der Komponente wie du ja bereits geschrieben hast überhaupt kein Problem. Wenn es jedoch ein .CATProduct ist oder sich die Komponente in einem Unterordner befindet komme ich hier nicht heran. Angenommen die Komponenten würden sich alle direkt auf D: und nicht in einem Unterordner befinden, was müsste dann in meiner Klammer stehen? hier kommt ja am Ende des Befehls ....Item("D:\testkomponente.CATPart") Besteht hier evtl. die Möglichkeit, statt den kompletten Pfad anzugeben, in der Klammer eine Variable für die Komponentenbezeichnung reinzuschreiben? z.B. ...Item(D:\(componentname).CATPart) |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 25. Aug. 2010 08:10 <-- editieren / zitieren --> Unities abgeben:
Servus Setzt den Pfad doch einfach zusammen: Code: FileName = "D:\" & WS.Cells(nRow, 2).Text) & ".CATPart
Und dann den FileName zum einfügen in eine Baugruppe verwenden.Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 25. Aug. 2010 08:32 <-- editieren / zitieren -->
Ok danke, funktioniert! |
Ex-Mitglied
|
erstellt am: 25. Aug. 2010 08:35 <-- editieren / zitieren -->
Hallo Bernd, gibt es als Zusatz in deinem Quellcode auch die Möglichkeit, dass am Ende statt .CATPart auch .CATProduct möglich ist über einen or Befehl o.ä.? |
Ex-Mitglied
|
erstellt am: 25. Aug. 2010 11:27 <-- editieren / zitieren -->
.... also bei dem Beispiel FileName = "D:\" & WS.Cells(nRow, 2).Text) & ".CATPart oder ".CATProduct" kann ich das oder mit einem Programmiertechnisch sauberen Befehl ausdrücken oder kann ich dies überhaupt nicht abfragen? |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 25. Aug. 2010 11:28 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 25. Aug. 2010 11:36 <-- editieren / zitieren -->
Hallo Rick, ich habe vor, die Komponente unter meinem Laufwerk zu laden. Da ich anhand der Komponentenbezeichnung nicht weiß, ob es sich hierbei um ein CATPart oder um ein CATProduct handelt, soll eine entsprechende Abfrage getätigt werden. |
Ex-Mitglied
|
erstellt am: 25. Aug. 2010 11:49 <-- editieren / zitieren -->
...Problem ist nur, wie ich die Schleife in meinen Quellcode einbaue: Do --> Hier sollte die Schleife rein Zähler +1 Loop While(...) End if |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 25. Aug. 2010 12:52 <-- editieren / zitieren --> Unities abgeben:
Servus Du solltest dir mal überlegen wie du dein makro strukurien willst. Mit der Angabe der Schleife können wir nichts anfangen. Zum Testen ob es sich um ein Part oder ein Product handelt könntest du die VB-Funktion Dir (siehe zB hier) verwenden. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tberger Mitglied Application Manager CATIA V5 / V6
Beiträge: 1385 Registriert: 13.01.2007 WIN 7 64bit V5R21SP3HF49 3DX/V6 R2016x
|
erstellt am: 25. Aug. 2010 14:01 <-- editieren / zitieren --> Unities abgeben:
Damit solltest du herausbekommen, ob dein Dokument ein Product oder Part ist und was du dann machen lässt: Dim productDocument1 As Document Set productDocument1 = CATIA.ActiveDocument ' oder hier eine Zuordnung aus einer rekursiven Schleife mit .. .Item(i) usw. If TypeName(productDocument1) = "ProductDocument" Then ' ... End If If TypeName(productDocument1) = "PartDocument" Then
' ... End If ------------------ Grüße aus dem Thurgau Thomas +++++++++++++++++++++++++++++++++ CATIA - eine Laune der Natur ... "Phase 2 in CATIA V5" - www.tobeplus.de tberger@tobeplus.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Peter873 Mitglied
Beiträge: 35 Registriert: 26.08.2010
|
erstellt am: 01. Sep. 2010 10:08 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich möchte entweder ein Part oder ein Product öffnen. Nur weiß ich momentan aus meiner importierten Bauteilliste nicht, ob es sich hierbei um ein Part oder um ein Product handelt. Daher soll der Dateipfad durchsucht werden. If FileName = "D:\" & WS.Cells(nRow, 2).Text) & ".CATPart" --> Komponente laden elseif FileName = "D:\" & WS.Cells(nRow, 2).Text) & ".CATProduct" --> Komponente laden else msgbox("Filename konnte nicht zugeordnet werden") endif gibt es einen Befehl, der sich mit einer if Schleife kombinieren lässt und nach diesem Pfad sucht? AddFile funktioniert nicht mit einer If Bedingung... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 01. Sep. 2010 10:19 <-- editieren / zitieren --> Unities abgeben:
Servus Also für jede Datei den Pfad mit Unterordnern zu durchsuchen ist ggf etwas langsam. Kannst du die Dateien nicht alle in ein Verzeichnis packen? Ggf könntest du auch den Inhalt der Verzeichnisse rekursiv in eine Txt-Datei einlesen (also kompletter Pfad der CATParts und CATProducts). Diese könntest du dann später beim einfügen Verwenden um den Pfad schnell aus zulesen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Peter873 Mitglied
Beiträge: 35 Registriert: 26.08.2010
|
erstellt am: 01. Sep. 2010 10:35 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, ich habe jetzt mal alle Komponenten in ein Verzeichnis kopiert. Jetzt weiß ich allerdings nicht genau, wie ich die Abfrage gestalten soll. Catia soll ja auf meinem Laufwerk D: nach der Komponente suchen. Entweder liegt diese als CATPart oder als CADProduct vor. Wie lautet dann die if Bedingung? If [Bedingung] meine andere Frage. Wie kann ich auch (mehrere) Unterordner in meinem Laufwerk durchsuchen? Ohne diese jedesmals in einem Pfad anzugeben? Ideal wäre, wenn er das komplette Laufwerk durchsucht.: "D:\" & WS.Cells(nRow, 2).Text) & ".CATPart"
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 01. Sep. 2010 12:40 <-- editieren / zitieren --> Unities abgeben:
Servus Das könnte über diese Funktion gehen. Funktion ans Ende (nicht in die Sub) deines Makros packen und zB so aufrufen (ungetestet): Code: Dateiname_ohne_Erweiterung = "D:\" & WS.Cells(nRow, 2).Textif FileExists (Dateiname_ohne_Erweiterung & ".CATPart") = true then **tu was else if FileExists (Dateiname_ohne_Erweiterung & ".CATProduct") = true **tu was anderes else MsgBox "Datei nicht gefunden" end if
Gruß Bernd PS: Bei Allgemeinen Dingen könntest du auch mal die Suchmaschine deines Vertrauens verwenden ------------------ Warum einfach, wenn es auch kompliziert geht. [Diese Nachricht wurde von bgrittmann am 01. Sep. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Peter873 Mitglied
Beiträge: 35 Registriert: 26.08.2010
|
erstellt am: 01. Sep. 2010 13:27 <-- editieren / zitieren --> Unities abgeben:
|