![]() |
SaveDialog
Hallo habe ein Problem mit dem Speichern einer Listbox in eine Textdatei,
mit diesem Code speicher ich eine Listbox in einer Datei. Funktioniert ohne Probleme.
Delphi-Quellcode:
Nur dann sind in dieser Datei am Ende 2 leere Zeilen, obwohl in der Listbox definitiv keine leere Zeile ist.
SaveDialog1.Filename := SaveDialog1.Filename + '.txt';
AssignFile(F, SaveDialog1.Filename); Rewrite(F); WriteLn(F, Listbox.items.text); CloseFile(F); Mir fällt nicht mehr ein, als die fehlerhafte Datei beim benutzen einzulesen und dann jedes mal temporär die letzten 2 Zeilen zu löschen. Die Datei ist jedoch für den Benutzer frei zugängig und wenn er dann meint die letzten beiden Leerzeilen löschen müssen ist das weniger gut. Im schlimmsten Fall kann ich mit der Lösung leben, wenn halt die letzten 2 Zeilen fehler dann bekommt der Benutzer das nicht mit einer Fehlermeldung mit, sondern nur mit einer nicht abgeschlossenen Funktion (letzten 2 Schritte fehlen). Direkt beim Speichern, wieder einlesen, löschen und wieder speichern funktioniert nicht (bereits getestet). Viele Grüße |
Re: SaveDialog
Speicher doch einfach mit
Delphi-Quellcode:
Aber du wirst da trotzdem eine Leerzeile am Ende haben
ListBox.Items.SaveToFile( SaveDialog1.FileName );
weil die ist da einfach mit drin (jede Zeile in der Listbox wird mit #13#10 abgeschlossen) Und bei deiner Vorgehensweise hängt WriteLn nochmals #13#10 daran -> ergibt 2 Leerzeilen |
Re: SaveDialog
Wie liest du denn die Datei erneut ein? Das darf halt einfach keinen Fehler verursachen? LoadFromFile wäre hier ein Stichwort, in so fern du die Daten wieder ein einer TListBox haben willst. Und wenn dann immer noch eine Leerzeile haben solltest, dann geh über die ListBox drüber und entferne alle leeren Zeilen.
|
Re: SaveDialog
ja, werd es jetzt wohl so machen, dass ich jedes mal beim einlesen drüber gehe und die leeren Zeilen lösche.
Ist zwar wieder einmal ein kleiner Beitrag zur Performanceeinbuße aber gut ^^ |
Re: SaveDialog
Delphi-Quellcode:
Jap damit wirds aufjedenfall auch nix auf Dauer.
ListBox.Items.SaveToFile( SaveDialog1.FileName );
|
Re: SaveDialog
Zitat:
Zitat:
|
Re: SaveDialog
hab mich verlesen und schon längst editiert ;-)
war wohl noch nicht abgespeichert als du es gelesen hast :P |
Re: SaveDialog
Was spricht gegen folgendes?
Delphi-Quellcode:
SaveDialog.Filename := ChangeFileExt(SaveDialog.Filename, '.txt');
AssignFile(F, SaveDialog.Filename); try Rewrite(F); Write(F, Listbox.items.text); finally CloseFile(F); end; |
Re: SaveDialog
dass immer noch 1 Zeile am Ende steht, ob jetzt 1 oder 2 macht dann den Kohl auch nicht mehr fett.
Das ist ja oben beschrieben, dass auch das reine SavetoText auch eine hintenran hängt. |
Re: SaveDialog
Zitat:
Am Ende ist und bleibt eine Leerzeile ;) |
Re: SaveDialog
Ja? Ok, habe das zwar gerade ausprobiert und bei mir kommt keine Leerzeile. Aber wenn ihr meint...
Edit: Wie wäre es hiermit?
Delphi-Quellcode:
SaveDialog.Filename := ChangeFileExt(SaveDialog.Filename, '.txt');
AssignFile(F, SaveDialog.Filename); try Rewrite(F); Write(F, TrimRight(Listbox.items.text)); finally CloseFile(F); end; |
Re: SaveDialog
ich werd es mal testen ;)
1 Leerzeile... |
Re: SaveDialog
Hast du zufällig in deinen Lines von der ListBox eine Leerzeile am Ende? Ich habe da nämlich keine und erhalte so auch keine.
|
Re: SaveDialog
nein, da ist definitiv keine Leerzeile :(
TrimRight hats jetzt behoben, Danke hatte erst deinen ersten Post ausprobiert. Wie kommt man auf solche Funktionen? Bin leider seit Win7 64bit aufgeschmissen, weil meine Delphi-Hilfe nicht mehr funktioniert :( |
Re: SaveDialog
Hast du auch mal mein Edit aus #11 beachtet?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz