![]() |
MEMO als FILE speichern mit LF anstatt CRLF
Hi
Ich habe eine MEMO mit einigen Lines hardcoded im Form. NUn möchte ich es per sftp an UNIX übertragen. Dazu möchte ich das MEMO mit linebreaks = #10 speichern. Ich habe auch memoscript.linebreaks = #10 definiert. Doch er speichert immer noch mit CRLF. Wieso? |
AW: MEMO als FILE speichern mit LF anstatt CRLF
Demo:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i : Integer; begin for i := 0 to 19 do Memo1.Lines.Add(INTTOSTR(i)); end; procedure TForm1.Button2Click(Sender: TObject); var newStr : String; begin Label1.Caption:= Memo1.Text; newStr:= Label1.Caption; newStr := StringReplace(newStr,#$A,'',[rfReplaceAll]); // entweder // newStr := StringReplace(newStr,#$D,'',[rfReplaceAll]); // oder Label2.Caption:= newStr; Application.ProcessMessages; Memo2.Text:= Label2.Caption; Application.ProcessMessages; Memo2.Lines.SaveToFile('F:\Memo2.txt'); end; |
AW: MEMO als FILE speichern mit LF anstatt CRLF
Hallo,
welches Memo benutzt Du denn? TMemo hat meines Wissen kein Property namens LineBreak. Grüße Klaus |
AW: MEMO als FILE speichern mit LF anstatt CRLF
Zitat:
ABER, im TMemoStrings ist es nur "halb" implementiert. TStrings.GetTextStr beachtet zwar dieses Property, aber TMemoStrings.GetTextStr überschteibt das und dort wird so gut optimiert, dass "direkt" Memo.Text rausgegeben wird, wo das nicht mehr Beachtung findet. StringReplace anwenden oder in eine andere TStringList umkopieren. PS: ![]() |
AW: MEMO als FILE speichern mit LF anstatt CRLF
Hmm..
oder OldStyle...
Delphi-Quellcode:
procedure SaveStringsLF(AStrings : TStrings; AFileName : string);
var fs : TFileStream; i : integer; s : string; begin fs := TFileStream.Create(AFileName,fmCreate); try for i := 0 to AStrings.Count-1 do begin s := AStrings[i] + #10; fs.Write(s[1],length(s) * SizeOf(Char)); end; finally fs.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); begin SaveStringsLF(Memo1.Lines, 'F:\Memo2.txt'); end; |
AW: MEMO als FILE speichern mit LF anstatt CRLF
Und gerade sowas sollte man NIEMALS achen.
Denn diese Datei sieht dann anders aus, wenn man die Anweendung in verschiedenen Delphis kompiliert und das ohne jegliche Format-/Versionsinformationen in der Datei. (Unicode oder nicht) |
AW: MEMO als FILE speichern mit LF anstatt CRLF
Zitat:
Auch da wird KEINE Versionsinfo mitgespeichert, sondern nur der reine Textinhalt des MEMOs! Auch da wird beim einen ein ANSI-Text erstellt und beim Anderen (eventuell) ein Unicode-Text! Also, was ist an Memo2.Lines.SaveToFile besser? Die Funktion von mir lässt sich problemlos um einen BOOM ergänzen, damit eine Unterscheidung von ANSI und UniCode möglich ist. Auch könnte mann statt eine 'String' auch 'AnsiString' verwenden, welches für die meisten UNIX-Texte ausreichen würde.. (Dann allerdings das '* SizeOf(Char)' auskommentieren. Da wir nicht wissen welches Format der Text haben müsste, können wir nur raten, ob UniCode/ANSI/mit oder ohne Boom benötigt wird.. Der TE wollte nur wissen, wie er ein Memo statt mit CR/LF nur mit LF speichert. Und genau dass mach die Funktion! |
AW: MEMO als FILE speichern mit LF anstatt CRLF
Recht herzlichen DANK für die Tips und Kommentare! :-D
|
AW: MEMO als FILE speichern mit LF anstatt CRLF
Es ist nicht immer gleich, da bis D2007 die Dateien als ANSI gespeichert wurden (im DefaultCharset des Windows) und Seit D2009 wird standardmäßig ebenfalls als ANSI gepsiechert, aber man könnte auch als oder sonstwas UTF-8 speichern,
abgesehn davon, dass dabei über das BOM die Codierung mitgegeben wird. Externe Daten (Speichern, Datenübertagung usw.) dürfen niemals in einem dynamischen Format gespeichert werden, außer man speichert das Format mit oder das Format lässt sich "sicher" erkennen. Das Selbe gilt auch z.B. für DLL-Schnittstellen. Niemals String/Char/PChar, sondern immer nur AnsiString/AnsiChar/PAnsiChar oder UnicodeString/WideString/Wide/WideChar/PWideChar oder inkl. Übergabe des Formates. |
AW: MEMO als FILE speichern mit LF anstatt CRLF
.. wie werden denn die Dateien auf der Unix Maschine weiterverabeitet?
Es könnte dann vor der Verabeitung noch mit dos2unix konvertiert werden. Grüße Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18: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