AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Zeichen in Memo ersetzten und Formatierung beibehalten?!
Thema durchsuchen
Ansicht
Themen-Optionen

Zeichen in Memo ersetzten und Formatierung beibehalten?!

Ein Thema von Rawsche · begonnen am 14. Aug 2018 · letzter Beitrag vom 16. Aug 2018
Antwort Antwort
Delphi.Narium

Registriert seit: 27. Nov 2017
2.599 Beiträge
 
Delphi 7 Professional
 
#1

AW: Zeichen in Memo ersetzten und Formatierung beibehalten?!

  Alt 15. Aug 2018, 14:00
@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.
Ja, aber das Zusammenbauen des Inhaltes von Text dauert ggfls. sehr lange. (Zumindest bei älteren Delphis). Meine praktische Erfahrung ist, dass das zeilenweise Ändern deutlich schneller ist, als erst Text "zusamenbauenzulassen", dann dadrin zu ändern und anschließend bei der Zuweisung zu Text wieder "allesauseinandernehmenzulassen".

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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.587 Beiträge
 
Delphi 12 Athens
 
#2

AW: Zeichen in Memo ersetzten und Formatierung beibehalten?!

  Alt 15. Aug 2018, 14:46
Ich sehe garkeinen Code, der irgendwo die ß übersetzt, demnach wäre es verständlich, wenn das auch nicht gemacht wird.


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.


Ja, aber das Zusammenbauen des Inhaltes von Text dauert ggfls. sehr lange. (Zumindest bei älteren Delphis). Meine praktische Erfahrung ist, dass das zeilenweise Ändern deutlich schneller ist, als erst Text "zusamenbauenzulassen", dann dadrin zu ändern und anschließend bei der Zuweisung zu Text wieder "allesauseinandernehmenzulassen".
Theoretisch ja, ABER

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.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (15. Aug 2018 um 14:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Zeichen in Memo ersetzten und Formatierung beibehalten?!

  Alt 15. Aug 2018, 21:05
Delphi-Quellcode:

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.
Ich hab Deinen Source mal auf das absolut notwendige zusammen gestrichen.
Das kann nicht kompilieren, geschweige denn ein "ß" in " " übersetzen.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman
Online

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.473 Beiträge
 
Delphi 12 Athens
 
#4

AW: Zeichen in Memo ersetzten und Formatierung beibehalten?!

  Alt 16. Aug 2018, 06:10
Moin...
Delphi-Quellcode:
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;
...bitte verwende sprechende Namen. Aus eigener Erfahrung: Je kompexer die Anwendung...dann weißt du in 3 Monaten nicht mehr was was ist.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:40 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