AW: Zeichen in Memo ersetzten und Formatierung beibehalten?!
Zitat:
Zitat:
|
AW: Zeichen in Memo ersetzten und Formatierung beibehalten?!
OK, hier läuft was falsch:
Zitat:
Delphi-Quellcode:
gibt den gesamten Text inklusive Zeilenumbrüche zurück.
Memo1.Lines.Text
Delphi-Quellcode:
gibt aber die i-te Zeile zurück und nicht das i-te Zeichen.
Memo1.lines.Strings[i]
Weiterhin
|
AW: Zeichen in Memo ersetzten und Formatierung beibehalten?!
Zitat:
|
AW: Zeichen in Memo ersetzten und Formatierung beibehalten?!
Zitat:
Steige von ListBoxen für Deine Umwandlung auf zum Beispiel ein Array oder Set um. Auf diese Weise blendest Du für andere aus woraus Deine Umwandlung basiert / non-Visuell sozusagen. |
AW: Zeichen in Memo ersetzten und Formatierung beibehalten?!
Schonmal Vielen Dank
|
AW: Zeichen in Memo ersetzten und Formatierung beibehalten?!
...
|
AW: Zeichen in Memo ersetzten und Formatierung beibehalten?!
Hi,
bis auf ein kleines Problem habe ich Fortschritte gemacht. Ich bin auf Funktionen umgestiegen. Der Text lässt sich umwandeln und auch wieder zurückwandeln. Ein Problem tritt nur auf. Bei mir wird in der Verschlüsselung jedes Leerzeichen durch ein ß ersetzt. Jedes ß wird zum Leerzeichen. Bei der Entschlüsselung ist es umgekehrt. Soweit alles geplant. Leider tritt bei jeder Umwandlung von einem ß ein Fehler auf. Das ß wird nicht durch ein Leerzeichen ersetzt, sondern es bleibt ein ß, egal ob Ver- oder Entschlüsselung. Kann es sein, dass ein ß nicht mit einem ß verglichen werden kann oder dass ein bestehendes ß nicht durch ein Leerzeichen ersetzt werden kann? Vielen Dank
Delphi-Quellcode:
unit Unit1;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Grids, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Button2: TButton; Label1: TLabel; Label2: TLabel; ListBox1: TListBox; ListBox2: TListBox; Memo1: TMemo; Memo2: TMemo; Memo3: TMemo; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private function Coding(x: string): string; function Decoding(x: string): string; public end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } function TForm1.Coding(x: string): string; var i: integer; y: string; begin y := x; for i := 0 to listbox1.items.Count - 1 do begin if x = listbox1.items[i] then begin y := listbox2.items[i]; end; end; Result := y; end; function TForm1.Decoding(x: string): string; var i: integer; y: string; begin y := x; for i := 0 to listbox2.items.Count - 1 do begin if x = listbox2.items[i] then begin y := listbox1.items[i]; end; end; Result := y; end; procedure TForm1.Button1Click(Sender: TObject); var i: integer; i2: integer; x: string; begin label2.Caption := ''; memo2.Clear; for i := 0 to (Memo1.Lines.Count - 1) do begin label1.Caption := memo1.Lines.strings[i]; for i2 := 1 to length(label1.Caption) do begin x := label1.Caption[i2]; x := coding(x); label2.Caption := label2.Caption + x; end; memo2.Lines[i] := (label2.Caption); label2.Caption := ''; end; end; procedure TForm1.Button2Click(Sender: TObject); var i: integer; i2: integer; x: string; begin label2.Caption := ''; memo3.Clear; for i := 0 to (Memo2.Lines.Count - 1) do begin label1.Caption := memo2.Lines.strings[i]; for i2 := 1 to length(label1.Caption) do begin x := label1.Caption[i2]; x := decoding(x); label2.Caption := label2.Caption + x; end; memo3.Lines[i] := (label2.Caption); label2.Caption := ''; end; end; procedure TForm1.Button3Click(Sender: TObject); begin if edit1.text='ß' then showmessage(''); end; end. |
AW: Zeichen in Memo ersetzten und Formatierung beibehalten?!
Zitat:
Wenn man sich mal die Sourcen (Delphi 7) von function TStrings.GetTextStr: string;, welches beim Lesen von Text aufgerufen wird, anschaut, so wird dort bereits eine Schleife for I := 0 to Count - 1 do aufgerufen. Und bei SetTextStr (zum Schreiben von Text), wird der übergebene String an den Zeilenumbrüchen aufgeteilt. Vorher wird Lines (vom Typ TStrings) geleert und dann jede der getrennten Zeilen per Add an die Lines angefügt. Dies erspare ich mir bei meiner Vorgehensweise. Und niemand kann mir ernsthaft weißmachen, dass diese Ersparnis = 0 ist. Jedenfalls sind meine Programme, die häufig mit TStrings (bzw. entsprechenden Nachfahren) und recht großen Texten arbeiten, ausnahmslos alle (nach dieser Änderung) deutlich schneller geworden. |
AW: Zeichen in Memo ersetzten und Formatierung beibehalten?!
Ich sehe garkeinen Code, der irgendwo die ß übersetzt, demnach wäre es verständlich, wenn das auch nicht gemacht wird. :stupid:
PS: Du gehst doch die Items "manuell" durch und vergleichst jeden Text einzeln. Du könntest aber auch suchen lassen, mit einem Befehl ala ListBox1.Items.IndexOf und kannst bei >=0 das gewünschte Item aus der anderen Listbox auslesen. Zitat:
bei der normalen StringList wird im .Text der Text aus allen Zeilen erst zusammengesetzt, wenn das TMemoStrings (der spezielle TStrings-Nachfahre im TMemo) das ebenfalls machen würde, also alle Zeilen einzeln abfragen und zusammensetzen, dann wäre es wirklich "extrem" langsam. Aber das MEMO verwaltet intern den ganzen Text als einen Block im Speicher, weswegen im TMemo das Lines.Text überschrieben wurde und somit das Gleiche wie Memo.Text macht, also den kompletten Text mit nur einer Abfrage ausliest und auch zuweist. |
AW: Zeichen in Memo ersetzten und Formatierung beibehalten?!
Delphi-Quellcode:
Ich hab Deinen Source mal auf das absolut notwendige zusammen gestrichen.type { TForm1 } TForm1 = class(TForm) Button1: TButton; Button2: TButton; Label1: TLabel; Label2: TLabel; ListBox1: TListBox; ListBox2: TListBox; Memo1: TMemo; Memo2: TMemo; Memo3: TMemo; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private function Coding(x: string): string; function Decoding(x: string): string; public end; procedure TForm1.Button3Click(Sender: TObject); begin if edit1.text='ß' then showmessage(''); end; end. Das kann nicht kompilieren, geschweige denn ein "ß" in " " übersetzen. Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:43 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