| Autor |
Beitrag |
patkla85
Hält's aus hier
Beiträge: 8
Win 2000, Win Xp
Delphi 7
|
Verfasst: Di 15.05.07 14:47
Hallo zusammen,
hab ne funtkion geschrieben die den eingegeben string auf numerischkeit überprüfen soll.
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')
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 Gausi: Delphi-Tags hinzugefügt
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: 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 
Hält's aus hier
Beiträge: 8
Win 2000, Win Xp
Delphi 7
|
Verfasst: 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?????
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 Gausi: Delphi-Tags hinzugefügt
|
|
freak4fun
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: 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:
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 
Hält's aus hier
Beiträge: 8
Win 2000, Win Xp
Delphi 7
|
Verfasst: 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
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: 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 
Hält's aus hier
Beiträge: 8
Win 2000, Win Xp
Delphi 7
|
Verfasst: 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
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: 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. 
_________________ "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 
Hält's aus hier
Beiträge: 8
Win 2000, Win Xp
Delphi 7
|
Verfasst: Di 15.05.07 15:41
richtig ^^
10a muss zugelassen sein.
mfg
|
|
freak4fun
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: Di 15.05.07 16:00
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 
Hält's aus hier
Beiträge: 8
Win 2000, Win Xp
Delphi 7
|
Verfasst: 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
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: Di 15.05.07 16:23
patkla85 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 
Hält's aus hier
Beiträge: 8
Win 2000, Win Xp
Delphi 7
|
Verfasst: Di 15.05.07 16:31
vielen dank freak4fun,
hast mir echt klasse weitergeholfen.
toll das es so jemanden wie dich gibt.
mfg patkla
|
|