Mit unserem Tipp Hierfür gibt es verschiedene Möglichkeiten 1. Datei zeilenweise lesen und temporär zwischenspeichern ' Bestimmte Zeile aus einer Textdatei löschen Public Sub txt_DeleteLine( _ ByVal sFilename As String, _ ByVal lLineToDelete As Long) Dim F As Integer Dim N As Integer Dim sFileTemp As String Dim lCount As Long Dim sLine As String Dim bResult As Boolean ' temporäre Datei zum Zwischenspeichern sFileTemp = sFilename & "~" ' Textdatei zum Lesen öffnen F = FreeFile Open sFilename For Input As #F ' temporäre Datei zum Schreiben öffnen N = FreeFile Open sFileTemp For Output As #N ' Textdatei zeilenweise einlesen und schreiben While Not EOF(F) lCount = lCount + 1 Line Input #F, sLine If lCount <> lLineToDelete Then Print #N, sLine Wend ' Dateien schliessen Close #F: Close #N ' Textdatei löschen Kill sFilename ' temporäre Datei in Textdatei umbenennen Name sFileTemp As sFilename End Sub Das funktioniert soweit ganz gut. 2. Datei komplett einlesen, in ein Array umwandeln und gezielt das gewünschte Array-Element löschen Zunächst lesen wir den Inhalt der Textdatei in einem Rutsch aus und speichern den Inhalt in einer String-Variable: Dim F As Integer Dim sInhalt As String F = FreeFile Open sFilename For Binary As #F sInhalt = Space$(Lof(F)) Get #F, , sInhalt Close #F Da es sich um eine textbasierte Datei handelt, sind die einzelnen Zeilen durch ein vbCrLf voneinander getrennt. Über die Split-Funktion machen wir aus dem String ein String-Array. Dim sLines() As String sLines = Split(sInhalt, vbCrLf) sInhalt = "" Nun löschen wir die gewünschte Zeile aus dem Array: Dim I As Long Dim lCount As Long lCount = UBound(sLines) - 1 For I = lLineToDelete - 1 To lCount - 1 sLines(I) = sLines(I + 1) Next I ReDim Preserve sLines(lCount - 1) Anschliessend machen wir aus dem String-Array wieder einen normalen String und speichern diesen zurück in die Datei: F = FreeFile Open sFilename For Output As #F Print #F, Join(sLines, vbCrLf); Close #F Und hier die vollständig dokumentierte Prozedur txt_DeleteLine: ' Bestimmte Zeile aus einer Textdatei löschen Public Sub txt_DeleteLine( _ ByVal sFilename As String, _ ByVal lLineToDelete As Long) Dim F As Integer Dim I As Long Dim lCount As Long Dim sInhalt As String Dim sLines() As String ' Textdatei in einem Rutsch einlesen F = FreeFile Open sFilename For Binary As #F sInhalt = Space$(LOF(F)) Get #F, , sInhalt Close #F ' Inhalt in ein String-Array umwandeln sLines = Split(sInhalt, vbCrLf) sInhalt = "" ' gewünschtes Element (Zeile) aus dem Array entfernen lCount = UBound(sLines) - 1 For I = lLineToDelete - 1 To lCount - 1 sLines(I) = sLines(I + 1) Next I ReDim Preserve sLines(lCount - 1) ' Inhalt speichern F = FreeFile Open sFilename For Output As #F Print #F, Join(sLines, vbCrLf); Close #F End Sub Dieser Tipp wurde bereits 38.065 mal aufgerufen.
Anzeige
![]() ![]() ![]() (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
vb@rchiv CD Vol.6 ![]() ![]() Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats TOP! Unser Nr. 1 ![]() Neu! sevDataGrid 3.0 Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |