Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi SaveDialog (https://www.delphipraxis.net/145987-savedialog.html)

ecHo89 11. Jan 2010 23:45


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:
SaveDialog1.Filename := SaveDialog1.Filename + '.txt';
AssignFile(F, SaveDialog1.Filename);
Rewrite(F);
WriteLn(F, Listbox.items.text);
CloseFile(F);
Nur dann sind in dieser Datei am Ende 2 leere Zeilen, obwohl in der Listbox definitiv keine leere Zeile ist.
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

Sir Rufo 11. Jan 2010 23:49

Re: SaveDialog
 
Speicher doch einfach mit
Delphi-Quellcode:
ListBox.Items.SaveToFile( SaveDialog1.FileName );
Aber du wirst da trotzdem eine Leerzeile am Ende haben
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

s.h.a.r.k 11. Jan 2010 23:52

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.

ecHo89 12. Jan 2010 00:13

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 ^^

ecHo89 12. Jan 2010 00:19

Re: SaveDialog
 
Delphi-Quellcode:
ListBox.Items.SaveToFile( SaveDialog1.FileName );
Jap damit wirds aufjedenfall auch nix auf Dauer.

Sir Rufo 12. Jan 2010 00:20

Re: SaveDialog
 
Zitat:

Zitat von ecHo89
P.S.

Delphi-Quellcode:
ListBox.Items.SaveToFile( SaveDialog1.FileName );
Selbst damit gibts ne Leerzeile bei mir, bei dir nicht?!

Zitat:

Zitat von Sir Rufo
Speicher doch einfach mit
Delphi-Quellcode:
ListBox.Items.SaveToFile( SaveDialog1.FileName );
Aber du wirst da trotzdem eine Leerzeile am Ende haben

Lesen?

ecHo89 12. Jan 2010 00:21

Re: SaveDialog
 
hab mich verlesen und schon längst editiert ;-)
war wohl noch nicht abgespeichert als du es gelesen hast :P

omata 12. Jan 2010 00:28

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;

ecHo89 12. Jan 2010 00:32

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.

Sir Rufo 12. Jan 2010 00:32

Re: SaveDialog
 
Zitat:

Zitat von omata
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;

Ergibt das gleiche Ergebnis wie SaveToFile

Am Ende ist und bleibt eine Leerzeile ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz