# Zeile löschen in einer Textdatei



## gabrielgsell (29. September 2004)

Hallo zusammen,
Ich möchte gern eine bestimmte Zeile in einer Textdatei löschen. Wisst ihr wie das geht?

Die Textdatei ist bereits eingelesen und in Zeilen unterteilt. So ist mein Code: 

```
Dim KNr As Integer
Dim Inhalt As String
Dim Zeile() As String
Dim Datei As String
 
Datei = "C:\Datei.txt"
KNr = FreeFile
Inhalt = Space(FileLen(Datei))

Open Datei For Binary As KNr
Get KNr, , Inhalt
Zeile = Split(Inhalt, vbNewLine)
Close KNr
```
Dieser Tipp  hilft mir leider nicht weiter, weil ich diesen Code nicht verstehe.

Grüsse


----------



## MatMagic (29. September 2004)

Mit deinem Code müsstest du erst noch die Anzahl der Zeilen in deiner Text Datei seperat ermitteln da du die Datei in einem Rutsch einliest. 
Dann die einzelnen Zeilen in  Integerstrings einlesen um nachher die entsprechende Zeile explizit entfernen zu können.
Wenn deine Text Datei *nicht allzu groß* ist würde ich sie Zeilenweise einlesen.
Dann hast du 
 - die Datei eingelesen
- die Zeilenzahl bestimmt
- und die einzelnen Zeilen in einzelnen Strings
Damit kannst du dann bestimmte Zeilen "löschen" bzw. gar nicht erst einfügen.
Das würde dann so aussehen:


```
diezeile ist die nummer der zeile welche nachher entfernt wird 
dim diezeile as long
dim counti as long
dim zeile as string
dim dt as string
dim text as string
' Ich geh mal davon aus das du mit 10000 Zeilen auskommst - sonst zahl erhöhen  
dim zeiler(10000) as string 
dim t as long

dt = "c:\text.txt"
k = FreeFile

Open dt For Input As 1
Do Until EOF(1) = True
Line Input #1, zeile
'Zeilen deiner Datei zählen  
counti = counti + 1 
' Zeilen einzeln an string übergeben   
zeiler(counti) = zeile
DoEvents
Loop
Close 1

'  Deinen Text zusammenfügen ohne die gewünschte Zeile  '
for t = 1 to counti
if counti <> diezeile then text = text & zeiler(t)
next t
```

Du musst natürlich noch irgendwie bestimmen welche Zeile gelöscht werden soll - zum Testen sollte da ja ein Textfeld reichen wo du die entsprechende Zeile eingibst und diesen Wert dann an die Variable "diezeile" übergibst.

Ich hoffe ich habe dich überhaupt richtig verstanden und das es so funktioniert.
Gruß
Mat


----------



## JensG (29. September 2004)

Der Tipp aus dem vb@rchiv ist doch gar nicht 
so schwer zu verstehen.

Du musst die Zeile ermittlen die gelöscht werden soll
oder den Inhalt dieser Zeile wissen.
Dann läuftst du mit Line Input die Datei durch
und schreibst alles mit Print in eine Temporäre
Datei außer der angegebenen Zeile.
Dann werden beide Dateien geschlossen und die
Orginale wird gelöscht.
Dann nur noch die temp. Datei umbenennen, fertig.


----------



## gabrielgsell (29. September 2004)

Ciao,
erst mal vielen Dank für deine Antwort.


> Mit deinem Code müsstest du erst noch die Anzahl der Zeilen in deiner Text Datei seperat ermitteln da du die Datei in einem Rutsch einliest.


Dies mach ich so:

```
x = Format$(UBound(strZeile) + 1, "#,##0")
```



> Wenn deine Text Datei nicht allzu groß ist würde ich sie Zeilenweise einlesen.


 Meine Datei ist gross, nämlich ca. 66Mbyte.

Ich hab ein relativ komplexes Programm geschrieben und dies funktioniert soweit auch, ich muss nur noch bestimmte Zeilen löschen.

Das ich diese Zeile einfach nicht einlese, ist eine Möglichkeit.
Gibt es nicht einen Befehl zum eine Zeile entfernen? Z.b. Replace?

Grüsse


----------



## gabrielgsell (29. September 2004)

Konnte es so lösen, dass ich diese Zeile einfach nicht einlese. Vielen Dank für den Tipp und die Erklärung.
Grüsse


----------

