Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Zeilenumbruch im Text als Quadrate angezeigt (https://www.delphipraxis.net/176337-zeilenumbruch-im-text-als-quadrate-angezeigt.html)

GoTo0815 28. Aug 2013 12:47

Zeilenumbruch im Text als Quadrate angezeigt
 
Guten Tag,

sollte das bereits besprochen worden sein, so bitte ich um Verzeihung, ich habe das nicht gefunden.
Bin grundsätzlich eher der ersteinmal Suchtyp :-)

Ziel ist es einen Text aus einem Memo in einen String umzuwandeln, den ich dann in eine Zelle eines StringGrids kopieren kann.
In meiner eigentlichen Function mach ich noch etwas mehr mit s bevor ich das an Result übergebe. Ich ersetzte dort je Zeile bestimmte Platzhalten in geschweiften Klammern. Daher muss ich diese MemoToString umwandlung hier so manuell machen (denke ich jedenfalls).

Nun das Problem. Die Function lief sehr lange einwandfrei. Habe ausschließlich bei diesem Projekt D2007 eingesetzt.
In den einzelnen Zellen des Stringgrids waren die Zeichen CHR(13) + Chr(10) als versteckte Zeichen nicht angezeigt. Habe ich aber das StringGrid als CSV exportiert und dann in Excel geladen, war alles wunderbar.

Nun musste ich meinen Rechner neu aufsetzen und somit auch D2007 neu installieren. Nach einer Änderung am Code an einer ganz anderen Stelle und dem nachfolgenden Compiling liefert die unten dargestellte Function nun sichtbare Quadrate (quadratische Zeichen) direkt im Text. Die sind also nicht mehr versteckt. Das führte dazu, dass der empfänder meiner exportieren CSV die Zeilenumbrüche (import unter Linux in eine Datenbank) nicht mehr als solche erkannte.

Wir haben das Problem zwar auf der Linux-Seite jetzt beheben können, also den Zeilenumbruch nun anders interpretiert, aber das Verhalten beunruhigt mich dennoch. Warum liefert D2007 (ggf. war da irgendwo ein neueres Update zwischen) nun eine andere Stringdarstellung.

+ Chr(13) + Chr(10) ist doch der Windows - Standard Zeilenumbruch, oder?


Delphi-Quellcode:
function MemoToString(aMemo: TMemo): String;
var i: Integer;
begin
  Result := '';
  for i := 0 to aMemo.Lines.Count - 1 do
  begin
    Result:= Result + aMemo.Lines[i];;
    if i < aMemo.Lines.Count - 1 then Result := Result + Chr(13) + Chr(10);
  end;
end;

MeierZwoo 28. Aug 2013 13:12

AW: Zeilenumbruch im Text als Quadrate angezeigt
 
Zitat:

Zitat von HendrikSturm (Beitrag 1226500)
Chr(13) + Chr(10) ist doch der Windows - Standard Zeilenumbruch, oder?

13dec und 10dec haben nichts mit Windows zu tun, sondern sind im ANSI-ASCII die Steuerzeichen für CR LF - also OS unabhängig - und gab es schon zig Jahre vor Windows.

Du solltest mal eine Zeile als Ordinalwerte protokolieren lassen, evtl. liegen vorm von dir hinzugefügten CR LF schon Steuerzeichen aus der Memozeile, weshalb ein sog. "nichtdruckbares" Zeichen oder nicht belegtes Zeichen am Ende der Zeile hängt und deshalb als nicht darstellbar = leeres Quadrat angezeigt wird.

DeddyH 28. Aug 2013 13:19

AW: Zeilenumbruch im Text als Quadrate angezeigt
 
Würde trim(Memo.Lines.Text) nicht ausreichen? Und für den Zeilenumbruch gibt es die Konstante sLinebreak, da muss man sich keine Gedanken machen, welche Zeichen da nun dahinterstehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:36 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