(Moderator)
Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
Delphi 2007 Enterprise
|
Re: Zeichenkette Prüfen ob gültige Zahl ohne Umwandeln?
29. Nov 2007, 18: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")
|