Mit unserem Tipp Textdateien komfortabel einlesen und schreiben haben wir Ihnen einige nützliche Prozeduren zum Lesen und Schreiben von Textdateien vorgestellt. Was allerdings noch fehlt, ist das gezielte Löschen einer bestimmten Zeile innerhalb der Textdatei. 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 37.239 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (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. |
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. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
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. |