AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein MEMO als FILE speichern mit LF anstatt CRLF
Thema durchsuchen
Ansicht
Themen-Optionen

MEMO als FILE speichern mit LF anstatt CRLF

Offene Frage von "Klaus01"
Ein Thema von wschrabi · begonnen am 25. Nov 2016 · letzter Beitrag vom 26. Nov 2016
Antwort Antwort
wschrabi

Registriert seit: 16. Jan 2005
448 Beiträge
 
#1

MEMO als FILE speichern mit LF anstatt CRLF

  Alt 25. Nov 2016, 21:47
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?
  Mit Zitat antworten Zitat
t.roller
(Gast)

n/a Beiträge
 
#2

AW: MEMO als FILE speichern mit LF anstatt CRLF

  Alt 25. Nov 2016, 22:45
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;
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: MEMO als FILE speichern mit LF anstatt CRLF

  Alt 25. Nov 2016, 22:51
Hallo,

welches Memo benutzt Du denn?
TMemo hat meines Wissen kein Property namens LineBreak.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: MEMO als FILE speichern mit LF anstatt CRLF

  Alt 26. Nov 2016, 03:14
Zitat:
Memo1.Lines.LineBreak
Doch, hat es.

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: Delphi-Referenz durchsuchenAdjustLineBreaks
$2B or not $2B

Geändert von himitsu (26. Nov 2016 um 03:18 Uhr)
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
972 Beiträge
 
Delphi 6 Professional
 
#5

AW: MEMO als FILE speichern mit LF anstatt CRLF

  Alt 26. Nov 2016, 08:07
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;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: MEMO als FILE speichern mit LF anstatt CRLF

  Alt 26. Nov 2016, 12:50
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)
$2B or not $2B
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
972 Beiträge
 
Delphi 6 Professional
 
#7

AW: MEMO als FILE speichern mit LF anstatt CRLF

  Alt 26. Nov 2016, 14:13
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)
OK, dann erkläre mir dochmal was dann 'Gleich' bei Memo2.Lines.SaveToFile('F:\Memo2.txt') unter Delphi6 (ANSI) und DelphiX (Unicode) ist?

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!
  Mit Zitat antworten Zitat
wschrabi

Registriert seit: 16. Jan 2005
448 Beiträge
 
#8

AW: MEMO als FILE speichern mit LF anstatt CRLF

  Alt 26. Nov 2016, 14:32
Recht herzlichen DANK für die Tips und Kommentare!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: MEMO als FILE speichern mit LF anstatt CRLF

  Alt 26. Nov 2016, 14:43
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.
$2B or not $2B

Geändert von himitsu (26. Nov 2016 um 14:49 Uhr)
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: MEMO als FILE speichern mit LF anstatt CRLF

  Alt 26. Nov 2016, 15:10
.. 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
Klaus
  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 02:48 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