Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
992to996
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
992to996
992to996
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

BESTIMMTE Zeilen aus txt lesen

BESTIMMTE Zeilen aus txt lesen
16.07.2008 15:02:00
Andreas
Hallo Forum,
weiß jemand wie man mittels VBA DIREKT BESTIMMTE Zeilen einer txt-Datei auslesen kann?
Die Variante Zeile für Zeile zu lesen, nach Kriterium X zu prüfen und dann evtl zu verwenden, ist mir bekannt. Ich suche nach einer Möglichkeit beim Lesen in einer txt-Datei die zu lesende und bereits bekannte ZeilenNr direkt angeben zu können ohne vorher sämtliche anderen Zeilen lesen zu müssen.
Geht das? Wenn ja wäre es eine große Hilfe.
Vielen Dank im Voraus,
Andreas B.

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: BESTIMMTE Zeilen aus txt lesen
16.07.2008 16:22:08
Tino
Hallo,
hier mal eine einfache Funktion,
an diese übergibst du die Zeilennummer und den Pfad + Dateiname, als Rückgabe bekommst du die Textzeile.

Public Function ZeileLesen(ZeilenNr As Long, DateiPfad As String) As String
Dim DateiNr As Integer
Dim Zeile As String
Dim ZeilenNr2 As Long
DateiNr = FreeFile
Open DateiPfad For Input As #DateiNr
Do Until EOF(DateiNr)
Line Input #DateiNr, Zeile
ZeilenNr2 = ZeilenNr2 + 1
If ZeilenNr2 = ZeilenNr Then
ZeileLesen = Zeile
Close #DateiNr
Exit Function
End If
Loop
Close #DateiNr
End Function


Gruß Tino

www.VBA-Excel.de


Anzeige
AW: BESTIMMTE Zeilen aus txt lesen
16.07.2008 16:45:00
Andreas
Hallo Tino,
danke für die Antwort. Aber wie beschrieben suche ich jedoch nach einer Methode mit der ich direkt eine bestimmte Zeile auslesen kann ohne sämtliche vorherigen txt-Zeilen lesen zu müssen.
Hintergrund: Ich habe sehr viele und sehr große txt-Dateien aus denen ich sehr viele Zeilen auslesen muß.
Wenn das Programm nun für jede auszulesende Zeile vorher alle vorherigen Zeilen durchforsten muß, benötigt das viel zu viel Zeit.
Ich suche also eine Methode bestimmte Zeilen direkt auszulesen.
Geht das?
Gruß,
Andreas B.

AW: BESTIMMTE Zeilen aus txt lesen
16.07.2008 17:17:00
Tino
Hallo,
hier noch eine ohne schleife, vieleicht ist die ja schnell genug?!

Public Function Lese_Zeile(ByVal sFilename As String, Zeile As Long) As String
Dim F As Integer
Dim sInhalt As String
Dim meTxt() As String
' Existiert die Datei ?
If Dir$(sFilename, vbNormal)  "" Then
F = FreeFile
Open sFilename For Binary As #F
sInhalt = Space$(LOF(F))
Get #F, , sInhalt
meTxt = Split(sInhalt, vbCrLf)
Lese_Zeile = meTxt(Zeile - 1)
Erase meTxt
Close #F
End If
End Function


Gruß Tino

Anzeige
AW: BESTIMMTE Zeilen aus txt lesen
16.07.2008 21:13:57
Uduuh
Hallo,
das ist so ziemlich das lahmste, was geht.
Mein Test mit einer .txt mit ca. 590.000 Zeilen und Lesen des 100.000sten Datensatzes: 14,4s. Per Schleife 0,05s.
Gruß aus’m Pott
Udo

Hab ich doch geschrieben!!!! oT
16.07.2008 21:49:00
Tino
.

AW: Hab ich doch geschrieben!!!! oT
16.07.2008 22:39:43
Uduuh
Hallo,
sollte nur ne Ergänzung sein.
Bei so vielen Zeilen exponiert sich das anscheinend. Mien Test: ca 300x schneller. Anscheinend frisst die Split-Funktion die Performance. Wenn man also weiß, in welcher Zeile der Wert ist, einfach durchrennen. Selbst wenn man suchen muss, ist der sequenzielle Vergleich sehr schnell.
Gruß aus’m Pott
Udo

Anzeige
mit Schleife doppelt so schnell!!!
16.07.2008 20:23:00
Tino
Hallo,
habe dies jetzt mal getestet und ein und dieselbe Datei 50.000-mal, eine bestimmte Zeile eingelesen.
Ergebnis, die erste Funktion mit der Schleife ist ca. doppelt so schnell wie die ohne Schleife!
Version 1 mit Schleife: 00:00:14
Version 2 ohne Schleife: 00:00:26
Gruß Tino

www.VBA-Excel.de


AW: mit Schleife doppelt so schnell!!!
16.07.2008 21:41:01
andy027
Hallo Tino,
nochmals vielen Dank für Deine Antworten !!
Ich hatte gehofft, dass es eine Möglichkeit gibt, mit der man mit geringstem Zeitaufwand die gewünschte txt-Zeile direkt liest ohne alle vorhergehenden Zeilen zeitaufwendig lesen zu müssen. Die txt-Datei komplett in ein array einzulesen (also Deine Version 2) um dann das entsprechende array-Element auszulesen, scheitert bei mir daran, dass die txt-Dateien im Extremfall zu groß sind und Speicherplatz-Probleme entstünden.
Mir bleibt noch der Weg die auszulesenden Zeilen zu sortieren, um sie dann mit einmaligem Durchlaufen der txt-Datei auszulesen, was jedoch aufgrund der Struktur etwas aufwendiger ist und die Code-Lesbarkeit darunter leidet...
Vielleicht weiß doch noch jemand eine einfache Lösung ?
Grüße aus Wuppertal,
Andreas B.

Anzeige
Ich hatte auch mal das Problem ...
16.07.2008 22:27:32
Backowe
Hi,
... eine Logdatei mit ca. 15 bis 20 Millionen Zeilen zu bearbeiten. Ich habe zuerst aus der Logdatei die relevanten Zeilen ausgelesen und in eine seperate bruchteilgroße Datei geschrieben.
VBA-Code:
Sub TextdateiAuslesen()
Dim a
a = Shell("cmd /c findstr suchbegriff Textdatei.txt > BereinigteTextdatei.txt", vbHide)
End Sub

Anzeige
Hinweis
16.07.2008 23:21:49
Tino
Hallo,
Bei dieser Verwendung muss man beachten, den Pfad DOS-kompatiblen anzugeben.
Also in der so genannten Kurzschreibweise, VBA Code zu finden über Google.
Dachte einfach es sollte noch erwähnt werden, sonst funktioniert dies bei manschen Lesern hier im Forum nicht.
Gruß Tino

http://www.VBA-Excel.de


AW: Hinweis
17.07.2008 07:59:05
Andreas
Vielen Dank an alle !!
Gruß,
Andreas B.

AW: Hinweis, geschlossen
18.07.2008 16:41:02
done

9 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige