Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Stringlist.SaveToFile (https://www.delphipraxis.net/13158-stringlist-savetofile.html)

Tonic1024 12. Dez 2003 08:43


Stringlist.SaveToFile
 
Moin...

Sagt mal ist das normal, dass TStringlist.SaveToFile am Ende ein "#13#10" schreibt? Kann man das irgendwie unterdrücken?

Soll ne Schnittstelle zu einem Unix-Programm werden und das kommt auf die Leerzeile nicht klar...


Bios denne...

himitsu 12. Dez 2003 08:51

Re: Stringlist.SaveToFile
 
Ein Hallöle von http://www.FrankNStein.de/Smiley-Wolke.gif,

das ist normal, StringList macht an jedes Zeilenende, also auch an das Letzte immer einen Zeilenwechsel (#13#10/CRLF).

Wenn du das nicht wills, mußt du eben Selber speichern.
Delphi-Quellcode:
Var S: String;
  F: TextFile;

S := Copy(StringList.Text, 1, Length(StringList.Text) - 2);
AssignFile(F, 'Da.tei');
Rewrite(F);
Write(F, S);
CloseFile(F);
(nicht getestet, dürfte aber geh'n)

[add]
Oder so (falls z.B. mehrere leere Zeilen am Ende sind):
Delphi-Quellcode:
Var S: String;
  F: TextFile;

S := StringList.Text;
While (S[Length(S)] = #13) or (S[Length(S)] = #10) do
  Delete(S, Length(S), 1);
AssignFile(F, 'Da.tei');
Rewrite(F);
Write(F, S);
CloseFile(F);
http://www.delphipraxis.net/images/common/divider.jpg
http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif

Tonic1024 12. Dez 2003 09:06

Re: Stringlist.SaveToFile
 
Alles klar, das wollt ich nur wissen...

Ich werde mir wohl och was anderes überlegen müssen. Die Stringlist wird in einem Modul (DLL) gefüttert und im Hauptmodul (der eigentlichen Applikation) mit SaveToFile geschrieben...

Wenn ich das Hauptmodul ändere zieht das einen ganzen "Arm" von Updates nach sich... Dann beschäftige ich mehrer Leute einen ganzen Tag lang damit die EXE zu kopieren... :)

Danke...

himitsu 12. Dez 2003 09:26

Re: Stringlist.SaveToFile
 
Noch ein Hallöle von http://www.FrankNStein.de/Smiley-Wolke.gif,

Es geht auch anders rum (beim einlesen der Datei - nach dem sie schon geschrieben wurde):
Delphi-Quellcode:
Var S: String;

(Datei in S einlesen)

{Zeilenwechsel entfernen}
While (S[Length(S)] = #13) or (S[Length(S)] = #10) do
  Delete(S, Length(S), 1);

(S an Schnittstelle senden)
http://www.delphipraxis.net/images/common/divider.jpg
http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif

Christian Seehase 12. Dez 2003 12:06

Re: Stringlist.SaveToFile
 
Moin Tonic,

ich denke mal, dass das Problem nicht die Leerzeile, sondern das #13 Zeichen ist.
Soweit ich weiss, wird unter UNIX nur #10 als Zeilenende genutzt, Du müsstest also sämtliche #13#10 in der Datei durch #10 ersetzen.
Beim Einlesen in eine TStringList entfällt das Problem, da LoadFromFile aus #10 automatisch #13#10 macht.

Am einfachsten dürfte das gehen, indem Du TStringList.Text in eine Stringvariable überträgst, in dieser, z.B. mit StringReplace, die #13#10 Kombinationen durch #10 ersetzt, und die Variable dann, z.B. mittels TFileStream, als Datei wegspeicherst.
Ob StringReplace geeignet ist hängt allerdings auch von der Datenmenge ab.

Tonic1024 15. Dez 2003 14:24

Re: Stringlist.SaveToFile
 
Moin...

Ihr habt ja beide Recht.

Nur kann ich keinen Stream benutzen, weil ich eine TStringList an die Schreiben-Prozedur übergeben muss. Die Prozedur kann ich nur ändern in Verbindung mit einem globalen Programmupdate. (Möchte ich vermeiden)

Das mit dem Einlesen ist zwar auch ein guter Ansatz, bedeutet aber, dass der user ein extra-Programm ausführen muss das die Export-Datei vor dem Import übersetzen muss.

Ich habe das am Wochenende jetzt so gemacht, dass es eben das dritte Prog gibt (den übersetzer) und quasi als Übergangslösung benutzt wird, bis ein reguläres ProgrammUpdate durchgeführt wird.

Der bittere Beigeschmack an Übergangslösungen ist aber ja immer, dass sie nach einer gewissen Zeit gerne als Standard adaptiert werden... Und das will ich auch nicht :)

Wie gut das man nicht immer für alles verantwortlich sein kann. :wink:

Bis denne...


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:39 Uhr.

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