Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Hilfe string kontrolle missglückt (https://www.delphipraxis.net/157991-hilfe-string-kontrolle-missglueckt.html)

Epytir 1. Feb 2011 14:58

Hilfe string kontrolle missglückt
 
Hallo Delphi Leute
ich bin Schueler an der Fachober und soll ein rogramm schreiben das die Eingabe überprüft und nur Buchstaben zulässt das ist es :
Delphi-Quellcode:
procedure TForm1.btn_PruefenClick(Sender: TObject);
var Eingabe : string;
     i,
     Stringlänge      : integer;
     Überprüfungsarray : array of char;
     Falsch,
     Richtig : Boolean;
begin
  Eingabe := edtEingabe.Text;
  Stringlänge :=Length(Eingabe);
  SetLength(Überprüfungsarray,Stringlänge);
  for I := 0 to Stringlänge-1 do
  begin
    Überprüfungsarray[i]:= Eingabe[i];
    if Überprüfungsarray[i] in ['a'..'z','A'..'Z'] then
    begin
      Richtig:=true;
    end
    else
      Falsch :=true;
  end;
  if Falsch = true then
  begin
    MessageDlg('Fehlerhafte Eingabe nur Buchstaben',mtError,mbOKCancel,0);
    MessageDlg(IntToStr(Stringlänge),mtInformation,mbOKCancel,0);
    edtEingabe.Clear;
  end;
  if Richtig = true then
  begin
    MessageDlg('Eingabe correct',mtInformation,mbOKCancel,0);
    edtEingabe.Clear;
  end;

  end;
end.
er erkennt wenn man eine falsche eingabe macht richtig allerdings wenn ich nur buchstaben benutze sagt er richtig und dann nochmal falsch ... könnt ihr mir da weiterhelfen
Gruß Epytir

Klaus01 1. Feb 2011 15:01

AW: Hilfe string kontrolle missglückt
 
Hallo,

du solltest die Schleife verlassen wenn ein Zeichen kein Buchstabe ist.

Bei Deinem IF Konstrukt besser:

Delphi-Quellcode:
if falsch then
Ergänzung:

Die Variablen falsch und richtig hast Du nicht initialisiert (mit einem Wert vorbelegt).

Grüße
Klaus

DP-Maintenance 1. Feb 2011 15:03

Dieses Thema wurde am "01. Feb 2011, 16:03 Uhr" von "Phoenix" aus dem Forum "Fragen / Anregungen zur DP" in das Forum "Sonstige Fragen zu Delphi" verschoben.

Epytir 1. Feb 2011 15:05

AW: Hilfe string kontrolle missglückt
 
wie verlasse ich die schleife denn dann und da muss ja trotzdem der fehler kommen mit nur buchstaben ?

Epytir 1. Feb 2011 15:10

AW: Hilfe string kontrolle missglückt
 
schon ok ich habs jetzt gelöst nach 1 stunde XD
ich hab nur einen booleon benutzt und denn auf false vordefiniert danke für den Tip :-)

Klaus01 1. Feb 2011 15:10

AW: Hilfe string kontrolle missglückt
 
.. ich hätte die Methode in etwas so aufgebaut.

Delphi-Quellcode:
procedure TForm1.btn_PruefenClick(Sender: TObject);
var Eingabe : string;
     i,
     Stringlänge : integer;
     Überprüfungsarray : array of char;
     //Falsch,
     richtig : Boolean;
begin
  Eingabe := edtEingabe.Text;
  Stringlänge :=Length(Eingabe);
  SetLength(Überprüfungsarray,Stringlänge);
  for I := 0 to Stringlänge-1 do
  begin
    Überprüfungsarray[i]:= Eingabe[i];
    richtig := Überprüfungsarray[i] in ['a'..'z','A'..'Z']);
    if not richtig then
      break;
  end;

  if Richtig then
    begin
      MessageDlg('Eingabe korrect',mtInformation,mbOKCancel,0);
      edtEingabe.Clear;
    end
  else
    begin
      MessageDlg('Fehlerhafte Eingabe nur Buchstaben',mtError,mbOKCancel,0);
      MessageDlg(IntToStr(Stringlänge),mtInformation,mbOKCancel,0);
      edtEingabe.Clear;
    end;

end;

Neutral General 1. Feb 2011 15:12

AW: Hilfe string kontrolle missglückt
 
Hallo,

Du brauchst nicht beide Variablen "Richtig" und "Falsch"! Wenns "falsch" ist, dann setzt du "Richtig" einfach auf "false". Aber du machst es auch verdammt kompliziert. Einfacher geht es so:

Delphi-Quellcode:
procedure TForm1.btn_PruefenClick(Sender: TObject);
var Eingabe: String;
begin
  Eingabe := edtEingabe.Text;
 
  OK := true;
  for i:= 1 to Length(Eingabe) do
  begin
    if not (Eingabe[i] in ['a'..'z','A'..'Z']) then
    begin
      OK := false;
      break;
    end;
  end;

  if OK then
    MessageDlg('Eingabe korrekt',mtInformation,mbOKCancel,0)
  else
    MessageDlg('Fehlerhafte Eingabe nur Buchstaben',mtError,mbOKCancel,0);

  edtEingabe.Clear;
end;

Jumpy 1. Feb 2011 15:14

AW: Hilfe string kontrolle missglückt
 
Ein Schleife kannst du mit "break" vorzeitig verlassen.

Davon abgesehen ist es aber ungeschickt zwei Boolsche Variablen zu nehmen, die dann entweder true sind oder halt nix.

Nimm doch nur eine, z.B. IstRichtig und setze sie auf true, wenn Buchstaben und false, wenn nicht.

Dann könnte der Part mit den Messageboxen auf eine einfache if...else zurechtgestutzt werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:00 Uhr.

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