![]() |
TEdit (1)... Type Conversion
Hallo,
zwar gibt es Implementierungen von TEdit wie Sand am Meer, aber mich treibt es doch zu einer eigenen Umsetzung. Dazu habe ich einige Fragen (eigentlich sind die meisten genereller Natur). Umwandlung der Eingabe in Integer/Float (oder andere Formate)... Wie implementiere ich dies am besten: * TryStrToInt / TryStrToFloat * try ... StrToInt / StrToFloat ... except ... * zeichenweises interpretieren des Textes oder gar noch andere Ideen? Das try... except... ist Programmtechnich das komfortabelste, kann ich doch jegliche Typ-Umwandlung damit abfangen und neutrale Werte zurückgeben. Wie verhält sich aus Sicht der Verarbeitungsgeschwindigkeit TryStrToInt im Gegensatz dazu? Das zeichenweise interpretieren eines Textes gibt mir die größte Flexibilität... Gibt es hier eine schnelle Möglichkeit den Text gegen die Bereichsgrenzen für Integer/Int64 und die Float-Typen zu testen? mfg, Alex |
Re: TEdit (1)... Type Conversion
Hallo Alex!
Du solltest die Finger von TRY/EXCEPT lassen. Irgendjemand (war es Luckie?) hat mal geschrieben, das sei als fährt man mit Vollgas auf die Kreuzung und wenns kracht war Rot. Außerdem ist das ein Performance-Killer. Es gibt mehrere Möglichkeiten: Man kann die Zeichen bei der Eingabe (OnKeyDown und OnKeyPress) gleich prüfen und Ungültiges vermeiden. Das ist allerdings nicht gesichert gegen Copy&Paste! Eventuell kan man auch im OnChange war erreichen (Vorsicht: Ändern des Inhaltes im OnChange löst erneut OnChange aus, also temporär abschalten). Zur Prüfung auf gültige Werte empfehle ich das gute alte Pascal-VAL. Das liefert auch gleich die Stelle, wo es hakt - und muß nicht den Riesenaufwand für einen TRY treiben. Gruß Dietmar Brüggendiek |
Re: TEdit (1)... Type Conversion
Hallo,
Zitat:
mfg, Alex |
Re: TEdit (1)... Type Conversion
Zitat:
Natürlich ist Try/Except nicht in jeder vorstellbaren Konstellation gut und richtig angewendet, aber die obige Aussage ist einfach komplett daneben. |
Re: TEdit (1)... Type Conversion
Hallo Alex!
Zitat:
Danach prüfst Du einfach, ob das größer als High(ShortInt) oder kleiner als Low(ShortInt) ist - wenn ja, war der Wert überschritten! Vorher noch die Länge prüfen, damit der DAU nicht 30mal auf die 9 gehämmert hat - das sprengt nämlich auch einen Int64. Außerdem ist es ja oft so, daß man einen ShortInt nimmt, weil z.B. nur Werte von -30 bis +95 zugelassen sind - dann brauchst Du die technischen Grenzen ja gar nicht zu prüfen. Übrigens, die dämliche TRY/EXCEPT-Variante liefert Dir unter den Umständen auch den falschen Wert! In einem Edit ist das tatsächlich vernachlässigbar mit dem Preformance-Verlust - aber wenn man eine Datendatei mit mehreren 1000 Text-Integern einlesen muß, bremst das doch ganz schön. Gruß Dietmar Brüggendiek |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 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