Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#17

Re: Zeichenkette Prüfen ob gültige Zahl ohne Umwandeln?

  Alt 29. Nov 2007, 17:50
So wäre es mit einem Automaten (Es erkennt die Floatingpoint Notation, Fixed Point und Integer mit beliebig vielen Vorzeichen), also z.B.:
"+-+-+12345,3456453345345E-9123123123"

Delphi-Quellcode:
Function IsAnyNumber(Const aValue: String): Boolean;
Const
  map: Array[0..5, 1..6] Of Integer = (
  {0}(1, 2, -1, 0, -1, -1),
  {1}(1, 2, 4, -1, -1, 9),
  {2}(3, -1, -1, -1, -1, 9),
  {3}(3, -1, 4, 0, -1, 9),
  {4}(5, -1, -1, 4, -1, -1),
  {5}(5, -1, -1, -1, -1, 9)
    );

Var
  State, cChar, i: Integer;

Begin
  State := 0;
  Result := False;
  For i := 1 To Length(aValue) Do Begin
    Case aValue[i] Of
      '0'..'9': cChar := 1;
      ',', '.': cChar := 2;
      'E', 'e': cChar := 3;
      '-', '+': cChar := 4;
      Else cChar := 5;
    End;
    State := map[State, cChar];
    If State = -1 Then Exit;
  End;
  If State <> 9 Then
    State := map[State, 6]; // Zustand bei Erkennen des Terminalsymbols

  Result := (State = 9)
End;
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat