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

Forumthread: VBA Profis: Leerzeile in Textdatei löschen

VBA Profis: Leerzeile in Textdatei löschen
Joe
Hallo,
habe folgendes Makro "ZeileLöschenLangsam" gefunden um leere Zeilen in einer Textdatei zu löschen.
Das ganze funktioniert, aber dauert bei großen TextDateien (>20.000 Zeilen) extrem lange.
Ich habe deshhalb das Makro "ZeileLöschenSchnell" geschrieben welches nur wenige Sekunden benötigt um auch aus großen Dateien (>100.000 Zeilen) die leeren Zeilen zu löschen.
Ich glaube die rein technisch elegantere Lösung ist "ZeileLöschenLangsam". Hat jemand eine Idee warum der Code so langsam ist und wie man den beschleunigen kann?
Gruß Joe
Sub ZeileLoeschenLangsam()
Const ForReading = 1
Dim fs As Object, f As Object
Dim pfad As String, txtTmp As String
Dim txt As String
pfad = "c:\temp\p0001.txt" 'Anpassen ***********
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile(pfad, ForReading)
Do While f.AtEndOfStream  True
txtTmp = f.ReadLine
If Trim$(txtTmp)  "" Then _
txt = txt & vbCrLf & txtTmp
Loop
f.Close
Set f = fs.CreateTextFile(pfad, True)
f.Write txt
f.Close
End Sub
Sub ZeileLöschenSchnell()
X = "P0001"                              'Anpassen ***********
XFile = "c:\temp\" & X & ".txt"          'Anpassen ***********
XTemp = "c:\temp\" & X & "Temp" & ".txt" 'Anpassen ***********
Name XFile As XTemp
Fif = FreeFile
Open XTemp For Input As Fif
Fof = FreeFile
Open XFile For Output As Fof
While Not EOF(Fif)
Line Input #Fif, textline
If textline  "" Then
Print #Fof, textline
End If
Wend
Close Fif
Close Fof
Kill XTemp
End Sub

Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA Profis: Leerzeile in Textdatei löschen
11.02.2010 23:36:52
fcs
Hallo Joe,
Ich glaube die rein technisch elegantere Lösung ist "ZeileLöschenLangsam". Hat jemand eine Idee warum der Code so langsam ist und wie man den beschleunigen kann? hmm?
Wenn zwei Lösungen zum gleichen Ergebnis führen, dann ist für mich die schnellere Lösung immer die elegantere.
Warum soll die "Langsame" Lösung rein technisch die elegantere Lösung sein?
Hier speicherst du die vielen "nützlichen" Daten in einer Variablen, deren Inhalt Excel irgendwie verwalten muss. Und da hat Excel halt zu kauen und muss dann evtl. sogar temporär Daten außerhalb seines Kernarbeitsspeichers parken und das dauert. Zum Schluss schiebst du dann deine Sammlung in einem Rutsch in deine Zieldatei.
In der zweiten Lösung wird eine sehr schnelle Funktion des Betriebssystems genutzt für Datenzugriff auf die Dateien. Deren Nutzung ist doch eine sehr elegante Lösung. Dabei werden die "Textbrocken" in vielen kleinen Häppchen ausgelesen und in eine Zieldatei geschrieben. Damit kommt Excel sehr viel besser klar.
Gruß
Franz
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Leerzeilen in Textdateien mit VBA entfernen


Schritt-für-Schritt-Anleitung

Wenn Du leere Zeilen in einer Textdatei mit VBA entfernen möchtest, kannst Du die folgenden Makros nutzen. Diese sind in der Lage, sowohl kleine als auch große Dateien effizient zu verarbeiten.

  1. Öffne Excel und drücke Alt + F11, um den VBA-Editor zu starten.
  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (DeinWorkbook)", dann "Einfügen" > "Modul".
  3. Kopiere den gewünschten Code in das Modul.

Langsame Methode: (kann für große Dateien ineffizient sein)

Sub ZeileLoeschenLangsam()
    Const ForReading = 1
    Dim fs As Object, f As Object
    Dim pfad As String, txtTmp As String
    Dim txt As String
    pfad = "c:\temp\p0001.txt" 'Anpassen ***********
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.OpenTextFile(pfad, ForReading)
    Do While Not f.AtEndOfStream
        txtTmp = f.ReadLine
        If Trim$(txtTmp) <> "" Then _
            txt = txt & vbCrLf & txtTmp
    Loop
    f.Close
    Set f = fs.CreateTextFile(pfad, True)
    f.Write txt
    f.Close
End Sub

Schnelle Methode: (effizienter für große Dateien)

Sub ZeileLöschenSchnell()
    X = "P0001"                              'Anpassen ***********
    XFile = "c:\temp\" & X & ".txt"          'Anpassen ***********
    XTemp = "c:\temp\" & X & "Temp" & ".txt" 'Anpassen ***********
    Name XFile As XTemp
    Fif = FreeFile
    Open XTemp For Input As Fif
    Fof = FreeFile
    Open XFile For Output As Fof
    While Not EOF(Fif)
        Line Input #Fif, textline
        If textline <> "" Then
            Print #Fof, textline
        End If
    Wend
    Close Fif
    Close Fof
    Kill XTemp
End Sub

Häufige Fehler und Lösungen

  • Fehler: Datei nicht gefunden.

    • Lösung: Überprüfe den angegebenen Pfad und stelle sicher, dass die Datei existiert und der Pfad korrekt ist.
  • Fehler: Berechtigungen verweigert.

    • Lösung: Stelle sicher, dass Du die notwendigen Berechtigungen hast, um auf die Datei zuzugreifen. Versuche, Excel als Administrator zu starten.
  • Leere Zeilen werden nicht entfernt.

    • Lösung: Prüfe, ob die Zeilen tatsächlich leer sind oder nur unsichtbare Zeichen enthalten. Verwende Trim$() um sicherzustellen, dass auch Whitespace entfernt wird.

Alternative Methoden

Wenn Du eine Alternative zu VBA suchst, kannst Du auch Notepad verwenden, um leere Zeilen zu löschen:

  1. Öffne die Datei in Notepad.
  2. Drücke Strg + H, um das Suchfeld zu öffnen.
  3. Gib ^\s*\n in das Suchfeld ein und lasse das Ersetzen-Feld leer.
  4. Klicke auf "Alle ersetzen".

Diese Methode ist schnell und benötigt keine Programmierkenntnisse.


Praktische Beispiele

Hier sind einige Anwendungsfälle, in denen Du leerzeilen in Textdateien entfernen möchtest:

  • Datenbereinigung: Vor dem Import von Daten in MS Project kann es notwendig sein, leere Zeilen zu entfernen, um sicherzustellen, dass die Daten korrekt verarbeitet werden.
  • Protokolldateien: Bei der Analyse von Protokolldateien ist es hilfreich, leere Zeilen zu entfernen, um die Lesbarkeit zu erhöhen.

Tipps für Profis

  • Verwende die schnelle Methode bei großen Dateien, um die Effizienz zu steigern.
  • Wenn Du regelmäßig mit großen Textdateien arbeitest, erwäge das Erstellen eines benutzerdefinierten VBA-Tools, welches auch andere Datenbereinigungsfunktionen integriert.
  • Halte Deine VBA-Umgebung sauber, indem Du nicht verwendete Module regelmäßig entfernst.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass mein VBA-Code optimal läuft?
Überprüfe die Logik Deines Codes und teste mit kleineren Dateien, um die Geschwindigkeit zu messen.

2. Wie füge ich leere Zeilen in eine Textdatei ein?
Das Einfügen von leeren Zeilen kann in VBA einfach durch das Hinzufügen einer vbCrLf-Zeichenfolge in den Ausgabebereich erfolgen.

3. Gibt es eine Möglichkeit, leere Zeilen in Excel selbst zu entfernen?
Ja, in Excel kannst Du Filter verwenden oder die Funktion „Duplikate entfernen“, um leere Zeilen schnell zu identifizieren und zu löschen.

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