![]() |
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. |
Re: Klartext -> ANSI -> Klartext
Zitat:
|
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, '#'+';', [rfReplaceAll]); s := StringReplace(s, #38, '&'+';', [rfReplaceAll]); s := StringReplace(s, #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; |
Re: Klartext -> ANSI -> Klartext
Ich sollte ne Brille aufsetzen ;-)
|
Re: Klartext -> ANSI -> Klartext
Es funktionier leider immernoch nicht.
|
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:
Gruß Hawkeye
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; |
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:
Aber auch das ist noch nicht genial, da ja nur ganz wenige Zeichen wirklich Probleme machen: Ampersand, LessThan, GreaterThan.
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; 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 |
Re: Klartext -> ANSI -> Klartext
So aber:
Delphi-Quellcode:
Wobei man noch die Zahlen berücksichtigen muss.
procedure TForm1.Button1Click(Sender: TObject);
var s: String; i: Char; begin s := Edit1.Text; s := StringReplace(s, #35, '#'+';', [rfReplaceAll]); s := StringReplace(s, #38, '&'+';', [rfReplaceAll]); s := StringReplace(s, #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; Genauso wie die Zeichen #35, #38, #59 sollte man auch die Zahlen #48..#57 behandeln. Ich würde trotzdem Hawkeye's Code bevorzugen... |
Re: Klartext -> ANSI -> Klartext
Danke an alle!
Jetzt funktionierts... |
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 ![]() 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. |
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