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

Zeilenzahl einer txt-datei bestimmen

Forumthread: Zeilenzahl einer txt-datei bestimmen

Zeilenzahl einer txt-datei bestimmen
28.11.2007 16:21:10
Jochen
Hallo zusammen,
ich möchte per Macro die Zeilenzahl einer txt-Datei bestimmen. Kann mir jemadn sagen, wie ich das machen kann?
Danke & Gruß
Jochen

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Zeilenzahl einer txt-datei bestimmen
28.11.2007 16:30:03
Rudi
Hallo,
eine Möglichkeit:

Sub tt()
Dim n As Long, text As String
Open "c:\temp\test.txt" For Input As #1
Do While Not EOF(1)
Line Input #1, text
n = n + 1
Loop
Close #1
MsgBox n
End Sub


Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

Anzeige
AW: Zeilenzahl einer txt-datei bestimmen
28.11.2007 17:12:52
Jochen
Hallo zusammen,
danke für die schnelle Antwort. leider habe ich zwei Dinge vergessen zu sagen:
1) ich habe scho ein skript, daß mir aber zu lange dauert:
Set Dat = Fso.OpenTextFile(Filename, 1, False)
Do While Dat.AtEndOfStream True
txt = Dat.ReadLine
Zeilenzahl = Zeilenzahl + 1
Loop
Dat.Close
Es wird halt wirklcih jede zeile gelesen.
2) Die Dateien die ich auswerten möchte haben alle so um die 700.000 Zeilen. Also sollte es nicht zuuuu lange dauern.
kennt evtl. jemand eine schnellere Variante?
Dankää
Jochen

Anzeige
AW: Zeilenzahl einer txt-datei bestimmen
28.11.2007 19:40:00
Josef
Hallo Jochen
schneller wird's nicht gehen.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub Zeilen()
'Quelle: http://www.activevb.de/tipps/vb6tipps/tipp0611.html
Dim Path As String
Dim z As Long

Path = "F:\Office\1000000lines.txt"

z = GetLinesFromTextFile(Path)

MsgBox z & " Zeilen"
End Sub

Public Function GetLinesFromTextFile(Path As String) As Long
'zählt die LinesCount einer Textdatei, die Datei muss vorhanden sein

Dim FNr As Integer
Dim FileLength As Double
Dim BytesRead As Double
Dim ByteToRead As Long
Dim s As String
Dim LinesCount As Long

'ist die Datei leer
If FileLen(Path) = 0 Then
    Exit Function
End If

'Block zum Auslesen, 64K
ByteToRead = 256& * 256&
'eine Pipe zuweisen
FNr = FreeFile
'Datei binär öffnen
Open Path For Binary As #FNr
'Dateilänge feststellen
FileLength = LOF(FNr)

'Blockweise auslesen
Do
    If FileLength = BytesRead Then
        'alles ausgelesen
        Exit Do
    ElseIf (FileLength - BytesRead) < ByteToRead Then
        'den letzten Rest bestimmen
        ByteToRead = FileLength - BytesRead
    End If
    
    'Variable bereitstellen in Blockgrösse
    s = Space(ByteToRead)
    'Block einlesen
    Get #FNr, BytesRead + 1, s
    'LinesCount in Subroutine feststellen
    LinesCount = LinesCount + GetLinesFromString(s)
    'wie weit wurde bereits eingelesen
    BytesRead = BytesRead + ByteToRead
Loop
'der Zähler muss um 1 erhöht werden
LinesCount = LinesCount + 1

'war das letzte Zeichen ein Trenner ?
s = Space(1)
Get #FNr, FileLength, s
If s = Chr(10) Then
    'ja, letzte Zeile nicht gefüllt
    LinesCount = LinesCount - 1
End If
Close FNr

'Wert an Function
GetLinesFromTextFile = LinesCount
End Function

Private Function GetLinesFromString(s As String)
' Zeilenumbrüche in einem String zählen,
' es wird nur der LineFeed ausgewertet

Dim i As Long, j As Long, z As Long

i = 1
Do
    'suche nach Zeilentrenner
    j = InStr(i, s, Chr(10))
    If j = 0 Then
        'nix (mehr) da
        Exit Do
    End If
    'add
    z = z + 1
    'neue Position
    i = j + 1
Loop

'Wert an Function
GetLinesFromString = z
End Function

Gruß Sepp

Anzeige
AW: Zeilenzahl einer txt-datei bestimmen
28.11.2007 19:41:00
Rudi
Hallo,
mein Script dürfte bei 700.000 Zeile n ca 1 Sekunde durch sein.
Gruß
Rudi
Eine Kuh mach muh, viele Kühe machen Mühe.

Zeilenzahl einer txt-datei bestimmen -CLOSED-
28.11.2007 21:01:00
Jochen
Hallo ihr beiden,
Noch mal "Danke" für Eure Rückmeldung. Das Skript von Sepp funktioniert gut, Deines Rudi, hängt sich bei mir auf.
Trotzdem Dank für Euer Angagement.
Schönen Abend noch
Jochen
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Zeilenzahl einer TXT-Datei mit Excel VBA bestimmen


Schritt-für-Schritt-Anleitung

Um die Zeilenzahl einer TXT-Datei in Excel mittels VBA zu bestimmen, kannst Du folgendes Makro verwenden:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Erstelle ein neues Modul:
    • Klicke im Menü auf Einfügen und wähle Modul.
  3. Füge den folgenden Code in das Modul ein:
Sub ZeilenAnzahl()
    Dim n As Long, text As String
    Open "C:\temp\test.txt" For Input As #1
    Do While Not EOF(1)
        Line Input #1, text
        n = n + 1
    Loop
    Close #1
    MsgBox n & " Zeilen"
End Sub
  1. Passe den Pfad "C:\temp\test.txt" an die Position Deiner TXT-Datei an.
  2. Schließe den VBA-Editor und gehe zurück zu Excel.
  3. Führe das Makro aus, um die Zeilenanzahl zu ermitteln.

Häufige Fehler und Lösungen

  • Makro läuft zu langsam: Wenn Du mit großen Dateien (z.B. 700.000 Zeilen) arbeitest, kann das Makro lange dauern. In diesem Fall könnte die Verwendung von Binärdateizugriff schneller sein.
  • Dateipfad ist falsch: Stelle sicher, dass der Pfad zur TXT-Datei korrekt ist. Ein einfacher Tippfehler kann dazu führen, dass das Makro nicht funktioniert.
  • Datei existiert nicht: Überprüfe, ob die TXT-Datei tatsächlich am angegebenen Ort vorhanden ist.

Alternative Methoden

Eine alternative Methode zur Bestimmung der Zeilenzahl ist die Verwendung der FileSystemObject. Hier ist ein Beispiel:

Sub ZeilenAnzahlFSO()
    Dim fso As Object
    Dim Dat As Object
    Dim Zeilenzahl As Long
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set Dat = fso.OpenTextFile("C:\temp\test.txt", 1, False)

    Do While Not Dat.AtEndOfStream
        Dat.ReadLine
        Zeilenzahl = Zeilenzahl + 1
    Loop
    Dat.Close
    MsgBox Zeilenzahl & " Zeilen"
End Sub

Diese Methode könnte in einigen Fällen schneller sein, da sie nicht jede Zeile in den Speicher lädt.


Praktische Beispiele

Hier ist ein Beispiel für ein Makro, das die Zeilenanzahl einer Datei zählt und die Zeit misst:

Sub ZeilenAnzahlMitZeit()
    Dim StartZeit As Double
    Dim n As Long, text As String
    StartZeit = Timer
    Open "C:\temp\test.txt" For Input As #1
    Do While Not EOF(1)
        Line Input #1, text
        n = n + 1
    Loop
    Close #1
    MsgBox n & " Zeilen, Zeit: " & Format(Timer - StartZeit, "0.00") & " Sekunden"
End Sub

Dieses Makro gibt Dir nicht nur die Zeilenanzahl zurück, sondern auch die benötigte Zeit zur Verarbeitung.


Tipps für Profis

  • Optimierung: Wenn Du oft mit großen TXT-Dateien arbeitest, solltest Du in Erwägung ziehen, den Binärzugriff zu verwenden, um die Leistung zu verbessern.
  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung in Dein Makro, um unerwartete Fehler abzufangen und zu melden.
  • Dateiformate: Stelle sicher, dass die TXT-Datei im richtigen Format vorliegt, um mögliche Probleme beim Einlesen zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich die Zeilenanzahl einer großen Datei schnell ermitteln? Durch die Verwendung von Binärdateizugriff kann die Verarbeitungsgeschwindigkeit erheblich gesteigert werden.

2. Was tun, wenn das Makro nicht funktioniert? Überprüfe den angegebenen Dateipfad und stelle sicher, dass die Datei existiert. Kontrolliere auch, ob Du die richtigen Berechtigungen zum Lesen der Datei hast.

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