Autor Beitrag
Gast
Gast
Erhaltene Danke: 1



BeitragVerfasst: Do 13.02.03 01:26 
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.
ausblenden 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:
    { Prüft ob String ein Integerwert ist }
{$HINTS OFF}
function IsValidInteger(S: String): Boolean;
var
  dummy, Code: Integer;
begin
  Val(S, dummy, Code);
  Result := Code = 0;
end;
{$HINTS ON}

    { Prüft ob String ein Currencywert ist }
function IsValidCurrency(S: String): Boolean;
var
  C: Currency;
begin
  Result := TextToFloat(PChar(S), C, fvCurrency);
end;

    { Prüft ob String ein Extendedwert ist }
function IsValidExtended(S: String): Boolean;
var
  E: Extended;
begin
  Result := TextToFloat(PChar(S), E, fvExtended);
end;


Hier einige Anwendungsbeispiele:

ausblenden 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;
Ist die Frage beantwortet? Das Problem gelöst?

Dann klicke hier, um das Thema entsprechend zu markieren!