Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Prüfen, ob Eingabe im Editfeld mit einer Zahl anfängt


jana08 - So 28.10.07 12:40
Titel: Prüfen, ob Eingabe im Editfeld mit einer Zahl anfängt
Hallo.
Hab mal eine Frage. Ich muss bis Freitag im Info Unterricht ein Programm abgeben (LOGO für Arme, ist aber auch egal was für eins).
Ich komme nun nicht weiter.

Ich möchte überprüfen, ob eine Eingabe im Editfeld mit einer Zahl anfängt. Wie kann ich das machen??

Das soll also in etwa so aussehen:


Delphi-Quelltext
1:
if (Buchstabe1 = 'Zahl'then                    



Buchstabe1 ist deklariert und alles. Klappt auch. Nur 'Zahl' nicht.
Wie muss ich Zahl deklarieren? oder geht das noch anders? Oder ist es so ganz falsch?
Bitte helft mir...

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt und Titel der Frage angepasst. ;)


Allesquarks - So 28.10.07 12:58

Delphi typisiert gerne und tut erweckt damit den eindruck, dass bestimmte Sachen unvereinbar wären obwohl im Computer alles Zahlen sind:

Zunächst im Edit oder so steht ein String auf einen einzelnen buchstaben greift man mit namestring[stelle] zu und hat dann einen charakter (char). Desweiteren ist ein Charakter auch nur eine Zahl, welche über eine Tabelle (Ascii) mit buchstaben assoziiert ist. du musst einfach nur den Zahlenwert des Buchstaben/Zeichens '1' herausfinden und das gleiche von '9' und überprüfen, ob der die Zahlrepräsentation des Charakter dazwischen liegt. das machst du mit < und > und an diesen Zahlenwert kommst du mit ord(meincharakter)


jana08 - So 28.10.07 13:04

Danke schonmal für die Antwort. Aber da ich mich mit Delphi nicht soo gut auskenne, versteh ich das nicht so ganz. Mit dem char das hab ich ja, um den ersten Buchstabe von der Eingabe rauszufinden. Also:

deklariert:

Delphi-Quelltext
1:
2:
3:
var 
Buchstabe1: char;
Eingabe: string;


und das:

Delphi-Quelltext
1:
2:
Eingabe:=EEingabe.text;
Buchstabe1:=Eingabe[1];


und jetzt möchte ich wissen, ob dieser Buchstabe1 eine Zahl oder ein Buchstabe ist..

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Allesquarks - So 28.10.07 13:10

na ja du machst sowas wie if xxx<ord(meinchar)<yyy wobei du dir xxx und yyy aus der ascii tabelle suchen musst => googlen


jana08 - So 28.10.07 13:14

Danke. Das ist mir irgendwie zu kompliziert, ich glaub ich machs einfach doch auf die umständliche Art.. =/
Aber nochmal danke


SAiBOT - So 28.10.07 13:18


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
function IsInteger(value : String) Boolean;
begin
  Result:=true;
    try
      StrToInt(value)
    except
      Result:=false;
    end;
end;

if IsInteger(Edit1.Text[1]) then //...


EDIT: oder noch schöner:


Delphi-Quelltext
1:
if Edit1.Text[1in ['0'..'9'then //...                    


Allesquarks - So 28.10.07 13:35

Zugegeben deine letzte Variante ist nur eine Zeile und im Verhältnis zu meiner werden darin auch noch schön Schlüsselwörter gehighlightet. Da überprüfst du allerdings ein Set so wie ich den Delphi Compiler kenne, macht der da zehn Überprüfungen für jedes Element einzeln; das ist Verschwendung. Dabei sieht meine Variante noch nicht mal gehackt oder so aus. Selbst wenn er erkennt, dass ['0'..'9'] zusammenhängend ist, ist dies nur identisch zu meiner Variante. Deine erste ist auch wieder son Delphi schön-Stil. Ich frage mich nur wieso man einen Ausnahmezustand verhängen muss, um zu wissen ob das eine Zahl ist.
Manchmal ist es ganz gut, dass man mit Delphi nicht Treiber und so schreiben kann die wären einfach zu langsam.


SAiBOT - So 28.10.07 14:01

user profile iconAllesquarks hat folgendes geschrieben:
Manchmal ist es ganz gut, dass man mit Delphi nicht Treiber und so schreiben kann die wären einfach zu langsam.


für eine Schulaufgabe wird es wohl reichen :roll:


jana08 - So 28.10.07 14:23

Danke. Ja, für die Aufgabe reicht es!
Danke nochmal