Autor Beitrag
patkla85
Hält's aus hier
Beiträge: 8

Win 2000, Win Xp
Delphi 7
BeitragVerfasst: Di 15.05.07 14:47 
Hallo zusammen,


hab ne funtkion geschrieben die den eingegeben string auf numerischkeit überprüfen soll.

ausblenden volle Höhe 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:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
function IsNumeric(const str: String): boolean;

    var zeichen: string;
            len: integer;
              i: integer;

    begin
    len:= length(str);
    for i := 1 to len do

         Begin

         zeichen:=  AnsiMidStr(str, i, 1);


         if (zeichen= '1')
         or (zeichen ='2'or (zeichen ='3'or (zeichen ='4')
         or (zeichen ='5'or (zeichen ='6'or (zeichen ='7')
         or (zeichen ='8'or (zeichen ='9')
         then

              result:=true

         else


              result:=false;
              break;


         end;
     end;


procedure TForm1.DBEdit6Exit(Sender: TObject);

VAR
    usereingabe,ende,anfang,Len2 : String;
    Len :Integer;

begin

    usereingabe := DBEdit6.Text;
    Len := Length(DBEdit6.Text);
    Len:= Len-1;

    Ende:= AnsiRightStr(DBEdit6.Text,-1);
    Anfang:= AnsiLeftStr(DBEdit6.Text,-1);


    If Len > 0 Then

        If IsNumeric(DBEdit6.Text)
        then

            Showmessage('Achtung Eingabefehler')
            {DBEdit6.SetFocus}

        else

        end;
end.


jedoch klappt das nicht so.

wenn ich a eingebe, komm keine fehlermedlung
erst wenn ich aa oder ab also 2 buchstaben eingebe kommt eine meldung
außerdem kommt bei 10a abenfalls keine medlung.

kann mir jemand weiterhelfen???


danke im voraus

mfg patrick

Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Di 15.05.07 15:01 
Du brichst die Schleife nach dem 1. Durchlauf ab (Break;).

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
patkla85 Threadstarter
Hält's aus hier
Beiträge: 8

Win 2000, Win Xp
Delphi 7
BeitragVerfasst: Di 15.05.07 15:18 
ja ok aber warum wird nur ein Showmessage(test); angezeigt wenn die hausnummer aus zwei
zeichen besteht.
wenn ich nur ein zeichen habe kommt keine message das heißt ja das das erste zeichen nicht beachtet wird aber warum?????

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
function IsNumeric(str: String): boolean;

    var zeichen,test: string;
            len: integer;
              i: integer;

    begin

    len:= length(str);
    test:=InttoStr(Len);
    Showmessage(test);
    for i := 1 to len do

         Begin

         zeichen:=  AnsiMidStr(str, i, 1);


Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt
freak4fun
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 604
Erhaltene Danke: 4

Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
BeitragVerfasst: Di 15.05.07 15:22 
Deine Schleife wird IMMER abgebrochen, da das "break;" IMMER beim ersten durchlauf ausgeführt wird. Nutzer begin end; für mehrere Anweisungen bei der if-bedingung.
Und nutze DELPHI-TAGS! ;)

Edit:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
function IsNumeric(const str: String): boolean; 
var 
  zeichen: string
  len, i: integer; 
begin 
  len:= length(str); 
  for i := 1 to len do 
    Begin 
      zeichen:=  AnsiMidStr(str, i, 1); 
      if zeichen in ['1'..'9'then 
        result:=true 
      else 
        begin
          result:=false; 
          break; 
        end
   end
end;


MfG
freak

_________________
"Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen


Zuletzt bearbeitet von freak4fun am Di 15.05.07 15:26, insgesamt 2-mal bearbeitet
patkla85 Threadstarter
Hält's aus hier
Beiträge: 8

Win 2000, Win Xp
Delphi 7
BeitragVerfasst: Di 15.05.07 15:26 
ok sorry wegen den tags, :)

ja wegen dem break ok,

aber wenn ich die länge des strings über eine messagebox ausgebe muss der doch
auch eine ausgabe machen wenn nur ein zeichen da ist macht er aber nicht,

und die box wird ja schon vor der schleife ausgeführt das heißt es muss doch etwas

mit der funktion length zu tun haben oder nicht??
freak4fun
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 604
Erhaltene Danke: 4

Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
BeitragVerfasst: Di 15.05.07 15:29 
Wenn in der MessageBox schon ein falscher Wert steht übergibst du der Funktion vielleicht schon etwas falsches ... Was gibst du ein und welches Ergebnis erwartest du denn?

_________________
"Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
patkla85 Threadstarter
Hält's aus hier
Beiträge: 8

Win 2000, Win Xp
Delphi 7
BeitragVerfasst: Di 15.05.07 15:34 
ich habe ein feld hausnummer in diesem feld steht eine "10"
ich habe die function isnumeric um zu überprüfen ob die zeichen numerisch sind.

mit der function length bekomm ich ja die länge des strings, also
wollte ich diese da sie es ja int muss ich es erst in einen string umwandeln
in einer box ausgeben, wenn die 10 im feld steht kommt ja auch eine korrekte box,

nämlcih mit antwort 2, ist ja richtig bei 110 kommt eine box mit 3 usw.

jedoch kommt bei 5 oder 6 also eine ziffer kein box aber das versteh ich halt nicht.


mfg patkla
freak4fun
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 604
Erhaltene Danke: 4

Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
BeitragVerfasst: Di 15.05.07 15:39 
Wenn du als Hausnummer keine zB 10a zulässt, dann würde ich anders ansetzen und zwar die Eingabe von Nicht-Zahlen-Werten verhindern. Dazu findest du Hilfe hier im Forum.

Wenn du zB 10a zulässt wird es schwieriger. :gruebel:

_________________
"Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen


Zuletzt bearbeitet von freak4fun am Di 15.05.07 15:46, insgesamt 1-mal bearbeitet
patkla85 Threadstarter
Hält's aus hier
Beiträge: 8

Win 2000, Win Xp
Delphi 7
BeitragVerfasst: Di 15.05.07 15:41 
richtig ^^

10a muss zugelassen sein.

mfg
freak4fun
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 604
Erhaltene Danke: 4

Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
BeitragVerfasst: Di 15.05.07 16:00 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.Button1Click(Sender: TObject);
var
  myInt: Integer;
begin
  if TryStrToInt(Edit1.Text, myInt) or
     TryStrToInt(Copy(Edit1.Text, 0, Length(Edit1.Text) - 1), myInt) then
    ShowMessage('Gültige Hausnummer!')
  else
    ShowMessage(' KEINE gültige Hausnummer!');
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if not (key in ['0'..'9''a'..'z'#8]) then
    key := #0;
end;


Vielleicht noch zur Erklärung:
Es können nur Zahlen und Kleinbuchstaben eingegeben werden. (#8 entspricht der Zurück-Taste. ;)) Dann nehme ich noch an, das es keine zwei Buchstaben hinter einander geben darf/kann. Also Überprüfe ich, ob im Editfeld nur Zahlen sind, oder alles Zahlen sind, bis auf die letzte Stelle, an der ja nur ein Kleinbuchstabe stehen kann. Wenn es eine gültige Hausnummer ist, steht der Zahlenwert in myInt. Falls es den Kleinbuchstaben gibt, ist der nicht in myInt. :)

_________________
"Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
patkla85 Threadstarter
Hält's aus hier
Beiträge: 8

Win 2000, Win Xp
Delphi 7
BeitragVerfasst: Di 15.05.07 16:19 
sehr schön vielen dank, :)

aber wie könnte man das denn machen das man nicht
OnKeyPress sondern
die Onexit Procedure nimmt???

ist das möglich wegen dem Key????

und könntest du mir diese zeile erklären:

key := #0; was heißt das '0???

vielen dank


mfg patkla
freak4fun
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 604
Erhaltene Danke: 4

Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
BeitragVerfasst: Di 15.05.07 16:23 
user profile iconpatkla85 hat folgendes geschrieben:
könnte man das denn machen das man nicht
OnKeyPress sondern
die Onexit Procedure nimmt???

ist das möglich wegen dem Key????


Den Key gibts nicht im OnExit. Wieso willst du das da haben? Du kannst im OnExit den Code schreiben, der Prüft, ob die Hausnummer gültig ist.

Durch key := #0; wird die Eingabe verworfen ... Delphi denkt dann das keine Taste gedrückt wurde.

_________________
"Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
patkla85 Threadstarter
Hält's aus hier
Beiträge: 8

Win 2000, Win Xp
Delphi 7
BeitragVerfasst: Di 15.05.07 16:31 
vielen dank freak4fun,

hast mir echt klasse weitergeholfen.

toll das es so jemanden wie dich gibt.
:wink:

mfg patkla