Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1136to1140
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
Inhaltsverzeichnis

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

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

336 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige