Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
880to884
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
880to884
880to884
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Text-Datei an Variant-Array übergeben

Text-Datei an Variant-Array übergeben
21.06.2007 16:47:45
Roland Hochhäuser

Hallo zusammen,
ich habe hier mehrere Text-Dateien (12-14 Spalten; Separator: mal Pipe (|), mal Tab; jeweils 90.000-160.000 Zeilen Datenumfang), die ich (am liebsten ohne Umweg über Zwischentabellen) direkt in ein Variant-Array einlesen möchte.
Die Informationen sind ein bunter Mix aus Text, Datums- und Währungswerten sowie Leerzeichen. Ein Zurückschreiben der Daten in die Text-Dateien ist nicht nötig, ich muss das Array nur per Schleife durchlaufen können (das kriege ich hin).
Woran ich zu knabbern habe: wie bekomme ich das Text-file ohne die 1. Zeile (=Überschriften) unter Beachtung der Separatoren in einem Rutsch in ein Array? Kann mir jemand mit einem Ansatz oder Link weiterhelfen? In der Recherche habe ich dazu nichts gefunden.
Vielen Dank im Voraus von
Roland Hochhäuser

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Text-Datei an Variant-Array übergeben
21.06.2007 17:36:56
ingUR
Hallo, Roland,
mit dem "OPEN path/filename FOR INPUT AS #1"-Befehl öffnest Du eine Datei, die Du nun sequentiell lesen kannst.
Hier kommt es nun darauf an, wie Deine Textdatei aufgebaut ist. Wenn sie zeilenorientiert ist (in einem Texteditor entspricht jeder Datensatz eine Zeile, in der die Elemente eines Datensatses stehen), dann kan jede Zeile mit einem LINE INPUT#1, strRecord abgerufen werden, bis das Dateiende erreicht ist:


Sub readTXT()
Dim strRecord As String
Open "C:\temp\gdax.txt" For Input As #1
'lese erste Zeile aus der Datei
Line Input #1, strRecord
While Not EOF(1)
Line Input #1, strRecord
Debug.Print strRecord
'Routine zum Zerlegen des Datensatzes in seine Teile
Wend
Close #1
End Sub


Wie Du allerdings einen Datensatz in seine Teile zerlegst und diese den Variablen zuordnest, hängt vom Aufbau des Strings ab. Ebenso bedarf es einer etwas anderen Logik, wenn z.B. immer eine bestimmte Anzahl von Einträgen einem Datensatz zugeordnet werden soll.
Was jedoch bei Textdateien nicht ohne Vorarbeit der Zerlegung geht, ist die direkte Übergabe des Gesamtinhat an verschiedene Variablienfelder, zumal wenn diese Daten noch unterschiiedliche Datentypen können.
Gruß,
Uwe

Anzeige
AW: Text-Datei an Variant-Array übergeben
21.06.2007 23:19:22
Roland Hochhäuser
Hallo Uwe,
ich habe folgendes draus gemacht (Userform mit einem CommandButton und einer Listbox):


Private Sub CommandButton1_Click()
Dim data() As String, arrGesamt
Dim dateiname As String, strRecord As String
Dim zeile As Long, l As Long, i As Integer
dateiname = Application.GetOpenFilename("Textdateien,*.txt")
If dateiname = "Falsch" Then Exit Sub
zeile = 1
Open dateiname For Input As #1
Do While Not EOF(1)
Line Input #1, strRecord
zeile = zeile + 1
Loop
Close #1
ReDim arrGesamt(1 To zeile, 1 To 14) '14 Spalten
l = 1
Open dateiname For Input As #1
On Error Resume Next
Do While Not EOF(1)
Line Input #1, strRecord
data() = Split(CStr(strRecord), Chr(124)) 'Chr(124)=Separator Pipe
For i = 1 To 14
arrGesamt(l, i) = data(LBound(data()) - 1 + i)
Next
l = l + 1
Loop
Close #1
With ListBox1
.Clear
.List = arrGesamt
End With
Erase arrGesamt
End Sub


Ich hätte mir zwar gerne die erste Do-Loop-Schleife zur Feststellung der Zeilenzahl der Textdatei geschenkt, aber auf den Trichter bin ich nicht mehr gekommen und den Chr für den Separator Tab schaue ich heute auch nicht mehr nach. Wenn du da noch nachlegen könntest . . .
Für heute nochmals Danke für deinen Einstieg, Gruß und gute Nacht
Roland Hochhäuser

Anzeige
AW: Text-Datei an Variant-Array übergeben
22.06.2007 07:28:55
ingUR
Hallo, Roland,
danke für die Rückmeldung. Sicher wirst Du die ASCII-Codezahl 9 für das Tabulatorzeichen bereits herausgefunden haben (chr(9) = TAB).
Um sich jedoch das erste Durchlesen der Datei zum Festellen der Zeilenanzahl zu ersparen, wäre es erforderlich, dass eine konstante Länge der Datensätze vorhanden ist ( maxAnzRecs = LOF(1)\RecFixLenInBytes ).
Ist das nicht der Fall, fallen mir nur zwei Wege ein, die allerdings bereits bei der Erstellung der Datei bereits zu berücksichtigen sind. Die relevanten Informationen werden in einen Vorspann zur Datei oder aber in einer Info-Datei abgelegt, die dann vor dem Datensatzlesen als erstes eingelesen und ausgewertet werden.
Dieser Aufwand wird, wenn er überhaupt möglich ist, da diese Information bereits beim Erstellen geschreiben werden, sich wohl nur bei einem zeitlich lang andauerndem Lesevorgang über alle Datesätze lohnen.
Gruß,
Uwe

Anzeige
AW: Text-Datei an Variant-Array übergeben
22.06.2007 09:19:16
Roland Hochhäuser
Hallo Uwe,
Vielen Dank für deine neuerliche Antwort. Die Text-Dateien haben unterschiedliche Datensatzlängen und werden - ohne dass ich deren Erstellung beeinflussen kann - von dritter Seite erstellt und angeliefert. Dann wird es also wohl bei den beiden Schleifen bleiben müssen.
Gruß
Roland Hochhäuser

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige