Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Aus .txt nur einzelne Zeilen einlesen?

Aus .txt nur einzelne Zeilen einlesen?
15.06.2013 00:31:12
Prevertex
Hallo zusammen.
Ich hoffe es ist keine zu blöde Frage. Habe nach gesucht, konnte aber nur zum kompletten Einlesen was finden.
Bei mir geht es jedoch um Info aus großen txt Dateien oft mehrere GB. Kann man irgendwie nur einzelne Zeilen einlesen?
Ich bräuchte keine Analyse oder ähnliches, sondern nur z.B die 300. oder 6000. Zeile einlesen?

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Aus .txt nur einzelne Zeilen einlesen?
15.06.2013 07:43:41
Oberschlumpf
Hi #Name?
Versuch mal:
Sub sbTxt()
Dim lstrInhalt As String, ldbCount As Double
Open "Pfad\Datei" As Input As #1
Do While Not EOF(1)
Line Input #1, lstrInhalt
ldbCount = ldbCount + 1
If ldbCount = 300 Then
'hier dein Code, was bei Zeile 300 passieren soll
End If
If ldbCount = 6000 Then
'hier dein Code, was bei Zeile 6000 passieren soll
End If
'und so weiter
Loop
Close
End Sub
Hilfts?
Ciao
Thorsten <<-- DAS ist übrigens mein Realname

Anzeige
AW: Aus .txt nur einzelne Zeilen einlesen?
16.06.2013 10:44:03
fcs
Hallo Thorsten,
ja, allerdings mit Korrektur in der Open-Zeile und optimiert mit einer Abbruchbedingung wenn die Zeile mit der höchsten Nummer ausgewertet ist, damit ggf. nicht die gesamte Textdatei durchlaufen wird.
Gruß
Franz
Sub sbTxt()
Dim lstrInhalt As String, ldbCount As Double
Open "Pfad\Datei" For Input As #1
Do While Not EOF(1)
Line Input #1, lstrInhalt
ldbCount = ldbCount + 1
Select Case ldbCount
Case 300
'hier dein Code, was bei Zeile 300 passieren soll
Case 6000
'hier dein Code, was bei Zeile 6000 passieren soll
'und so weiter
Case Is > 6000 'wenn größer höchstem Wert, dann Schleife beenden
Exit Do
End Select
Loop
Close
End Sub

Anzeige
AW: Aus .txt nur einzelne Zeilen einlesen?
16.06.2013 11:01:44
Oberschlumpf
Hi Franz
ups, ja, hast recht - die Open-Zeile würde den Debugger auf'n Plan rufen :-)
(na ja, kommt davon, wenn man denkt, es geht auch ohne zu Testen)
Was den Stoppwert betrifft - hier 6000 - hoff ich, dass der Ersteller dies erkennt und den Wert entsprechend anpasst, wenn 6000 gar nicht die letzt zu prüfende Zeile ist.
Ciao
Thorsten

Anzeige
AW: Aus .txt nur einzelne Zeilen einlesen?
16.06.2013 20:26:33
Prevertex
Danke Euch allen.
Bei den großen Dateien scheitert es leider am Speicher.
Aber wahrscheinlich funioniert Thorsten's Lösung bei kleineren Dateien.
Warte gerade noch auf die erste abgeschlossene Konvertierung ums auszuprobieren.
Ciao
Thomas

AW: Aus .txt nur einzelne Zeilen einlesen?
15.06.2013 07:55:13
Tino
Hallo,
eine bestimmte position direkt auszulesen kenne ich nicht.
Hier ane Variante/Function die bis zu dieser Zeile läuft und diese zurückgibt.
Sub Beispiel()
Dim sPathTxT$, sTextZeile$
Dim lngZeile&
lngZeile = 5 'Zeilennummer
sPathTxT = Application.GetOpenFilename("Alle Text Dateien (*.txt),*.txt")
If sPathTxT = CStr(False) Then Exit Sub
sTextZeile = ZeileLesen(lngZeile, sPathTxT)
End Sub
Public Function ZeileLesen(ZeilenNr As Long, ByVal 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

Anzeige
AW: Aus .txt nur einzelne Zeilen einlesen?
15.06.2013 09:24:38
fcs
Hallo Prevertex,
wenn alle Datenzeilen/Datensätze genau die gleiche Zeichenzahl haben, dann könnte man ggf. entsprechende Abschnitte direkt aus der Sequenz der Zeichen herausschneiden.
Man könnte im gesamten Text die 299. und 300. Zeilenschaltung suchen und den Text dazwischen ausschneiden. Bei mehreren GB Dateigröße dürfte das aber problematisch werden, wegen der Geößen-Grenzen der entsprechenden Variablen.
Wahrscheinlich geht es am schnellsten, wenn das Textfile zeilenweise einzulesen wird und mit Prüfung eines Zeilenzählers die gewünschten Zeilen herausgefischt werden.
Gruß
Franz

Anzeige
du meinst also...
15.06.2013 11:04:19
Oberschlumpf
Hi Franz
...genau das, was mein Code-Bsp ausführt, oder? :-)
Ciao
Thorsten

AW: du meinst also...
17.06.2013 01:42:24
Prevertex
Danke nochmals. Bei den kleineren TXT Dateien läuft der Code nun einwandfrei.
Könnte ich das Gleiche vielleicht auch auf DOCX Dateien mit Passwort anwenden?
Bin leider selber am Umschreiben der Open Zeile gescheitert ;)

Anzeige
AW: du meinst also...
17.06.2013 07:55:51
fcs
Hallo,
Nein, da auch alle Steuerzeichen in der Datei vorhanden sind
Du muss die Worddatei dann vorher als Textdatei speichern.
Gru
Franz
;
Anzeige
Anzeige

Infobox / Tutorial

Einzelne Zeilen aus .txt-Dateien mit VBA einlesen


Schritt-für-Schritt-Anleitung

Um mit VBA eine .txt-Datei zeilenweise einzulesen und nur bestimmte Zeilen zu extrahieren, kannst Du den folgenden Code verwenden:

Sub sbTxt()
    Dim lstrInhalt As String, ldbCount As Double
    Open "Pfad\Datei" For Input As #1
    Do While Not EOF(1)
        Line Input #1, lstrInhalt
        ldbCount = ldbCount + 1
        Select Case ldbCount
            Case 300
                'Hier dein Code, was bei Zeile 300 passieren soll
            Case 6000
                'Hier dein Code, was bei Zeile 6000 passieren soll
            Case Is > 6000 'Wenn größer höchstem Wert, dann Schleife beenden
                Exit Do
        End Select
    Loop
    Close #1
End Sub

Achte darauf, den Pfad zu Deiner .txt-Datei korrekt anzugeben. Mit dieser Methode kannst Du gezielt nur die Zeilen 300 und 6000 einlesen, ohne die gesamte Datei verarbeiten zu müssen.


Häufige Fehler und Lösungen

  1. Fehler beim Öffnen der Datei
    Stelle sicher, dass der Pfad zur Datei korrekt ist und dass die Datei nicht von einem anderen Programm verwendet wird.

  2. Unzureichender Speicher bei großen Dateien
    Bei sehr großen .txt-Dateien kann es zu Speicherproblemen kommen. Überlege, ob Du die Datei in kleinere Teile aufteilen kannst, bevor Du sie mit VBA bearbeitest.


Alternative Methoden

Falls Du eine andere Herangehensweise suchst, kannst Du auch eine Funktion erstellen, die eine bestimmte Zeile aus einer .txt-Datei liest:

Sub Beispiel()
    Dim sPathTxT As String, sTextZeile As String
    Dim lngZeile As Long
    lngZeile = 5 'Zeilennummer
    sPathTxT = Application.GetOpenFilename("Alle Text Dateien (*.txt),*.txt")
    If sPathTxT = CStr(False) Then Exit Sub
    sTextZeile = ZeileLesen(lngZeile, sPathTxT)
End Sub

Public Function ZeileLesen(ZeilenNr As Long, ByVal 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

Diese Funktion erlaubt es Dir, eine beliebige Zeile aus der .txt-Datei auszulesen, ohne alle Zeilen vorher durchzugehen.


Praktische Beispiele

Ein Beispiel zur Anwendung des Codes könnte sein, dass Du eine Log-Datei hast und nur bestimmte Fehlerzeilen extrahieren möchtest. Nutze den Code, um gezielt nach diesen Zeilen zu suchen und sie in ein Excel-Dokument zu übertragen.


Tipps für Profis

  • Optimiere den Code: Überlege, ob Du den Code weiter optimieren kannst, indem Du nur die benötigten Zeilen einliest und die Schleifenbedingungen anpasst.
  • Fehlerbehandlung: Füge Fehlerbehandlungsroutinen hinzu, um sicherzustellen, dass der Code auch bei unerwarteten Problemen stabil läuft.
  • Speichermanagement: Achte darauf, den Speicher effizient zu nutzen, insbesondere bei großen Textdateien.

FAQ: Häufige Fragen

1. Kann ich auch aus DOCX-Dateien lesen?
Nein, Du kannst nicht direkt aus DOCX-Dateien lesen, da sie eine andere Struktur haben. Speichere die Datei vorher als .txt.

2. Wie kann ich mehrere Zeilen gleichzeitig einlesen?
Du kannst die Fallunterscheidung im Code anpassen, um mehrere Zeilen gleichzeitig abzuhandeln. Nutze dafür eine Array- oder Collection-Struktur, um die Zeilennummern zu speichern.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige