AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TEdit (1)... Type Conversion

Ein Thema von junale · begonnen am 16. Mär 2005 · letzter Beitrag vom 18. Mär 2005
Antwort Antwort
junale

Registriert seit: 22. Dez 2004
Ort: Kaiserslautern
15 Beiträge
 
#1

TEdit (1)... Type Conversion

  Alt 16. Mär 2005, 15:15
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
  Mit Zitat antworten Zitat
Brüggendiek

Registriert seit: 13. Dez 2002
Ort: Dortmund
275 Beiträge
 
Delphi 5 Standard
 
#2

Re: TEdit (1)... Type Conversion

  Alt 16. Mär 2005, 21:56
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
Dietmar Brüggendiek
Die 6 Probleme des Programmierers: 1. dauert das länger, als man 2. glaubt, 3. geht das nicht so, wie man sich das 4. schlau überlegt hat, und 5. sitzt der Fehler da, wo man ihn 6. zuletzt sucht
  Mit Zitat antworten Zitat
junale

Registriert seit: 22. Dez 2004
Ort: Kaiserslautern
15 Beiträge
 
#3

Re: TEdit (1)... Type Conversion

  Alt 18. Mär 2005, 07:27
Hallo,

Zitat von Brüggendiek:
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.
Hmm.. Aber wenn ich zum Besipiel nur einen ShortInt zurückgeben will, liefert mir "Val ('128', aShortInt, Code);" als Code 0 und als aShortInt -128 was durch den Überlauf geschieht. Wie kann ich dieses Fehlverhalten umgehen?

mfg,
Alex
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#4

Re: TEdit (1)... Type Conversion

  Alt 18. Mär 2005, 08:11
Zitat von Brüggendiek:
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.
Was ist das denn für ein Schwachsinn?? Try Except ist eine der sinnvollsten Delphi-Erweiterungen der vergangenen Jahre. Und das mit dem Performance-Killer... ist in einem Edit-Feld sowas von uninteressant (wie schnell willst du denn tippen?)

Natürlich ist Try/Except nicht in jeder vorstellbaren Konstellation gut und richtig angewendet, aber die obige Aussage ist einfach komplett daneben.
  Mit Zitat antworten Zitat
Brüggendiek

Registriert seit: 13. Dez 2002
Ort: Dortmund
275 Beiträge
 
Delphi 5 Standard
 
#5

Re: TEdit (1)... Type Conversion

  Alt 18. Mär 2005, 22:09
Hallo Alex!

Zitat von junale:
Hmm.. Aber wenn ich zum Besipiel nur einen ShortInt zurückgeben will, liefert mir "Val ('128', aShortInt, Code);" als Code 0 und als aShortInt -128 was durch den Überlauf geschieht. Wie kann ich dieses Fehlverhalten umgehen?
Dann lasse das Ganze doch in eine lokale Longint- oder besser Int64-Variable umwandeln.
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
Dietmar Brüggendiek
Die 6 Probleme des Programmierers: 1. dauert das länger, als man 2. glaubt, 3. geht das nicht so, wie man sich das 4. schlau überlegt hat, und 5. sitzt der Fehler da, wo man ihn 6. zuletzt sucht
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 19:15 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