Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Klartext -> ANSI -> Klartext (https://www.delphipraxis.net/73758-klartext-ansi-klartext.html)

Christian Seehase 23. Jul 2006 18:12

Re: Klartext -> ANSI -> Klartext
 
Moin cruso,

und bitte nicht immer Memo.Text verwenden.
Einmal in eine Stringvariable übertragen, dann alle Operationen mit dieser Stringvariable durchführen, und anschliessend wieder in Memo.Text übertragen.

Die Performance wird's Dir danken, da bei jedem Lesezugriff auf Text der Wert aus allen Zeilen zusammengebaut wird.
Beim Schreiben dann der umgekehrte Weg: Es werden die Zeilen neu erzeugt.

Dax 23. Jul 2006 18:14

Re: Klartext -> ANSI -> Klartext
 
Zitat:

Zitat von mkinzler
hab ausversehen die Hex-Werte gepostet.

Dann ists aber nicht 38, sondern 3b ;)

Martin K 23. Jul 2006 18:15

Re: Klartext -> ANSI -> Klartext
 
Hab meinen Code nochmal überarbeitet, so müsste es gehen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var s: String; i: Char;
begin
  s := Edit1.Text;
  s := StringReplace(s, #35, '&#35'+';', [rfReplaceAll]);
  s := StringReplace(s, #38, '&#38'+';', [rfReplaceAll]);
  s := StringReplace(s, #59, '&#59'+';', [rfReplaceAll]); //jeweils das '+' weglassen, geht hir nur nicht anders, weil die Zeichen sonst automatisch konvertiert werden...
  For i := Low(Char) to High(Char) do
    s := StringReplace(s, i, '&#'+IntToStr(Ord(i))+';',[rfReplaceAll]);
  Memo1.Text := s;
end;

mkinzler 23. Jul 2006 18:15

Re: Klartext -> ANSI -> Klartext
 
Ich sollte ne Brille aufsetzen ;-)

cruso 23. Jul 2006 18:21

Re: Klartext -> ANSI -> Klartext
 
Es funktionier leider immernoch nicht.

Hawkeye219 23. Jul 2006 18:21

Re: Klartext -> ANSI -> Klartext
 
Hallo cruso,

wenn du die "Sonderzeichen" nicht verarbeitest, werden sie dir in der Ausgabe fehlen...

Der Fehler bei den vorgestellten Lösungen besteht darin, daß bei nachfolgenden StringReplace-Aufrufen auch bereits eingebaute Ziffern ersetzt werden. Hier eine Alternative:

Delphi-Quellcode:
function Convert (const aText: string): string;
var i: Integer;
begin
  Result := '';
  for i := 1 to Length(aText) do
    Result := Result + '&#' + IntToStr(Ord(aText[i])) + ';';
end;
Gruß Hawkeye

marabu 23. Jul 2006 18:25

Re: Klartext -> ANSI -> Klartext
 
Ay cruso,

256 mal StringReplace über einen Memo.Text laufen zu lassen ist aus mehr als einem Grund nicht so genial. Da bietet sich eher die simple Iteration an:

Delphi-Quellcode:
function HTMLEncode(s: String): String;
var
  i: Integer;
  ce: String; // character entity
begin
  SetLength(Result, Length(s) * 6);
  for i := 1 to Length(s) do
  begin
    ce := Format('&#%.3d;', [Ord(s[i])]);
    Move(ce[1], Result[i * 6 - 5], 6);
  end;
end;
Aber auch das ist noch nicht genial, da ja nur ganz wenige Zeichen wirklich Probleme machen: Ampersand, LessThan, GreaterThan.

Wenn du die Daten später in einer WebBrowser-Lomponente anzeigen willst, dann ist gar keine Kodierung nötig, da du den Text einfach der Eigenschaft innerText eines Elementes zuweisen kannst.

Grüße vom marabu

Martin K 23. Jul 2006 18:25

Re: Klartext -> ANSI -> Klartext
 
So aber:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var s: String; i: Char;
begin
  s := Edit1.Text;
  s := StringReplace(s, #35, '&#35'+';', [rfReplaceAll]);
  s := StringReplace(s, #38, '&#38'+';', [rfReplaceAll]);
  s := StringReplace(s, #59, '&#59'+';', [rfReplaceAll]); //jeweils das '+' weglassen!
  For i := Low(Char) to High(Char) do
    if not (i in [#35, #38, #59]) then //das muss doch hin!
      s := StringReplace(s, i, '&#'+IntToStr(Ord(i))+';',[rfReplaceAll]);
  Memo1.Text := s;
end;
Wobei man noch die Zahlen berücksichtigen muss.
Genauso wie die Zeichen #35, #38, #59 sollte man auch die Zahlen #48..#57 behandeln.

Ich würde trotzdem Hawkeye's Code bevorzugen...

cruso 23. Jul 2006 18:34

Re: Klartext -> ANSI -> Klartext
 
Danke an alle!
Jetzt funktionierts...

bttb930 23. Jul 2006 19:27

Re: Klartext -> ANSI -> Klartext
 
Leute, Leute, Leute.

Dieser Thread demonstriert wohl ganz gut das Problem an der Delphi Praxis:

Zuviele hilfsbereite Menschen denken nicht nach bevor sie auf schlecht formulierte Fragen hilfebedürftiger Menschen antworten (siehe dazu auch http://www.delphipraxis.net/internal...ct.php?t=88355 ).

Appell an alle: ERST denken, DANN schreiben. Ist nicht soo schwer.

Und cruso, per Debugging hättest Du das alles selbst rausbekommen können. Das gehört zum Programmieren nunmal dazu, dass man im Fehlerfall das ganze mal mit kleinen Beispielen probiert und dabei den guten alten Debugger nutzt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:55 Uhr.
Seite 2 von 2     12   

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