Relativ oft muß man eine String-Variable in eine Dezimal-Variable konvertieren. Man baut dann die Konvertierung in ein Try..Except Block ein und hofft, daß keine Exception ausgelöst wird. Dann gibts noch Funktionen die anstelle einer Exception ein Default-Wert liefern. Wenn man keine dieser Varianten nutzen will, dann fängt man an eine komplizierte Überprüfungsroutine zu schreiben um sich dann zu erinnern, daß Delphi durchaus auch Exceptionfreie-Funktionen bietet.
Ich hab hier drei Funktionen die überprüfen ob der String eine Integerzahl, eine Currencyzahl oder eine Extendedzahl ist. Man braucht die Funktionen in kein Try..Except-Block einbinden. Als Rückgabewert liefern sie
True wenn es eine Zahl ist oder
False wenn es keine korrekte Zahl ist und man bei der Konvertierung eine Exception auslöst.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| {$HINTS OFF} function IsValidInteger(S: String): Boolean; var dummy, Code: Integer; begin Val(S, dummy, Code); Result := Code = 0; end; {$HINTS ON}
function IsValidCurrency(S: String): Boolean; var C: Currency; begin Result := TextToFloat(PChar(S), C, fvCurrency); end;
function IsValidExtended(S: String): Boolean; var E: Extended; begin Result := TextToFloat(PChar(S), E, fvExtended); end; |
Hier einige Anwendungsbeispiele:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TForm1.Button1Click(Sender: TObject); var S: String; begin S := '123456'; if IsValidInteger(S) then ShowMessage(Format('%s ist eine gültige Integer Zahl', [S])) else ShowMessage(Format('%s ist keine gültige Integer Zahl', [S]));
ShowMessage( Format('"%s" ist das gültiger Dezimaltrennzeichen', [Decimalseparator]));
S := '922337203685477,5807'; if IsValidCurrency(S) then ShowMessage(Format('%s ist eine gültige Currency Zahl', [S])) else ShowMessage(Format('%s ist keine gültige Currency Zahl', [S]));
S := '1,1e4932'; if IsValidExtended(S) then ShowMessage(Format('%s ist eine gültige Extended Zahl', [S])) else ShowMessage(Format('%s ist keine gültige Extended Zahl', [S])); end; |