Entwickler-Ecke
Dateizugriff - Komplette Zeile aus *.txt-Datei löschen
MephistoFFF - Do 05.02.09 16:41
Titel: Komplette Zeile aus *.txt-Datei löschen
Und schon wieder hat er eine Frage^^
Hab schon gesucht ( Google und auch hier ), aber nichts Brauchbares gefunden...
Wie kann ich Folgendes am besten lösen?
Das Programm soll aus einer Textdatei ( *.txt ) eine bestimmte Zeile löschen. Wichtig ist, dass die gesamte Zeile gelöscht wird, und das Nachfolgende sozusagen "aufrückt". Das beste wäre, wenn man die zu löschende Zeile genau nach dem in der Zeile stehenden Text ermitteln könnte.
Vielen Dank schonmal ;) .
mfG
Delete - Do 05.02.09 17:06
Lad die Datei in eine TStringlist, durchsuche diese zeilenweise nach dem Text und lösche die betreffende Zeile bei Fund. Anschließend wieder speichern. Bedenke aber dabei, dass Du die Schleife absteigend definieren musst (zumindest bei einer for-Schleife), sonst knallt es.
jaenicke - Do 05.02.09 17:07
Wenn die Datei nicht allzu groß ist, dann kannst du eine TStringList nehmen, die Datei da hineinladen, direkt Delete aufrufen und die Datei wieder speichern. ;-)
MephistoFFF - Do 05.02.09 17:17
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button1Click(Sender: TObject); var strlst: TStringList; begin strlst := TStringList.Create; try strlst.LoadFromFile('test.txt'); while (strlst.IndexOf('abcd') <> -1) do strlst.Delete(strlst.IndexOf('abcd')); strlst.SaveToFile('test.txt'); finally strlst.Free; end; end; |
So hab ichs schon probiert, aber da passiert garnichts...
Dateinamen etc. sind natürlich angepasst ;) ...
mfG
Delete - Do 05.02.09 17:20
Was steht denn in der betreffenden Zeile? Nur 'abcd' oder noch etwas anderes?
MephistoFFF - Do 05.02.09 17:25
DeddyH hat folgendes geschrieben : |
Was steht denn in der betreffenden Zeile? Nur 'abcd' oder noch etwas anderes? |
Wie gesagt, das wird dann mit ListBox1.Items.Strings[strtoint(Index)] ersetzt ( das abcd )...
Der Text ist dann ein kurzer Text, er kann, muss aber nicht, Leerzeichen und "." enthalten...
mfG
Delete - Do 05.02.09 17:43
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.Button1Click(Sender: TObject); var strlst: TStringList; i: integer; begin strlst := TStringList.Create; try strlst.LoadFromFile('test.txt'); for i := strlst.Count - 1 downto 0 do if Pos('abcd',strlst[i]) > 0 then strlst.Delete(i); strlst.SaveToFile('test.txt'); finally strlst.Free; end; end; |
MephistoFFF - Do 05.02.09 18:40
DeddyH hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.Button1Click(Sender: TObject); var strlst: TStringList; i: integer; begin strlst := TStringList.Create; try strlst.LoadFromFile('test.txt'); for i := strlst.Count - 1 downto 0 do if Pos('abcd',strlst[i]) > 0 then strlst.Delete(i); strlst.SaveToFile('test.txt'); finally strlst.Free; end; end; | |
Der Code hier funktioniert wunderbar, aber erst nachdem ich einen anderen Fehler behoben habe, aufgrund dessen die Prozedur zum löschen nie aufgerufen wurde... ^^
Also danke nochmal an alle^^
mfG
MephistoFFF - Do 05.02.09 19:33
Sorry für den Doppelpost, aber mir ist gerade noch was aufgefallen:
Es funktioniert soweit alles wunderbar, die Zeilen rutschen auch nach...
ABER: Am Ende der Textdatei entstehen neue Zeilen, zwar ohne text, aber sie sind eben da und werden dementsprechend mit in die listbox übernommen, was ein ziemlich großes Problem darstellt^^
kann ich das irgendwie beheben?
mfG
EDIT: habs jetzt erstmal provisorisch so gelöst:
Delphi-Quelltext
1: 2: 3: 4: 5:
| for i := 0 to Listbox1.items.count -1 do if ListBox1.Items.Strings[i]= '' then begin listbox1.items.Delete(i); end; |
^^
jaenicke - Do 05.02.09 20:28
Delphi-Quelltext
1:
| ListBox1.Text := Trim(ListBox1.Text); |
;-)
MephistoFFF - Do 05.02.09 20:33
jaenicke hat folgendes geschrieben : |
Delphi-Quelltext 1:
| ListBox1.Text := Trim(ListBox1.Text); | ;-) |
Noch nie von "Trim" gehört...^^ Was genau macht das? Im Prinzip das gleiche wie "meine" for-Schleife?
mfG^^
jaenicke - Do 05.02.09 20:40
F1 hilft. ;-)
Trim entfernt alle Leerzeichen und Steuerzeichen am Anfang und Ende eines Strings.
MephistoFFF - Do 05.02.09 20:44
jaenicke hat folgendes geschrieben : |
F1 hilft. ;-)
Trim entfernt alle Leerzeichen und Steuerzeichen am Anfang und Ende eines Strings. |
Sehr gut, vielen Dank...
Damit dürfte das Thema aber nun wirklich erledigt sein^^
mfG
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!