Delphi Befehl gesucht!
Ich will eine if-then-Funktion schreiben und zwar will ich schreiben: Wenn m keine Zahl ist, dann soll eine Fehlermeldung kommen. Und mir fehlt der Befehl dafür, also wie schreibe ich m ist keine Zahl?
Danke im Voraus
5 Antworten
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)
Hi,
also wenn es um wir davon ausgehen, dass m ein string und auf ein Integer geprüft werden soll ist folgender Code eine schnelle Sache:
uses Sysutils;
var m:string;
zahl:Integer;
begin
if tryStrToInt(m,zahl) then
ShowMessage(m + ' ist ein Integerwert')
else
ShowMessage(m + ' ist kein Integerwert');
end;
das ganze funktioniert übrigens auch mit TryStrtoFloat.
Viel Erfolg!
![](https://images.gutefrage.net/media/user/Kajjo/1572699439557_nmmslarge__0_0_120_120_040779a85bcf89fd282fa9af46f30da0.png?v=1572699440000)
- Falls die Variable m:Char ein Zeichen ist, kann man mit if m in ['0'..'9'] then prüfen, ob das Zeichen eine Ziffer. ist.
- Falls die Variable *m:String eine Zeichenkette ist, so muss man sich als erstes überlegen, ob m eine beliebige Fließkommazahl z:Double sein darf oder eine Ganzzahl z:Integer sein muss. Man kann sich zudem weitere Einschränkungen wie "muss ungleich Null sein" oer "muss positiv sein" überlegen. Dies hängt vom Einsatzfall ab.
- Am empfehlenswertesten für Anfänger ist für Fließkommazahlen die Funktion z := StrToFloatDef(m, default) wobei m:String deine Zeichenkette und default ein Standardwert ist, falls m keine Zahl ist. Das Ergebnis der Funktion ist z:Double, also die in eine Zahl umgewandelte Zeichenkette. Falls m:String keine Zahl war, so wird stattdessen default zurückgegeben. Wenn Du also z.B. unbedingt eine positive Zahl benötigst, wäre der Aufruf if StrToFloatDef(m, 0) = 0 then begin (...keine Zahl...) end else begin (...Zahl...) end der entsprechende Code. Statt Null könnte man hier auch irgendeine andere Zahl einsetzen, die bei der Eingabe nicht vorkommen kann.
- Für Ganzzahlen (z:Integer) gibt es die entsprechende Funktion StrToIntDef(m, default).
![](https://images.gutefrage.net/media/user/Mauritan/1523138820655_nmmslarge__10_26_187_187_aed0ac70ef5236a1087250aa302f11d6.jpg?v=1523138821000)
wer dieses alte Posting finden sollte: mittlerweile hatten wir 10 neue Versionen.
In denen gibt es eine Reihe von "Try...." Funktionen, siehe Hilfe.
Es gibt auch "isNumber" etc.
![](https://images.gutefrage.net/media/user/daCypher/1444744777_nmmslarge.jpg?v=1444744777000)
Hab grad die Funktion in einem Forum gefunden:
function IsNumeric(s:String):Boolean;
var i:Integer;
begin
Result:=False;
for i := 1 to Length(s) do
if (s[i] > '9') or (s[i] < '0') then exit;
Result:=True;
end;
Die kannst du in deinem if einfach aufrufen, also
If IsNumeric(m) = False then showmessage('Was ist an "nur Zahlen" so schwer zu verstehen?');
Kannst dir evtl. auch den ganzen Thread angucken: http://www.delphipraxis.net/59233-pruefen-ob-edit-nur-aus-zahlen-besteht.html
![](https://images.gutefrage.net/media/user/Suboptimierer/1443606504450_nmmslarge__0_0_160_160_7f828fad18ee7edb96b8daceedaeeadb.png?v=1443606506000)
Alternative: if not CharInSet(m[i], ['0'..'9']) then
Dann kann man einfacher noch . und , ergänzen. Mit ors geht das natürlich auch.
![](https://images.gutefrage.net/media/user/Suboptimierer/1443606504450_nmmslarge__0_0_160_160_7f828fad18ee7edb96b8daceedaeeadb.png?v=1443606506000)
Von welchem Typ ist m? Vielleicht kannst du eventuell mit System.Variants arbeiten und den Befehl VarIsNumeric()
nutzen oder ist es nicht das, was du suchst?
Ist m ein String und du willst nur schauen, ob der Inhalt eine Zahl ist? ➼ System.SysUtils.tryStrToFloat zum Beispiel.