Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1908to1912
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Datei mit VBA einlesen - vbCrLF / vbLF

Datei mit VBA einlesen - vbCrLF / vbLF
15.12.2022 11:45:38
Olaf
Hallo,
dieses Forum ist bei allen Excel Problemen mein erster Anlaufpunkt, hier finde ich immer eine Lösung - nur diesmal nicht, deshalb nun mein erster Beitrag...
zur Situation:
Ich muss bestimmte Zelleninhalte aus xml-Dateien extrahieren. D.h. bisher werden sie mit VBA zeilenweise eingelesen, dann geprüft ob die Zeile das richtige Tag enthält und wenn ja der Wert übernommen.
Das funktioniert soweit ganz gut wenn die Datei vbCrLF als Zeilenendezeichen enthält.
Aber bei vbLF als Trenner wird die gesamte Datei als eine Zeile erkannt, weshalb dann nichts extrahiert wird. Und es dauert eben, bis dann endlich alles eingelesen ist. Jetzt sind die Dateien auch noch in der Größe explodiert und bei 1,6 GB möchte ich sie nicht falsch öffnen.
bisheriges Vorgehen:

   Do While Not EOF(1)
Line Input #1, TextLine
Loop
Frage(n):
Was ist das beste Vorgehen, um Dateien in der Größe zu verarbeiten? (Und bitte nicht mit "nimm ein besser geeignetes Programm" antworten.)
Natürlich kann ich über

   Open "D:\MyDatei.txt" For Binary As #1
MyString = Input(LOF(1), #1)
CLOSE #1
MyString = Replace(MyString, Chr$(10), Chr$(13)&CHR$(10))
Open "D:\MyDatei.txt" For Output As #1
Write #1, MyString
CLOSE #1
den fehlenden CR einfügen, damit im Anschluss ein

   Line Input #1, TextLine 
funktioniert.
Aber was ist, wenn ich Dateien mal mit vbLf und mal mit vbCrLf erhalte? Wie kann ich in kurzer Zeit feststellen, welche Art von Zeilenenden die Datei enthält? Kann ich z.B. nur die ersten 1000 ZeiCHen einlesen (ohne vorher die ganze Datei gelesen zu haben) und in dem String nach vbCrLf suchen?
Im Moment erscheint mir alles so schwierig/unmöglich, dass ich dazu tendiere, vor dem Einlesen eine msgbox auszugeben, in der darauf hingewiesen wird, dass die Dateien Windows-Zeilenenden aufweisen müssen und man sie nochmals mit z.B. emEditor, Textpad8 o.ä. öffnen und ggf. ändern soll.

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datei mit VBA einlesen - vbCrLF / vbLF
15.12.2022 11:57:50
Der
Hallo,
hier zwei Möglichkeiten, die mir spontan einfallen:
Variante 1:
Zeichenweise in einen String einlesen, das vbCr verwerfen und bei Zeilenende (vbLf) sen String "abschließen" ... Rest wie bei Dir.
Variante 2:
Komplett in eine Variable einlesen und dann vbCR durch einen Leerstring ersetzen und dann mittels Split bei vbLf in eine Array-Variable lesen und diese abarbeiten.
Variante 1 wird vermutlich langsamer sein als Variante 2, evtl. aber aufgrund der Größe der Dateien besser. Müsste man ggf. testen.
Grüße
Michael
AW: Datei mit VBA einlesen - vbCrLF / vbLF
15.12.2022 12:17:14
volti
Hallo Olaf,
lies die Daten erst in ein Array. Da kannst Du den Trenner vorgeben und alles, u.U. auch schneller, per Array abarbeiten.
Hier ein Beispiel:
Code:


Sub Test() Dim iff As Integer, iZeile As Long Dim sDaten As String, sArr() As String, sFilename As String sFilename = "D:\MyDatei.txt" ' Daten in Array einlesen If Dir(sFilename) = "" Then Exit Sub iff = FreeFile() Open sFilename For Binary Access Read As iff sDaten = Space$(LOF(iff)) Get iff, , sDaten Close iff sArr = Split(sDaten, vbLf) ' Hier Trenner vorgeben For iZeile = 0 To UBound(sArr) ' mach was Next iZeile End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Datei mit VBA einlesen - vbCrLF / vbLF
16.12.2022 13:12:19
Olaf
Hallo Karl-Heinz,
ein Array als Lösung hatte ich schon mehrfach gelesen, mich aber davor gescheut, weil mir der Geschwindigkeitsvorteil nicht klar war. Die Lösung ist ja pfeilschnell! Im Moment trenne ich also mit vbLf und alles funktioniert. Wenn dann doch mal eine Datei mit Windows-Zeilenenden geliefert wird, hätte das Array nach dem Split nur einen Eintrag und daran könnte ich erkennen, dass der Split nochmals mit vbCrLf wiederholt werden muss. So komme ich weiter.
Eines ist klar: Ich werde nie wieder mit Line Input arbeiten!
Herzlichen Dank für die Hilfe!
AW: Datei mit VBA einlesen - vbCrLF / vbLF
16.12.2022 13:27:31
Daniel
Nur so als Tipp, weil ich XML gelesen habe:
Excel hat eine Funktion XMLFilter, mit der man die Werte ermitteln kann, die den gesuchten Tags zugeordnet sind.
Kennst du diese?
Vielleicht kannst du damit deine Aufgabe einfacher lösen.
Gruß Daniel
Anzeige
AW: Datei mit VBA einlesen - vbCrLF / vbLF
19.12.2022 15:16:45
Olaf
Hallo Daniel,
danke für den Hinweis. Ehrlich gesagt komme ich mit der Excel-internen Hilfe zu der Funktion nicht weiter - ob ich das aber überhaupt wollte ist mir noch gar nicht klar. Denn wenn ich eine XML-Datei in Excel öffne dauert das immer ewig, und wenn das Öffnen im Rahmen der Funktion genauso lange dauern würde, wäre die Sache schon alleine deshalb gestorben.
Der jetzige Weg funktioniert für die aktuellen Zwecke hervorragend, da kann ich mir kaum etwas besseres vorstellen ;-)
Gruß, Olaf

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige