Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#9

AW: Memo1.Text.Length erzeugt "Integer Overflow"

  Alt 18. Mai 2017, 18:35
(außer über eine Loop über alle Zeilen: Das würde viel zu lange dauern...).
SynMemo hat das Attribut Lines. Das ist vom Typ TStrings. Wenn man sich nun anschaut, wie TStrings an den Inhalt von Text kommt, dann stellt man fest, dass in einer Schleife von 0 bis Count - 1 jede Zeile an einen String angehängt wird.
Hier wurde also bereits einmal zum Ermitteln von Text über die alle Zeilen iteriert.
Damit das Ganze funktioniert wird auch für jede Zeile die Länge des Zeileninhaltes ermittelt.

Kann mir nicht vorstellen, dass ein Iterieren über alle Zeilen und das Summieren der jeweiligen Zeilenlänge länger dauert, als eben eine Aufgabe, die genau dies als Teilmenge enthält.

Der Eigenbau hätte hier dann auch noch den Vorteil, dass man für die Summe einen Typen wählen kann, der ausreichend groß ist.

Da die Länge niemals kleiner 0 sein wird, kann man dann auch direkt einen Typen wählen, der nur positive Werte zulässt.

Zitat von Delphi 7-Sourcen zu TStrings:
Delphi-Quellcode:
...
TStrings = class(TPersistent)
...
property Text: string read GetTextStr write SetTextStr;
Einfach mal in die Quellen von function TStrings.GetTextStr: string; schauen. Bei Delphi 7 wird da mit Integer gearbeitet. Reicht das für die hier genutzten Inhalte des SynMemos aus oder kracht es da bereits intern, so dass eine eigene Typauswahl für das Ergebnis von Length nicht für die Fehlerbehebung ausreicht.
  Mit Zitat antworten Zitat