AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Stringlist.SaveToFile

Ein Thema von Tonic1024 · begonnen am 12. Dez 2003 · letzter Beitrag vom 15. Dez 2003
Antwort Antwort
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#1

Stringlist.SaveToFile

  Alt 12. Dez 2003, 08:43
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...
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#2

Re: Stringlist.SaveToFile

  Alt 12. Dez 2003, 08:51
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.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#3

Re: Stringlist.SaveToFile

  Alt 12. Dez 2003, 09:06
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...
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#4

Re: Stringlist.SaveToFile

  Alt 12. Dez 2003, 09:26
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.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Stringlist.SaveToFile

  Alt 12. Dez 2003, 12:06
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#6

Re: Stringlist.SaveToFile

  Alt 15. Dez 2003, 14:24
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.

Bis denne...
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:11 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