Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

txt-Dateien einlesen - Unterschied zw. 2 Möglichke

txt-Dateien einlesen - Unterschied zw. 2 Möglichke
29.05.2013 16:00:59
michael
Hallo,
bei meiner Suche im Forum bin ich auf 2 Möglichkeiten gestoßen eine txt-Datei in Excel einzulesen.
Ich habe unten beispielfaft die Zeilen kopiert die hoffentlich außreichend die beiden Arten beschreiben.
Wo sind die Vor-/Nachteile der beiden Methoden.
Wenn ich es richtig verstehe, dann wird bei der 1. Methode der gesammte Text eingelesen und in Spalten aufgeteilt.
Bei der 2. Methode Zeile für Zeile der Text nach Excel übertragen. Das Aufteiten in Spalten muß getrennt im Anschluß erfolgen.
Diese Methode müßte langsamer sein. Würde diese 2. Methode den Vorteil haben nur bestimmte Textzeilen auszulesen? Oder Zeilen die ein vorher definiertes Kriterium (nicht) erfüllen einzulesen oder (nicht einzulesen)?
Danke für die Hilfe
Michael
Methode 1:
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & ThisWorkbook.Path & Pfad, Destination:=Cells(2, j))
.Name = DatName '= "Test"
.FieldNames = True
.RowNumbers = False
.
.
.
.TextFileColumnDataTypes = Array(9, 1, 1, 9, 9, 9, 9)
.
End With
oder
Methode 2:
Open geffile For Input As #1
'Die anzahl ist nötig um die Grösse des Arrays zu deklarieren
'Zähler auf 0 setzen
txtlines = 0
Do While Not EOF(1) ' Schleife bis Dateiende.
Input #1, Text1 ' Hilfsvariable zum einlesen verwenden
'Zähler hochzählen
txtlines = txtlines + 1
Loop
'Schliessen der Datei weil Dateiende erreicht wurde
Close #1

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

Betreff
Datum
Anwender
Anzeige
AW: txt-Dateien einlesen - Unterschied zw. 2 Möglichke
29.05.2013 16:57:34
EtoPHG
Hallo Michael,
Ja: Methode 1 läuft über die Standard-Text-Importfunktion von Excel und teilt den Text gem. dem/den angegebenen Delimiters auf.
Methode 2: Ist ein relativ sinnfreier Code, denn er zählt nur die Anzahl Zeilen im Inputfile und macht sonst gar nichts!
und ja, der Inhalt der Variablen Text1 enthält eine Zeile des Inputfiles und könnte z.B. mit der VBA-Fkt. Splitaufgeteilt werden und ja, vorher oder nachher könnte entschieden werden, ob die Zeile überhaupt weiter verarbeitet werden muss.
Gruess Hansueli

AW: txt-Dateien einlesen - Unterschied zw. 2 Möglichke
29.05.2013 23:08:53
michael
Hallo Hansueli,
danke für deine Antwort.
Naja, von der 2.Methode habe ich, mangels Verständnis, wohl nicht alle Zeilen kopiert. Grundsätzlich fand ich immer in den Beispielen EOF und Input #1.
Meine Zeilen stammen aus: https://www.herber.de/forum/archiv/364to368/366568_Automatisches_Einlesen_mehrerer_Textdateien.html#366629
Werden hierbei alle Zeilen erst mal in einer Schleife nacheinander in ein Array geladen - danach aus dem Array ins Tabellenblatt (ebenso mit einer Schleife?)
Da alles zuerst im Array abgelegt wurde (wenn dem so ist) kann dann auch entschieden werden ob die Zeile weiterverarbeitet wird?
Danke, viele Grüße
Michael

Anzeige
AW: txt-Dateien einlesen - Unterschied zw. 2 Möglichke
01.06.2013 03:51:38
Franc
Das mit dem einzeln einlesen ist nur dann wichtig, wenn du die Textdatei analysieren willst.
mal ein Beispiel - nehmen wir an in der Textdatei sind auch leere Zeilen die nicht in Excel auftauchen sollen. Du kannst natürlich auch nach dem Input alles mögliche zum analysieren der Zeile schreiben.
Den Inhalt in ein Array einlesen ist denk nur bedingt sinnvoll bzw davon abhängig was du tun willst.
Wenn du uns sagst was du gerne möchtest können wir wahrscheinlich helfen.
Sub openfile()
Dim strDatei As String, strInhaltZeile As String, dZeileExcel As Double
strDatei = "E:\Test.txt" 'wo liegt die Datei
dZeileExcel = 1
Open strDatei For Input As #1 'Datei öffnen
Do While Not EOF(1) 'EOF = End of File = jede Zeile einlesen
Input #1, strInhaltZeile 'aktuelle Zeile aus der Datei einer Variable zuweisen
If strInhaltZeile  "" Then ' wenn die Zeile nicht leer ist
Cells(dZeileExcel, 1) = strInhaltZeile ' den Inhalt in Spalte 1, Zeile x schreiben
dZeileExcel = dZeileExcel + 1
End If
Loop
Close #1 ' wichtig - Datei am Ende wieder schließen
End Sub

Anzeige
AW: txt-Dateien einlesen - Unterschied zw. 2 Möglichke
02.06.2013 10:48:15
michael
Hallo Franc,
danke für die Hilfe!
Aktuell liegt kein/nicht mehr ein konkretes Problem vor - nur ein bischen "Dazulernen".
Bei der Lösungssuche zu meinem Problem fand ich im Forum zum Thema txt- oder csv-Datei einlesen fast nur die Methode:
Open strDatei For Input As #1 'Datei öffnen
Do While Not EOF(1) 'EOF = End of File = jede Zeile einlesen
Input #1, strInhaltZeile 'aktuelle Zeile aus der Datei einer Variable zuweisen
und Folgezeilen
nur 1 oder 2x die Variante über:
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & ThisWorkbook.Path & Pfad, Destination:=Cells(2, j))
und Folgezeilen
Ich habe mich zu letzterer entschieden (weil diese tat was ich wollte und weil ich den code "verstanden" habe (der Recorder hat was ähnliches aufgezeichnet)).
Allerdings wollte ich doch noch rauskriegen was die meist angebotene Lösung kann.
Grundsätzlich hatte ich verstanden das der 1. Code zeilenweise einliest, somit erschein er mir (viel?) langsamer als der, der den Text auf einmal einfügt, da ich Dateien mit mehr als 50000 Zeilen habe. Aber irgend eine Stärke muß er auch haben - wohl die, dass ich zeilenweise entscheiden kann oder nur bestimmte Zeilen aus lese.
Danke, viele Grüße
Michael

Anzeige
AW: txt-Dateien einlesen - Unterschied zw. 2 Möglichke
02.06.2013 18:32:30
Franc
Genau richtig.
Wenn es nur darum geht Daten in die Exceltabelle zu importieren nimm die 1. Variante.
Die 2. Variante ist dazu da die Daten vor dem schreiben zu analysieren. Das umfasst dann wirklich (fast) alles. Man kann die Daten anders anordnen, bestimmte Werte woanders hinschreiben ect.
Zum Array - grad wenn man sehr viele Daten hat lohnt es sich Arrays anzuschauen.
Mit Arrays kann man große Datenmengen in den Arbeitsspeicher einlesen und dort bearbeiten/vergleichen ect.
Beispiel (nicht sinnvoll aber dient zum veranschaulichen ^^)
Vergleicht man 50.000 Zellen in VBA untereinander mit Zellverweisen im Arbeitsblatt würde das rund 11 Stunden dauern. (ist ne Hochrechnung von 100 Vergleichen)
Lädt man vorher die Daten in ein Array und führt dort den Vergleich durch dauert es "nur" noch 10 min und 10 min kleiner 11 Stunden. ;-)
Die Verweise innerhalb eines ein- oder mehrdimensionalen Arrays sind vom Aufbau her die gleichen wie auf Zellverweise innerhalb der Mappe.
Anzeige

311 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige