Zeilen einer Datei mit VB löschen

  • #1
J

Johannes

Bekanntes Mitglied
Themenersteller
Dabei seit
07.02.2002
Beiträge
1.165
Reaktionspunkte
0
hallo!

Wie kann man mit VB 6 eine Zeile einer Text-Datei löschen??
Vielen Dank für eure Hilfe.

mfg

jojo
 
  • #2
Hi
Ich habe dir hier mal eine Sub geschrieben ;D
Code:
Private Sub Zeileloeschen(Dateipfad As String, Zeile As Long)
    Dim Text As String
    Dim Line As String
    Dim F As Integer
    Dim i As Long
    Dim Zeilen() As String
    
    F = FreeFile
    
   ->Datei einlesen
    Open Dateipfad For Input As #F
        While Not EOF(F)
            Line Input #F, Line
            Text = Text & Line & <:>
        Wend
    Close #F
    
   ->Alle Trennzeichen am Ende entfernen
    Do Until Right(Text, 3) <> <:>
        Text = Left(Text, Len(Text) - 3)
    Loop
    
   ->Inhalt von Text in eine Array-Variable schreiben
    Zeilen = Split(Text, <:>)
    
   ->Datei ohne die angegebene Zeile neu schreiben
    Open Dateipfad For Output As #F
        For i = 0 To UBound(Zeilen)
            If i + 1 <> Zeile Then Print #F, Zeilen(i)
        Next i
    Close #F
End Sub
Der Aufruf ist ganz einfach :
Code:
Zeileloeschen C:\Windows\Desktop\Test.txt, 2
Hier wird die 2. Zeile gelöscht.

Mfg Alexander :D
 
  • #3
Hi!

danke für deine Antwort, jedoch verstehe ich nciht ganz die Sache mit den Trennzeichen und der Array Variable..

mfg

Jojo
 
  • #4
Hi
Code:
'Alle Trennzeichen am Ende entfernen
Do Until Right(Text, 3) <> <:>
      Text = Left(Text, Len(Text) - 3)
Loop
Die Datei wurde zeilenweise eingelesen. Dabei wurden auch leere Zeilen eingelesen.
Wenn diese Funktion nicht eingebaut wäre, würde für jede leere Zeile noch ein <:> dahintergestellt. Das würde beispielsweise dann so aussehen : Hallo<:>Leute<:><:><:>

Code:
'Inhalt von Text in eine Array-Variable schreiben
Zeilen = Split(Text, <:>)
Hier werden die Zeilen in eine Array-Variable geschrieben.
Den Inhalt einer Array-Variable kann wie eine Liste aufgerufen werden.
Wäre die erste Funktion nicht eingebaut, wären die leeren Zeilen auch in die neue Datei geschreiben wurden.

Infos zu Array-Variablen : http://www.vbarchiv.net/faq/strings_array.php

Mfg Alexander
 
  • #5
Hi!

Ich verstehe den Code mit den <:>-Dingern nicht so wirklich, sorry... :-[

mfg

Jojo
 
  • #6
Hi

Die Zeilenumbrüche von der Text-Datei werden in der Text-Variable als <:> gekennzeichnet. Dies kann auch mit einem anderen Zeichen gekennzeichnet werden z.b.: <> ()
Es muss nur ein Zeichen sein, das nicht in einem normalen Text enthalten ist. Also kein ! ? = : usw.
Dieses <:> wird dann auch als Trennzeichen für die Split-Funktion benutzt.
-------------------------------------------------------------------------
Die Split-Funktion füllt die Array-Variable folgendermaßen :
Text = Test1<:>Test2<:>Test3

Array(0) = Test1
Array(1) = Test2
Array(2) = Test3

Mehr Infos zu der Split-Funktion gibt es hier : http://www.vbarchiv.net/commands/Split.php
Ein Array fängt standartmaßig immer mit 0 an.
--------------------------------------------------------------------------
Nun kann man den Inhalt von der Array so aufrufen:
MsgBox Array(2) ----->> gibt Test3 als MessageBox aus.

Bei dem ......
Do Until Right(Text,3) <> <:>
Text = Left(Text,Len(Text) - 3)
Loop
..... werden alle <:> am Ende entfernt.
Mehr Infos zu Do...Loop gibt es hier : http://www.vbarchiv.net/commands/DoLoop.php

Mfg Alexander
 
  • #7
Hi
Habe die Sub noch etwas verändert :D
Nun funktioniert sie auch ohne diese <:>
Code:
Private Sub Zeileloeschen(Dateipfad As String, Zeile As Long)
    Dim Text As String
    Dim F As Integer
    Dim i As Long
    Dim Zeilen() As String
   
    F = FreeFile
   
   ->Datei einlesen
    Open Dateipfad For Input As #F
        Text = Input(LOF(F), #F)
    Close #F
   
   ->Inhalt von Text in eine Array-Variable schreiben
    Zeilen = Split(Text, vbCrLf)
   
   ->Datei ohne die angegebene Zeile neu schreiben
    Open Dateipfad For Output As #F
        For i = 0 To UBound(Zeilen)
            If i + 1 <> Zeile Then Print #F, Zeilen(i)
        Next i
    Close #F
End Sub

Mfg Alexander
 
  • #8
Hi!

Kann es sein, dass bei deinem Code man genau wissen muss, wie die zeile heisst, die man löschen will, sprich, dass sie im Code vorkommen muss. naja, ich habe mir es so gedacht, dass man aus einem Drop-Down-menü namen aussuchen kann (so eine Art adressbuch). Wie man namen hinzufügt ist mir klar. Dann soll man genauso einen namen auswählen können und diesen Löschen..

So sieht mein Code zum Aufrufen auf:
Zeileloeschen App.Path + \Contacts.txt, 2
Was genau bedeutet denn die 2???

mfg

jojo
 
  • #9
Hi

Bei meiner Sub musst du die Zeile wissen, die gelöscht werden soll. Deine Frage war ja : Wie lösche ich eine Zeile aus einer Text-Datei. Diese Frage habe ich dir beantwortet. Es war keine Rede von Wörter löschen.

Bei Wörtern gibt es ein Problem :
Wir haben beispielsweise eine Liste in der alle im Text vorkommenden Wörter eingetragen sind. Wenn du nun ein Wort aussuchst und es löscht. Dann werden alle Wörter die so heißen auch gelöscht.
Außer du weißt die Position des Worters. Dann könnte man die Positionsdaten angeben und gezielt löschen.

Die 2 am Ende wurde hier schon beantwortet :
Alexander16 schrieb:
Der Aufruf ist ganz einfach :
Code:
Zeileloeschen C:\Windows\Desktop\Test.txt, 2
Hier wird die 2. Zeile gelöscht.

Mfg Alexander :D
 
  • #10
Hi!

In der Datei kommt kein Wort doppelt vor...
mfg

Jojo
 
  • #11
Hi
Das geht dann ganz easy ;)
Code:
Private Sub Command1_Click()
    Text1.Text = Replace(Text1.Text, DeinWort, )
End Sub

Mfg Alexander
 
  • #12
Hi!

Das klappt irgendwie nicht...
Text1.text heisst bei mir Contacts.txt (<-- Ist ne Datei)
DeinWort habe ich durch Target_1.text ersetzt (so heisst das Textfenster vo man das Wort, das gelöscht werden soll auswählen kann.

Meine zeile sieht so aus:
Private Sub Remove_Contact_Click()
Datei = App.Path + \Contacts.txt
Datei = Replace(Datei, Target_1.Text, )
End Sub

mfg

Jojo
 
  • #13
Hi

Das ist klar, dass es nicht geht. Du musst die Text-Datei erst in eine Variable schreiben lassen.

Hier habe ich dir mal den fertigen Code geschrieben :
Code:
Private Sub Wortloeschen(Dateipfad As String, Wort As String)
    Dim Text As String
    Dim F As Integer
    
    F = FreeFile
    
   ->Datei einlesen und in die Text-Variable schreiben
    Open Dateipfad For Input As #F
        Text = Input(LOF(F), #F)
    Close #F
    
   ->Wort loeschen
    Text = Replace(Text, Wort, )
    
   ->Datei ohne das Wort neu schreiben
    Open Dateipfad For Output As #F
        Print #F, Text
    Close #F
End Sub

Private Sub Remove_Contact_Click()
    Wortloeschen App.Path + \Contacts.txt, Target_1.Text
End Sub

Mfg Alexander 8)
 
  • #14
Hi!

Ahh... ;D Jetzt klappts!
Vielen Dank für deine Hilfe!! :D

mfg

Jojo
 
Thema:

Zeilen einer Datei mit VB löschen

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.838
Beiträge
707.961
Mitglieder
51.491
Neuestes Mitglied
haraldmuc
Oben