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.

1

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