Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Test ob gültige REAL (https://www.delphipraxis.net/158131-test-ob-gueltige-real.html)

SvenLittkowski 7. Feb 2011 07:36

Test ob gültige REAL
 
Wie kann man testen ob ein String eine Zahl darstellt, wenn jene Zahlen auch negativ (mit vorangestelltem Minus) sein können und vom Typ Integer oder Real sein können (also mit Kommastellen, wobei das Komma je nach Land durch ein Komma oder einen Punkt dargestellt sein kann)? Gleichzeitig will ich aber Strings wie die nachfolgenden "Un"-Zahlen ausschließen:
- "12-3"
- "123-"
- "123."
- "1.2.3"
- "1-2-3"
- "-.-"

Ich hatte bereits etwas gesucht, und das folgende Thema gefunden:
http://www.delphipraxis.net/104177-z...umwandeln.html
Ist aber nicht genau das, was ich suche. Habe vorsichtshalber aber auch dort nochmal gefragt. Nicht sicher, welches das beste Unterforum dafür ist. :-)

Bei meinem Problem kann ich mit Schleifen arbeiten. Nur der Algorithmus fällt mir nicht ein.

DeddyH 7. Feb 2011 07:42

AW: Test ob gültige REAL
 
Ein paar Überlegungen:
- das Vorzeichen darf nur einmal vorkommen und muss am Stringanfang stehen, gefolgt von mindestens einer Ziffer
- der Dezimalseparator darf auch nur einmal vorkommen
- ist der Tausenderseparator erlaubt, müssen ihm immer 3 Ziffern folgen
- bei strenger Auslegung darf der Dezimalseparator nicht am Stringanfang oder Stringende stehen und der Tausenderseparator nicht am Stringanfang

Das zu programmieren überlasse ich Dir ;)

Deep-Sea 7. Feb 2011 08:36

AW: Test ob gültige REAL
 
TryStrToFloat - oder habe ich was verpasst? :gruebel:

DeddyH 7. Feb 2011 08:38

AW: Test ob gültige REAL
 
Zitat:

Zitat von Deep-Sea (Beitrag 1079993)
oder habe ich was verpasst? :gruebel:

Hast Du. Es soll keine Umwandlung verwendet werden. Der Sinn dahinter erschließt sich mir zwar nicht, aber was soll' s?

Deep-Sea 7. Feb 2011 08:40

AW: Test ob gültige REAL
 
Zitat:

Zitat von DeddyH (Beitrag 1079994)
Es soll keine Umwandlung verwendet werden.

Hab ich wohl überlesen ... *angestrengt such* ... öhm ... vlt. kauf ich mir 'ne Brille :?

DeddyH 7. Feb 2011 08:43

AW: Test ob gültige REAL
 
Zumindest steht es so im verlinkten Thread, in dem der T.E. auch zuerst gepostet hat. Vielleicht habe ich es aber auch selbst falsch verstanden (man ist ja nicht mehr der Jüngste :stupid:).

SvenLittkowski 7. Feb 2011 08:50

AW: Test ob gültige REAL
 
Gar nicht mal so schlecht, die Funktion TryStringToFloat war mir bis jetzt überhaupt nicht bekannt. Da sie ein Ergebnis vom Type Boolean liefert, könnte sie mir tatsächlich als vollständige Testfunktion dienen.

Jedoch gibt es bei mir ein Problem mit dem Benutzen der TryStringToFloat-Funktion:

Code:
var
 MyMemory: String;
 MyReal: Real;
 MySuccess: Boolean;
begin
...
if(TryStrToFloat(MyMemory,MyReal)=True) then MySuccess:=True;
...
end;
Zitat:

Zitat von Mein Delphi 7
[Error] Box1.pas(808): There is no overloaded version of 'TryStrToFloat' that can be called with these arguments

Da doch diese Funktion ein True oder False liefert, sollte dieser Code doch funktionieren, dachte ich mir. Tut er aber nicht. Was mache ich noch falsch?

UPDATE:

Habe die REAL-Variable als EXTENDED deklariert, nun geht es wohl.

DeddyH 7. Feb 2011 08:58

AW: Test ob gültige REAL
 
Delphi-Quellcode:
var
 MyMemory: String;
 MyReal: double; //oder extended oder single, aber nicht real
 MySuccess: Boolean;
begin
  ...
  MySuccess := TryStrToFloat(MyMemory,MyReal);
  ...
end;

SvenLittkowski 7. Feb 2011 09:43

AW: Test ob gültige REAL
 
Jupp, hatte ich bereits getan! Vielen Dank trotzdem! Scheint, wir beide haben fast zur selben Zeit gepostet, ohne das Posting des jeweils anderen gesehen zu haben. :-)

Deep-Sea 7. Feb 2011 09:45

AW: Test ob gültige REAL
 
Ich hoffe du meinst damit auch das Umstellen deiner Abfrage und nicht nur das ändern des Datentyps. Denn auf "= True" zu prüfen ist böse! :wink:

DeddyH 7. Feb 2011 09:46

AW: Test ob gültige REAL
 
Ich winke mit dem Zaunpfahl, Du haust ihm gleich den Zaun um die Ohren :lol:

Deep-Sea 7. Feb 2011 09:49

AW: Test ob gültige REAL
 
Zitat:

Zitat von DeddyH (Beitrag 1080018)
Ich winke mit dem Zaunpfahl, Du haust ihm gleich den Zaun um die Ohren :lol:

Hehe. Nur zur Sicherheit :wink:

shmia 7. Feb 2011 12:02

AW: Test ob gültige REAL
 
Eine Lösung für das Problem wäre ein Zustandsautomat.
Wahrscheinlich ist fast jede Lösung des Problems eine Implementierung eines Zustandsautomaten.

SvenLittkowski 8. Feb 2011 05:49

AW: Test ob gültige REAL
 
Ist böse? Hmmm, was meinst Du? Ich hatte diesen Teil des Codes mit etwas anderem ersetzt, so kann ich es nicht selber herausfinden. Vielen Dank für den Rat. :-)

Deep-Sea 8. Feb 2011 09:03

AW: Test ob gültige REAL
 
Zitat:

Zitat von SvenLittkowski (Beitrag 1080240)
Ist böse? Hmmm, was meinst Du?

Sieh dir dazu das Tutorial Über den Umgang mit Boolean an :thumb:

SvenLittkowski 9. Feb 2011 01:58

AW: Test ob gültige REAL
 
Ah, jetzt fange ich an, zu verstehen. Vielen Dank für den interessanten Link. Ich bin noch am Lesen, wollte mich aber bei Dir melden. :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:44 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