Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi string auf zahlen prüfen (https://www.delphipraxis.net/10490-string-auf-zahlen-pruefen.html)

Pseudemys Nelsoni 19. Okt 2003 19:39


string auf zahlen prüfen
 
hoi,

wie kann ic per button klick z.b edit1 auf zahlen prüfen (diese will ich vermeiden). Ich weiss nur noch das es in der art war wie... if '0'..'9' in string.... hat jemand ne idee?

braingrenade 19. Okt 2003 19:44

Re: string auf zahlen prüfen
 
Moin !

Eine funtion die genau das gegenteil prüft hab ich schon mal geschrieben
(musst du halt umschreiben) :

Delphi-Quellcode:
function isinteger(input : string): bool;
var
   i :integer;
begin
result := true;
i:= 1;
repeat
if input[i] in ['0'..'9'] then i:=i+1 else
begin
result := false;
break;
end;
until i = length(input);
end;

static_cast 19. Okt 2003 19:47

Re: string auf zahlen prüfen
 
Hi,

Kannst du im OnKeyPress abfangen

Key ist die taste die gedrückt wurde

Delphi-Quellcode:
case Key of
  '0'..'9': Key:=Key;
  #8: Key:=Key;
  else Key:=#0;
end;
das geht, aber hatte gerade nicht die lust eine komplexe if abfrage zu erdenken geht unteranderem auch und ist dazu etwas sauberer :)

Grüsse Daniel

Hansa 19. Okt 2003 19:54

Re: string auf zahlen prüfen
 
Zitat:

Zitat von braingrenade
musst du halt umschreiben

Und zwar mit einem Wort
Delphi-Quellcode:
not
:mrgreen: Bei dem Case Beispiel geht das nicht.

Pseudemys Nelsoni 19. Okt 2003 20:03

Re: string auf zahlen prüfen
 
danke leute :)

btw: ich muss es per button prüfen, nicht keypress

trialfreak 19. Okt 2003 20:06

Re: string auf zahlen prüfen
 
Man könnte das ganze gleich bei Eingabe in das Edit-Feld mit Hilfe des Ereignisses OnKeyDown prüfen:

Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (key>='0') AND (key<='9') then
Key:=#0;
end;
Oder man verwendet das KeyDown Ereignis.

Da bekommst Du den ASCII-Code des Zeichens das der Benutzer eingegeben hat. Wenn dieser nicht zwischen 48 und 57 liegt ist es keine Ziffer, falls doch musst du ihm den Wert 0 zuweisen.
Der SourceCode ist ähnlich dem obigen, darum schreibe ich ihn hier nicht nochmal hin.


EDIT:

Komisch, ebend wurden mir noch keine Antwort-Beiträge angezeigt - blöder Cache :gruebel:

Wenn du das ganze sofort bei der Eingabe machst sparst du dir die nachträgliche Überprüfung - ein Eingeben von Ziffern ist dann nämlich gar nicht erst möglich.

static_cast 19. Okt 2003 20:07

Re: string auf zahlen prüfen
 
Zitat:

btw: ich muss es per button prüfen, nicht keypress
naja aber beim OnKeyPress könntest du schon andere eingaben unterdrücken das wollte ich damit sagen, aber nagut :)

braingrenade 21. Okt 2003 17:26

Re: string auf zahlen prüfen
 
Moin !

so müsste es doch gehen :

Delphi-Quellcode:
function numbers(s : string) : boolean;
var
   i : Integer;
begin
result := false;
for i := 0 to length(s) do
if s[i] in ['0'..'9'] then
 begin
  result := true;
  break;
 end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
if numbers(edit1.Text) then showmessage('Die Eingabe beinhaltet Zahlen');
end;
edit :
@ hansa : Hab deinen eintrag zu sapät gelesen !
:mrgreen:

nTE 21. Okt 2003 19:34

Re: string auf zahlen prüfen
 
Ich möchte nochmal darauf hinweisen, dass das Abfangen der Tasteneingaben keineswegs die Lösung ist, per Kontext-Menü -> Einfügen geht es schließlich auch und das dann zu verbieten ist wohl eher eine Notlösung als anwenderfreundlich.

Meine Alternative wäre eine Funktion, die einen String auf "Zahlen" prüft und nur diese zurückliefert.
Delphi-Quellcode:
function StripDigits(sInput: String): String;
var
  i, dFirstPos:    Integer;
  boolPrevWasDigit: Boolean;

begin
  // Variablen initialisieren
  Result := '';
  boolPrevWasDigit := false;
  dFirstPos := 1;

  // Schleife in der alle Zeichen von sInput nach 0..9 geprüft werden
  for i := 1 to Length(sInput) do
    begin
      // ist das i-te Zeichen aus 0..9?
      if sInput[i] in ['0'..'9'] then
        begin
          // war das vorherige Zeichen keine Zahl?
          if not boolPrevWasDigit then
            // es war keine Zahl, aber dieses Zeichen ist eine Zahl,
            // also setze Anfangsposition für erste gefundene Zahl nach
            // einem Nicht-Zahl-Zeichen
            dFirstPos := i;

          // setze "vorherige Zeichen war eine Zahl" auf wahr
          boolPrevWasDigit := true;
        end // if sInput[i] in ['0'..'9'] then
      else
        begin
          // war das vorherige Zeichen eine Zahl
          if boolPrevWasDigit then
            // es war eine Zahl, aber diese Zeichen ist keine Zahl,
            // also kopiere die Zeichen von "Anfangsposition für die
            // erste gefundene Zahl" (i - Anfangsposition) Anzahl Zeichen
            Result := Result + Copy(sInput, dFirstPos, i - dFirstPos);

          // setze "vorheriges Zeichen war eine Zahl" auf falsch
          boolPrevWasDigit := false;
        end; // else.. (if sInput[i] in ['0'..'9'] then)
    end;

  // da der Fall "vorheriges Zeichen war keine Zahl" am Ende der Zeichenkette
  // nicht auftritt, wenn das letzte Zeichen eine Zahl ist:
  // Prüfe ob das vorherige Zeichen eine Zahl war
  if boolPrevWasDigit then
    // wenn das vorherige (letzte) Zeichen eine Zahl war, dann kopiere die Zeichen von
    // "Anfangsposition für die erste gefundene Zahl" (i - Anfangsposition) Anzahl Zeichen
    Result := Result + Copy(sInput, dFirstPos, Length(sInput) + 1 - dFirstPos);
end;

trialfreak 22. Okt 2003 17:09

Re: string auf zahlen prüfen
 
Mit dem Einfügen-Feld hast du Recht - hab ich gar nicht dran gedacht :wall:

negaH 22. Okt 2003 23:55

Re: string auf zahlen prüfen
 
Delphi-Quellcode:
if StrToIntDef(Edit1.Text, -1) = -1 then
  raise Exception.Create('keine gültige Zahl');

// oder
try
  StrToInt(Edit.Text);
// oder
  StrToFloat(Edit1.Text);
except
  raise Exception.Create('keine gültige Zahl');
end;
Gruß Hagen

himitsu 23. Okt 2003 08:06

Re: string auf zahlen prüfen
 
Versuchs mal hiermit:
Delphi-Quellcode:
Function ohneZahlen(S: String): String;
  Var I: Integer;

  Begin
    For I := Length(S) downto 1 do
      If S[I] in ['0'..'9'] Then Delete(S, I, 1);
    Result := S;
  End;

Procedure TForm1.Button1Click(Sender: TObject);
  Var StringOhneZahlen: String;

  Begin
    StringOhneZahlen := ohneZahlen(Edit1.Text);
    {...}

    Label1.Caption := StringOhneZahlen;
  End;

TypusMensch 28. Jun 2004 15:22

Re: string auf zahlen prüfen
 
@braingrenade:

Nur um es hinzufügen zu wollen, damit keiner später noch einmal dumm nachfragt, warum dein Code nicht funzt. Dein Code funktioniert seltsamer Weise nur bei ab zweistelligen Zahlen. Eine einstellige Zahl z.B. 1 wird als alphanumerisch erkannt, nehmt als die einfache Version:

Delphi-Quellcode:
function isinteger (s:string) : boolean;
var i:integer;
begin
  result := true;
  for i := 1 to length(s) do begin
      if not (s[i] in ['-','0'..'9']) then begin
        result := false;
        exit;
      end;
  end;
end;
Fragt mich nicht wieso, habe den Code jetzt nicht weiter auseinander genommen. Habe dazu keinen Bock gehabt...

Luckie 28. Jun 2004 15:25

Re: string auf zahlen prüfen
 
Schon mal an val gedacht? :roll:

TypusMensch 28. Jun 2004 15:34

Re: string auf zahlen prüfen
 
@Luckie:

Siehe Artikel:
http://www.delphipraxis.net/internal...ight=isinteger

3. Beitrag - sakura
:stupid: :stupid: :stupid:

braingrenade 28. Jun 2004 15:37

Re: string auf zahlen prüfen
 
@TypusMensch

Also bei mir kommt wenn ich bei dem Code ne 1 eingeb die richtige Meldung, oder hab ich da was falsch verstanden :gruebel:

fkerber 28. Jun 2004 15:40

Re: string auf zahlen prüfen
 
Hi!

Sowie ich seinen Hinweis und Sakuras Kommentar verstehe, schlägt die prüfung mit val bei bestimmten eingaben (z.b. xa24c ) fehl.

Ciao fkerber

TypusMensch 28. Jun 2004 15:43

Re: string auf zahlen prüfen
 
@brain:

Wenn ich nur ne 1 oder nur ne 4 eingebe erkennt er es bei mir nicht als zahl an sondern als alpahnum. ??? ich weiß auch net wieso?!? :gruebel: :gruebel:

@fkerber:

Schon klar, aber es gibt in Branchen Bezeichnungen, wo die seltsamsten Sachen eingegeben werden müssen. Da is das mit Val nicht sonderlich "sicher", wie ich finde :|

Luckie 28. Jun 2004 17:14

Re: string auf zahlen prüfen
 
Zitat:

Zitat von TypusMensch
Schon klar, aber es gibt in Branchen Bezeichnungen, wo die seltsamsten Sachen eingegeben werden müssen. Da is das mit Val nicht sonderlich "sicher", wie ich finde :|

So weit ich das verstanden haben, will er Prüfen, ob im Edit eine gültige Zahl steht oder nicht. Und 1235 ist wohl sowohl im kaufmännishcne bereich eine gültige Zahl als auch in der Industrie. Davon, dass die Zahl in einem bestimmten Format steht, mit irgnedwelchen Zeichen davor und / oder dahinter, davon war nie dir Rede oder?


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz