Autor
|
Thema: Daten aus Textdatei einlesen (3235 mal gelesen)
|
alf3k Mitglied
Beiträge: 11 Registriert: 13.09.2004
|
erstellt am: 16. Sep. 2004 12:53 <-- editieren / zitieren --> Unities abgeben:
Hallo, nachdem mein erstes richtiges Makro nun läuft, habe ich gleich noch ein weiteres Problem. Ich möchte von der erzeugten Textdatei die Koordinaten der Punkte einlesen, ein bisschen verändern und dann wieder in eine neue Textdatei mit gleichem Format schreiben. Die Textdatei habe ich angehängt. Mit dem Einlesen bin ich bisher soweit gekommen: '-------------------------------------------------- Const cDateiPfad = "C:\Makroverzeichnis1\test_01.txt" Const cUmgerechnetPfad = "C:\Makroverzeichnis1\Umgerechnet_01.txt" Sub CATMain() 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 End Sub '---------------------------------------- Mein Problem besteht zuerst darin, dass ich nicht weiß, wie ich die Koordinaten einzeln auslese. Am liebsten würde ich sie dann nacheinander an ein entsprechend großes Feld übergeben. Kann mir da jemand helfen? Vielen Dank, Marco
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bartleby Mitglied
Beiträge: 102 Registriert: 17.06.2004 Win XP V5R12 SP3, SP5 Win 2000 SP4 V5R12 SP3
|
erstellt am: 16. Sep. 2004 14:23 <-- editieren / zitieren --> Unities abgeben: Nur für alf3k
Hallo.. an deiner Stelle würd ich entweder gleich eine Exceltabelle statt der textdatei nutzen oder zumindest die textdatei in Name1;za,hl;z,ahl;zahl; Name2;za,hl;z,ahl;zahl; oder Name_1 ; za,hl268; z,123ahl; 12zahl; Nameder2 ; 13za,hl; z,ahl; zahlE+3 ; (hier sind immer 10 zeichen zwischenden Semikolons, das sieht man nicht ist aber so ) sowas abändern... wenn excel nicht überall da ist zuerst die stellen ermitteln, wo die trennungen ( ; ) in der Zeile sind Das kannst du dir ersparen wenn du den Zahlen und Namen z.b. nur genau! 10 zeichen zuordnest aber das wird nicht so toll bei nachkommazahlen (158,1569814) geht aber mit round() i=0 count(0)=1 do while (i<len(zeile)) i=i+1 start=Instr(count(i),Zeile,";") count(i)=start anzahlStringTeile=i loop an den ermittelten stellen den string zerteilen for i= 1 to anz... do text(i)=mid(zeile,count(i),count(i+1)-count(i)-1) zahl(i)=Cdbl Text(i) 'und in Zahl umwandeln next Alles in allem ist Excel meiner Meinung nach wesentlich kompfortabler (und ein Forum gibts dazu auch hier; bei der textvariante bist du auf Ziethen und Dich allein gestellt) aber probier's wie Du willst. Es führen eben viele wege nach Rom. MfG Ronny
[Diese Nachricht wurde von Bartleby am 16. Sep. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
michaelroesch Mitglied Systemadministrator SAP-Basis & CAD
Beiträge: 39 Registriert: 20.02.2002
|
erstellt am: 16. Sep. 2004 16:42 <-- editieren / zitieren --> Unities abgeben: Nur für alf3k
Hallo Forum, kleine Anmerkung zum einlesen der Textdatei versucht es mal mit "split" split ( "STRING" , "TRENNZEICHEN" ) Set fso = CreateObject("Scripting.FileSystemObject") If fso.FileExists(MyFileName) Then Set sDatei = fso.OpenTextFile(MyFileName) End If Do While Not (sDatei.AtEndOfStream) sZeile = sDatei.ReadLine MyTempArray = Split(sZeile, ";") Wert1 = MyTempArray(0) Wert2 = MyTempArray(1) Wert3 = MyTempArray(2) Wert4 = MyTempArray(3) Wert5 = MyTempArray(4) Loop Gruß Michael,
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
alf3k Mitglied
Beiträge: 11 Registriert: 13.09.2004
|
erstellt am: 17. Sep. 2004 10:56 <-- editieren / zitieren --> Unities abgeben:
|
Criollo Mitglied
Beiträge: 42 Registriert: 07.11.2008
|
erstellt am: 06. Aug. 2010 13:38 <-- editieren / zitieren --> Unities abgeben: Nur für alf3k
|
Ex-Mitglied
|
erstellt am: 26. Aug. 2010 14:50 <-- editieren / zitieren -->
Hallo, ich habe die folgenden Codebestandteile (Textdatei einlesen und Split Funktion)zusammengefasst. Nur leider funktioniert mein Code noch nicht. Kann mir jemand weiterhelfen? Const cDateiPfad = "U:\macrose\testdatei.txt" Const cUmgerechnetPfad = "U:\macrose\testdatei.txt"
Sub CATMain()
Dim Datei As File Dim DStrom As TextStream Dim sZeile As CATBSTR Set Datei = CATIA.FileSystem.GetFile (cDateiPfad) Set DStrom = Datei.OpenAsTextStream ("ForReading")
Set fso = CreateObject("Scripting.FileSystemObject") If fso.FileExists(cDateiPfad) Then Set sDatei = fso.OpenTextFile(cDateiPfad) End If Do While Not (sDatei.AtEndOfStream) sZeile = sDatei.ReadLine MyTempArray = Split(sZeile, ";") Wert1 = MyTempArray(0) Wert2 = MyTempArray(1) Wert3 = MyTempArray(2) Wert4 = MyTempArray(3) Wert5 = MyTempArray(4) MsgBox (sZeile) Loop End Sub |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 26. Aug. 2010 15:16 <-- editieren / zitieren --> Unities abgeben: Nur für alf3k
|
Ex-Mitglied
|
erstellt am: 26. Aug. 2010 15:18 <-- editieren / zitieren -->
dann kommt dieser Fehler Typen unverträglich --Y MyTempArray = Split(sZeile, ";") |
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: 26. Aug. 2010 15:27 <-- editieren / zitieren --> Unities abgeben: Nur für alf3k
Zitat: Original erstellt von newCADuser: Nur leider funktioniert mein Code noch nicht.
Was funktioniert denn nicht? Ist das so schwer mal endlich etwas detaillierter zu fragen oder muss ich mir ständig eine Testumgebung aufbauen, nur um zu verstehen, was du da versuchst? Wichtig sind Sachen wie zum Beispiel: Was hast du erwartet? Was ist dabei rum gekommen? Steigt das Programm aus? Wenn ja wie lautet die Fehlermeldung? und und und... Umso länger der Code wird, umso weniger kann man mal eben überfliegen und sagen, was falsch ist. Achja zu deinem Problem... Dim MyTempArray(4) as String fehlt im Deklarationsteil. ------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
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: 26. Aug. 2010 15:30 <-- editieren / zitieren --> Unities abgeben: Nur für alf3k
|
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
Beiträge: 1118 Registriert: 29.05.2008 DELL PRECISION T3500 Intel(R) Xeon(R) CPU W3540 @ 2.93GHz 12285 MB RAM NVIDIA Quadro FX 1800 Microsoft Windows 7 Enterprise Service Pack 1 CATIA V5 R19 SP09 HF69 VB6.5 CAA RADE CDC
|
erstellt am: 26. Aug. 2010 15:41 <-- editieren / zitieren --> Unities abgeben: Nur für alf3k
Mal unabhängig davon, dass er sich endlich mal um ein Buch über VB kümmern sollte, zumal eine Fehlerbeschreibung fehlt: Müsste das Array nicht die Größe 5 haben? Und müsste das Array für ein Split nicht ein Object vom Typ Variant sein? Edit: Achja, da wir das Makro ja quasi schreiben sollte wirklich einmal darüber nachgedacht werden jemanden zu beauftragen der das kann, dann ist es auch besser und schneller fertig. ------------------ Mit freundlichen Grüßen, Henry Schneider alias Lila Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren: Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen, die Natur versucht, immer bessere Idioten zu bauen Xing [Diese Nachricht wurde von HoBLila am 26. Aug. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
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: 26. Aug. 2010 15:47 <-- editieren / zitieren --> Unities abgeben: Nur für alf3k
Zitat: Original erstellt von HoBLila: Mal unabhängig davon, dass er sich endlich mal um ein Buch über VB kümmern sollte, zumal eine Fehlerbeschreibung fehlt:Müsste das Array nicht die Größe 5 haben? Und müsste das Array für ein Split nicht ein Object vom Typ Variant sein? Edit: Achja, da wir das Makro ja quasi schreiben sollte wirklich einmal darüber nachgedacht werden jemanden zu beauftragen der das kann, dann ist es auch besser und schneller fertig.
Naja ich finds nicht mehr lustig und kann dir in Punkt ein nur zustimmen. Frage1: Warum? Das Array fängt bei 0 an. Im VBA definiert man mit 4 AFAIK also 5 "Felder". In .Net siehts wieder anders aus bzw. ist das zum Teil sehr durchwachsen. Frage2: Man brauch es auch wie Bernd geschrieben hat garnicht deklarieren, aber im Normalfall sollte ja bei einem Split aus einer Zeile einer Textdatei ein String entstehen. Deinen Edit kann ich BTW auch nur zustimmen. Das ganz hier ist totale Zeitverschwendung! ------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities [Diese Nachricht wurde von RSchulz am 26. Aug. 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: 30. Aug. 2010 08:33 <-- editieren / zitieren --> Unities abgeben: Nur für alf3k
Zitat: Original erstellt von michaelroesch: Hallo Forum,kleine Anmerkung zum einlesen der Textdatei versucht es mal mit "split" split ( "STRING" , "TRENNZEICHEN" ) Set fso = CreateObject("Scripting.FileSystemObject") If fso.FileExists(MyFileName) Then Set sDatei = fso.OpenTextFile(MyFileName) End If Do While Not (sDatei.AtEndOfStream) sZeile = sDatei.ReadLine MyTempArray = Split(sZeile, ";") Wert1 = MyTempArray(0) Wert2 = MyTempArray(1) Wert3 = MyTempArray(2) Wert4 = MyTempArray(3) Wert5 = MyTempArray(4) Loop Gruß Michael,
Wenn das Makro durchläuft, erscheint ein Laufzeitfehler. Hier wird die Zeile solange durchlaufen, bis Sie leer ist. Wenn ich die Zeilen über die message box einzeln ausgebe, erscheint sobald alle Zeilen ausgegeben wird ein Laufzeitfehler in dieser Zeile Wert1 = ... Was mich jetzt irritiert ist, die Zeile müsste doch nun leer sein und die Schleife müsste doch verlassen werden? Warum kommt daher dieser Laufzeitfehler? 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: 30. Aug. 2010 09:01 <-- editieren / zitieren --> Unities abgeben: Nur für alf3k
|
Peter873 Mitglied
Beiträge: 35 Registriert: 26.08.2010
|
erstellt am: 30. Aug. 2010 09:08 <-- editieren / zitieren --> Unities abgeben: Nur für alf3k
|
Peter873 Mitglied
Beiträge: 35 Registriert: 26.08.2010
|
erstellt am: 30. Aug. 2010 09:09 <-- editieren / zitieren --> Unities abgeben: Nur für alf3k
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 30. Aug. 2010 09:16 <-- editieren / zitieren --> Unities abgeben: Nur für alf3k
|
Peter873 Mitglied
Beiträge: 35 Registriert: 26.08.2010
|
erstellt am: 30. Aug. 2010 09:21 <-- editieren / zitieren --> Unities abgeben: Nur für alf3k
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 30. Aug. 2010 09:28 <-- editieren / zitieren --> Unities abgeben: Nur für alf3k
|
Peter873 Mitglied
Beiträge: 35 Registriert: 26.08.2010
|
erstellt am: 30. Aug. 2010 09:39 <-- editieren / zitieren --> Unities abgeben: Nur für alf3k
Ich habe gerade versucht, eine zusätzliche Schleife einzubauen. Sobald Wert1 = "" ist, soll die Schleife beendet werden. Hier aber der gleiche Fehler. Gibt es über dein angesprochenes EndOfFile, die Möglichkeit sofort nach der letzten vollen Zeile aus der Schleife zu springen? Denn momentan sucht er nach einem Wert in Wert1, bekommt ihn aber nicht zurück, deswegen wohl der Laufzeitfehler... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Peter873 Mitglied
Beiträge: 35 Registriert: 26.08.2010
|
erstellt am: 30. Aug. 2010 11:38 <-- editieren / zitieren --> Unities abgeben: Nur für alf3k
|