Delphi Befehl gesucht!

5 Antworten

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!

  • 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).

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.

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


Suboptimierer  06.02.2014, 12:37

Alternative: if not CharInSet(m[i], ['0'..'9']) then

Dann kann man einfacher noch . und , ergänzen. Mit ors geht das natürlich auch.

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.

Woher ich das weiß:Berufserfahrung – Programmierer