| |
| KISTERS 3DViewStation mit neuer Zerschneidefunktionen und erweitertem PMI-Support, eine Pressemitteilung
|
Autor
|
Thema: TXT-Datei in Textfeld laden (7003 mal gelesen)
|
AndreeX00X Mitglied Ingenieur
Beiträge: 48 Registriert: 14.08.2007 CATIA V5 R16
|
erstellt am: 05. Okt. 2007 23:15 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich möchte ein Makro mit VBA in CATIA erstellen, welches, wenn es aktiviert wird, eine TXT-Datei einlesen soll, die der User im "Datei öffnen"-Fenster aufruft. Dazu habe ich bei Formulare ein Objekt erzeugt, welches ein Textfeld enthält, siehe Bild. Der Code dazu sieht so aus: Code:
Private Sub cmdSchliessen_Click() End End SubPrivate Sub UserForm_Activate() txtPositionen = FilePath End Sub
Bei Module sieht der Code zur Zeit noch so aus: Code:
Option ExplicitSub CATMain() DateiOeffnen UserPosition.Show 0 End Sub Sub DateiOeffnen() Dim FilePath As String FilePath = CATIA.FileSelectionBox("Select a text file", "*.txt", CatFileSelectionModeOpen) ' CATIA.SystemServices.Print "The selected file is " & FilePath End Sub
Eigentlich habe ich mir gedacht, dass der Inhalt der TXT-Datei in das Textfeld kopiert wird, aber das hat so nicht ganz hingehauen. Ich habe auch schon in mein VBA-Buch geschaut, aber da finde ich auch nichts drin. Kann mir hier vielleicht jemand helfen? ------------------ Gruß AndreeX00X Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lusilnie Mitglied
Beiträge: 1486 Registriert: 13.07.2005
|
erstellt am: 06. Okt. 2007 17:48 <-- editieren / zitieren --> Unities abgeben: Nur für AndreeX00X
Hallo AndreeX00X, ich kenne mich zwar nicht mit UserForm's aus, doch um "txtPositionen" mit dem Text aus der Textdatei zu füllen, sollte die Zeile wahrscheinlich so lauten: Code: txtPositionen = CATIA.FileSystem.GetFile(FilePath).OpenAsTextStream("ForReading")
mfg, Lusilnie
------------------
Alle Aussagen zu DassaultSystemes-Produkten sind sehr optimistisch, selbst diese!!! frei nach größeren Geistern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndreeX00X Mitglied Ingenieur
Beiträge: 48 Registriert: 14.08.2007 CATIA V5 R16
|
erstellt am: 06. Okt. 2007 18:28 <-- editieren / zitieren --> Unities abgeben:
Hallo Lusilnie, Danke erstmal für die schnelle Antwort. Wenn ich das Makro mit dieser Zeile abfaufen lasse, dann wird mir ein Fehler angezeigt, in dem steht: Fehler beim Kompilieren: Argumenttyp ByRef unverträglich und es wird das Wort "FilePath" in dieser Zeile markiert. In habe auch noch mal ein wenig im Forum rumgesucht und habe etwas ähnliches gefunden. Code:
Const cDateiPfad = "F:\Testobjekt\test.txt" Const cUmgerechnetPfad = "C:\Makroverzeichnis1\Umgerechnet_01.txt"Dim Datei As File Set Datei = CATIA.FileSystem.GetFile(cDateiPfad) Dim DStrom As TextStream Set DStrom = Datei.OpenAsTextStream("ForReading") Do While Not (DStrom.AtEndOfStream) Dim Zeile 'As CATBSTR Zeile = DStrom.ReadLine MsgBox (Zeile) Loop DStrom.Close
Dieses Makro ist ein CATScript und gibt jeweils in einer MsgBox die Zeile aus der TXT Datei aus. Ich habe das mal versucht mit ins VBA bei "DateiOeffnen" zu setzten, jedoch passiert da auch nicht das, wie es sein soll. Vielleicht siehst du ja den Fehler. ------------------ Gruß AndreeX00X Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 06. Okt. 2007 22:25 <-- editieren / zitieren --> Unities abgeben: Nur für AndreeX00X
Servus Ich hätte da eine Idee: Du könntest ja die Textdatei Zeilenweise auslesen, und diese dann zusammensetzen.
Code: Dim Datei As File Set Datei = CATIA.FileSystem.GetFile(D:\test\text.txt) Dim Text_St As TextStream Set Text_St = Datei.OpenAsTextStream("ForReading") Dim Test as StringDo While Not (Text_St.AtEndOfStream) Text = Text & Chr(10) & Text_St.ReadLine Loop
Gruß Bernd------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndreeX00X Mitglied Ingenieur
Beiträge: 48 Registriert: 14.08.2007 CATIA V5 R16
|
erstellt am: 08. Okt. 2007 12:36 <-- editieren / zitieren --> Unities abgeben:
Hallo bgrittmann, deine Idee ist schon ganz gut. Im CATScript funktioniert es auch so wie es sein soll. Das blöde ist nur, dass man die MsgBox mit den Infos erst wieder schließen muss, um in CATIA weiterzuarbeiten. Die Daten sollen nämlich Informationen sein, die immer offen stehen, wenn man in CATIA arbeitet. Deswegen habe ich in catvba ein Fenster erstellt (siehe den 1. Bericht oben), in dem die Informationen eingefügt werden sollen. Und nun geht es nämlich los. Sobald ich den Code aus dem CATSript ins catvba kopiere und es von dort aus starte, habe ich eine Totschleife in gang gesetzt (was ich ehrlich gesagt nicht wirklich verstehen kann). Darum habe ich in die Schleife eine IF-Bedingung eingesetzt, bei der die DO WHILE- Schleife abbrechen soll, sobald das Wort "end" gefunden wird. Das Ergebnis davon ist, dass das Makro durchläuft und die Infos in einer MsgBox ausgibt, jedoch wird immer nur die ungerade Zeile ausgegeben (was mich auch wundert). Der letzte Punkt wäre dann noch, dass die Daten nicht in einer MsgBox dargestellt werden, sondern in dem von mir erzeugten Fenster. Da habe ich nämlich auch schon alles ausprobiert, was mir einfiel. Wenn es natürlich die Möglichkeit gibt, die MsgBox so zu aktivieren, dass man weiterhin in CATIA arbeiten kann, nehme ich diese Lösung natürlich gerne an. Ich habe hier noch mal die Codes reingestellt. catvba-Code (Modul) bei dem nur jede ungerade Zeile ausgegeben wird:
Code:
Option ExplicitSub CATMain() DateiOeffnen 'UserPosition.Show 0 End Sub Sub DateiOeffnen() ' Dim cDateiPfad As String ' cDateiPfad = CATIA.FileSelectionBox("Datei öffnen", "*.txt", CatFileSelectionModeOpen) Const cDateiPfad = "H:\Dassault-CATIA-Daten\Testobjekt\test.txt" Dim Datei As File Set Datei = CATIA.FileSystem.GetFile(cDateiPfad) Dim Text_St As TextStream Set Text_St = Datei.OpenAsTextStream("ForReading") Dim Text As String Do While Not (Text_St.AtEndOfStream) Text = Text & Chr(10) & Text_St.ReadLine If Text_St.ReadLine = "end" Then Exit Do End If Loop Text_St.Close MsgBox (Text) End Sub
catvba-Code (Formular) bei dem die Daten aus den TXT-Datei an das Textfeld im Fenster übergeben werden werden sollen:
Code:
Private Sub cmdSchliessen_Click() End End Sub Private Sub UserForm_Activate() ' txtPositionen = Text 'lstPositionen = CATIA.FileSystem.GetFile(FilePath).OpenAsTextStream("ForReading") 'txtPositionen = CATIA.FileSystem.GetFile(cDateiPfad).OpenAsTextStream("ForReading") End Sub
------------------ Gruß AndreeX00X Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 08. Okt. 2007 12:44 <-- editieren / zitieren --> Unities abgeben: Nur für AndreeX00X
Servus Versuch mal mit dem Befehl "readall" die Datei komplett einzulesen. zB:
Code:
Set fso = CreateObject("Scripting.FileSystemObject") Set file = fso.OpenTextFile("c:\testfile.txt", ForWriting, True) Text = file.ReadAll
Ich hab es allerdings nicht Probiert (nur raus kopiert).Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. [Diese Nachricht wurde von bgrittmann am 08. Okt. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndreeX00X Mitglied Ingenieur
Beiträge: 48 Registriert: 14.08.2007 CATIA V5 R16
|
erstellt am: 08. Okt. 2007 19:37 <-- editieren / zitieren --> Unities abgeben:
|
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3425 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 21. Feb. 2018 10:34 <-- editieren / zitieren --> Unities abgeben: Nur für AndreeX00X
Hallo Bernd, ich wollte deinen Code benutzen um einen Text anzeigen zu lassen. Leider bekomme ich eine Fehlermeldung. "Invalid procedure call or argument" Ich wollte ursprünglich den Text mit "oTextStream.AtEndOfStream" auslesen, aber leider läuft die Schleife in endlose und finden "EndOfStream" nicht. Hast du nen Tipp für mich? Code: Sub CATMain() Dim oActDoc As Document If CATIA.Documents.count = 0 Then MsgBox ("Kein Dokument geöffnet!") Exit Sub End If Set oActDoc = CATIA.ActiveDocument If TypeName(oActDoc) <> "PartDocument" Then MsgBox ("Kein CATPart geöffnet!") Exit Sub End If Dim oPart As Part Set oPart = oActDoc.Part 'Dim oFile As File 'Set oFile = CATIA.FileSystem.GetFile("D:\input.txt") 'Dim oTextStream As TextStream 'Set oTextStream = oFile.OpenAsTextStream("ForReading") Set fso = CreateObject("Scripting.FileSystemObject") Set File = fso.OpenTextFile("D:\input.txt", ForWriting, True) TEXT = File.ReadAll 'Do Until (oTextStream.AtEndOfStream) 'Do While Not (oTextStream.AtEndOfStream) 'TEXT = TEXT & Chr(10) & oTextStream.ReadLine 'Debug.Print TEXT 'Loop 'oTextStream.Close MsgBox TEXT End Sub
EDIT Makro sollte als CATScript laufen ------------------ Gruß Uwe Auch Catia ist nur ein Mensch! [Diese Nachricht wurde von moppesle am 21. Feb. 2018 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 21. Feb. 2018 17:40 <-- editieren / zitieren --> Unities abgeben: Nur für AndreeX00X
|
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3425 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 22. Feb. 2018 07:05 <-- editieren / zitieren --> Unities abgeben: Nur für AndreeX00X
Hallo Bernd, danke dir Habe das jetzt so gelöst. Code:
PathTXTInput ="D:\"PathTabelle = PathTXTInput + "Input.txt" Set Objekt = CreateObject("Scripting.FileSystemObject") If CATIA.FileSystem.FileExists(PathTabelle) Then Set TextStream = Objekt.OpenTextFile(PathTabelle) Do While Not (TextStream.AtEndOfStream) Zeile = TextStream.ReadLine TextPassungreihe = TextPassungreihe + Zeile & vbCrLf Loop End If
------------------ Gruß Uwe Auch Catia ist nur ein Mensch! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |