Sprawdzanie wartości

0

Witam.
Szukałem, ale chyba w delphi nie jestem w stanie jeszcze sobie na pytania szybko odpowiadać. Mam sobię Edit1.Text, chciałbym teraz dowiedzieć się czy ów pole jest wypełnione liczbą czy stringiem i w zależnosci od uzyskanej odpowiedzi coś pokombinować. Jest jakaś wbudowana funkcja, która mi to powie ? (chodzi mi mniej więcej o odpowiednik is_string w PHP - ale nie ma mi mówić czy zmienna jest typu string - bo to wiemy - tylko czy wartość wprowadzona w pole jest typu string)

zapewne rozwiązanie jest banalne... ale cóż....

0
function TryStrToInt(const S: string; out Value: Integer): Boolean;

lub

try
 liczba := IntToStr(s);
except
 on Ex :EConvertError do
 begin
  { jezeli nie liczba to wpisz cokolwiek }
 end;
end;
0

Albo takoj:

function IsString(v : string) : boolean;
var
  i : integer;
begin
  Result := FALSE;
  for i := 1 to Length(v) do
    if not (v[i] in ['0'..'9']) then Result := TRUE;
end;

Dla przykładu:

IsString('abc123') // True
IsString('123') // False
0

Te przykłady są głównie przystosowane na sprawdzenie, czy ciąg znaków jest typu Integer, ale na podstawie wyniku funkcji można też sprawdzić czy jest to tekst...

{Funkcja sprawdza czy ciąg znaków jest typu Integer od: 0 do 9 oraz dla np.: 0.0 (kropka) lub -91 (minus)}
function CheckInteger(Text: String): Boolean;
var
 i: integer;
begin
 Result := True;
 for i := 1 to length(Text) do
   if not (Text[I] in ['0'..'9', '-', '.']) then Result := False;
end;

begin
 s1 := 'aaa1';
 if CheckInteger(s1) = True then Item.ImageIndex := strtoint(s1);
 else ShowMessage('Zmienna: ' + s1 + ' nie jest typu Integer');
end;

{Lub}
var
  kod: Integer;
  liczba: Double;
begin
  Val(Edit.Text,liczba,kod); // Konwersja tekstu na liczbę
  if kod<>0 then begin // Nieliczba
    Application.MessageBox('To nie jest liczba','Błąd',MB_OK); // komunikat o błędzie
    Exit;
  end;
 // wykonaj_obliczenia;
end;

{Lub

OnKeyDown: jeśli znak jest zabroniony to znak := 0
OnChanged: jeśli całość nie pasuje to czyść Edit (zabezpieczenie
przed wklejeniem ze schowka)
MaxLength: max liczba znaków}
if not (Key in ['0'..'9',',','.',#8]) then
 begin
  Key := #0;
  Beep;
  Exit;
 end;

</image>
0

Dzięki :) ... ewentualnie znalazłem IntToStrDef -> (chyba tak to było) - jeśli konwersja na string sie nie powiedzie - kończy z błędem i podajemy jego numer - felre tego jedynie taki, że jeśli ktoś użyje liczby dokładnie równej naszemu numerowi błędu - będzie problem...

Dzięki jeszcze raz wszystkim :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1