![]() |
Zeichen in Memo ersetzten und Formatierung beibehalten?!
Hallo zusammen,
ich habe leider ein Problem. Ich möchte die Zeichen in einer Memo ändern doch es tritt ein Fehler auf, aus dem ich leider nicht schlau werde.
Delphi-Quellcode:
Die Prozedur "aendern" tauscht gewisse Zeichen aus Memo1 gegen andere aus. Diese veränderten Zeichen sollen, dann in Memo2 ausgegeben werden.for i:=1 to Length(Memo1.lines.text) do begin x:=aendern(memo1.lines.Strings[i]); memo2.lines.Strings[i]:=x; end; Die Fehlermeldung sieht wie folgt aus: Projekt kompilieren, Ziel: project1.exe: Exit code 1, Fehler: 2 unit1.pas(60,44) Error: Can't take the address of constant expressions unit1.pas(61,28) Fatal: Syntax error, "identifier" expected but "STRING" found Ich versteh leider den Fehler nicht so richtig. Darf ich so nicht auf eine Memo zugreifen? Wie soll ich dann ein Zeichen ansprechen? Und eine 2. Frage drängt sich mir noch auf. Wie kann ich Absätze aus einer Memo übernehmen? Ich möchte gern, dass Memo2 genau so aussieht wie Memo1 nur das z.B. Änderungen wie Sonderzeichen oder Großbuchstaben geändert werden. Deren sonstige Formatierung (Absätze) sollte aber beibehalten werden. Ich würde mich sehr über eure Hilfe freuen. Lg Rawsche |
AW: Zeichen in Memo ersetzten und Formatierung beibehalten?!
Arbeitet schnarchlangsam aber erfüllt Sinn und Zweck.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin // Memo2.Text := Memo1.Text; // Memo2.Text := StringReplace(Memo2.Text,'ErsetzeDas','MitDemHier',[rfReplaceAll]); Memo2.Text := StringReplace(Memo1.Text,'ErsetzeDas','MitDemHier',[rfReplaceAll]); end; |
AW: Zeichen in Memo ersetzten und Formatierung beibehalten?!
Zitat:
Delphi-Quellcode:
:stupid:
Memo1.Lines.Count
Und die Fehlermeldung passt zu keiner der gezeigten Codezeilen. Was ist denn in Zeile 60? Und hat Memo2 überhaupt genug Zeilen? (vielleicht besser vorher
Delphi-Quellcode:
und dann
Lines.Clear
Delphi-Quellcode:
)
Lines.Add
Außerdem ist ein Memo sehr langsam, vorallem wenn man kein
Delphi-Quellcode:
und
Lines.BeginUpdate
Delphi-Quellcode:
drumrum macht.
Lines.EndUpdate
Oder besser in eine StringList umkopieren, da drin ändern und "einmal" deren Text dann an Memo2 zuweisen. |
AW: Zeichen in Memo ersetzten und Formatierung beibehalten?!
Ich habe mal was gebastelt was auch mehrere Änderungen zulässt.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var iLines, iString: Integer; tmp, finish: string; begin finish := ''; for iLines := 0 to Memo1.Lines.Count -1 do // -1 eingefügt @ himitsu begin tmp := Memo1.Lines.Strings[iLines]; for iString := 1 to Length(tmp) do begin case tmp[iString] of Char('e'): tmp[iString] := 'E'; // Das dient mir als Beispiel, mach aus kleinem "e" ein Großes "E" // füge beliebig viele Vergleiche/Ersetze hier ein Char('E'): tmp[iString] := 'e'; // so wie hier, mach aus Großem "E" ein kleines "e" end; end; finish := finish + tmp + sLineBreak; // #13#10; ersetzt @ himitsu end; Memo2.Text := finish; end; |
AW: Zeichen in Memo ersetzten und Formatierung beibehalten?!
Der Zugrif auf Memo1.Lines.Text ist sehr langsam, vor allem, wenn im Memo viel Text drinne steht.
Etwas schneller wird es mit
Delphi-Quellcode:
Memo2.Lines.Clear;
for i := 0 to Memo1.Lines.Count - 1 do begin Memo2.Lines.Add(StringReplace(Memo1.Lines[i],'ErsetzeDas','MitDemHier',[rfReplaceAll])); end; |
AW: Zeichen in Memo ersetzten und Formatierung beibehalten?!
Wie sieht den der Code von aendern aus? Da wird ja wahrscheinlich der Fehler liegen.
|
AW: Zeichen in Memo ersetzten und Formatierung beibehalten?!
Außerdem 1 bis Count oder wohl eher 0 bis Count-1, :zwinker:
aber 0 bis Count ist definitiv falsch. Wobei ihr froh sein könnt, dass Memo zufällig keine Exception wirft, wenn man auf nichtexistierende Zeilen zugreift. (gibt da nur einen Leerstring raus) #13#10 = sLineBreak Und wie Lucke ebenfalls nochmal erwähnte: Wie sieht der restliche Code aus? Denn die genannten Fehlermeldungen kommen nicht aus dem gezeigten Codestück. @Delphi.Narium: Falsch, Memo1.Lines.Text ist schneller, denn Delphi (und bestimmt auch Lazarus) leiten das direkt an das Memo und holen den kompletten Text mit Einmal ab oder weisen ihn direkt zu, genau so wie bei Memo.Text Der Zugriff auf Einzelzeilen (Lines[]) ist langsam, vor allem beim Ändern und wenn viel Text im Memo steht. |
AW: Zeichen in Memo ersetzten und Formatierung beibehalten?!
Hab Fehler gefixt, Danke himitsu.:thumb:
|
AW: Zeichen in Memo ersetzten und Formatierung beibehalten?!
Liste der Anhänge anzeigen (Anzahl: 1)
Ich werde mal die Karten komplett offen auf den Tisch legen. Bitte nicht lachen, falls ihr eine bessere Methode kennt, aber ich versuche in ein Programm eine Art Verschlüsselung einzubauen und habe daher zu Testzwecken das folgende Programm geschrieben.
Delphi-Quellcode:
Anbei noch ein Bild meines Formulares.
unit Unit1;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Grids, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; ListBox1: TListBox; ListBox2: TListBox; Memo1: TMemo; Memo2: TMemo; Memo3: TMemo; procedure Button1Click(Sender: TObject); private procedure Coding(var x: string); procedure Decoding(var x: string); public end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.Coding(var x:string); var i:integer; begin for i:=0 to listbox1.items.count-1 do if x=listbox1.items[i] then x:=listbox2.items[i]; end; procedure TForm1.Decoding(var x:string); var i:integer; begin for i:=0 to listbox2.items.count-1 do if x=listbox2.items[i] then x:=listbox1.items[i] end; procedure TForm1.Button1Click(Sender: TObject); var i:integer; x:string ; begin for i:=1 to Length(Memo1.lines.text) do begin x:=coding(memo1.lines.Strings[i]); memo2.lines.Strings[i]:=x; end; end; end. Ich hoffe euch wird klar, was ich mir gedacht hatte. Ich würde, auch wenn es vielleicht einfacher geht, ungern anders vorgehen, weil ich gerade erst ins Verschlüsseln eingestiegen bin und gerne mit Tausch-Chiffrierung beginnen möchte. Ich freue mich auf eure Ideen. Bitte berichtigt NICHT einfach den Code, sondern gebt mir vielleicht lieber Tipps, wie ich ihn selbst verbessern kann. Sonst lerne ich daraus leider nichts... LG und Danke für die schon jetzt zahlreichen Antworten Rawsche |
AW: Zeichen in Memo ersetzten und Formatierung beibehalten?!
Und wieder fehlt der entscheidende Code: coding. :roll:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:15 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