Delphi-PRAXiS
Seite 1 von 7  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fehlersuche (https://www.delphipraxis.net/132179-fehlersuche.html)

gangs-taas 7. Apr 2009 15:30


Fehlersuche
 
hey, ich habe versucht mir ein entschlüsselungsprogramm zu schreiben, wobei jeder buchstabe im verschlüsselten Text 'y' buchstaben hat. 'y' ist die erste Zahl in meinem EditFeld 1.
Wenn ich das Programm ausführe funktioniert es erst schon, aber wenn ic auf Button1 Klicke bekomme ich die Meldung
Zitat:

'' ist kein gültiger integer wert
ich weiß einfach nicht wo mein fehler ist ...
hier ist mein Code


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
String2 : string;
y : integer;
Schalter : integer;
begin
// Variablen Deklarieren //
String2 := Copy(Edit2.Text,1, Length(Edit2.Text));
y:= StrToInt(Copy(Edit1.Text,0,1));
Schalter := 0;
x := 1 ;
// Kontrollanzeige//
Edit3.Text := IntToStr(x);
Edit4.Text := IntToStr(y) ;
// String stückeln//
repeat
begin
  sTemp1:= Copy(String2, 1, y);
 case StrToInt(sTemp) of
 1234 : Memo1.Text := Pchar(Memo1.Text + 'a');
 5678 : Memo1.Text := Pchar(Memo1.Text + 'b');
  end;
  String2 := Copy(Edit2.Text,y, Length(Edit2.Text));
y := y+y   ;
{Edit3.Text := IntToStr(x);
Edit4.Text := IntToStr(y) ; }
If (y >= (Length(Edit2.Text))) Then
Schalter := 1  ;
End;
until (schalter = 1) ;

end;

ps. Danke schonmal für eure Hilfe

Phoenix 7. Apr 2009 15:37

Re: Fehlersuche
 
Zitat:

Zitat von gangs-taas
Delphi-Quellcode:
y:= StrToInt(Copy(Edit1.Text,0,1)); // wahrscheinlich hier...
// ...
 case StrToInt(sTemp) of // oder hier...

Die Fehlermeldung ist ganz klar: Es wird versucht, einen leeren String in eine Zahl umzuwandeln. Ein Leerer String ist aber keine gültige Zahl.

Also schau Dir mal ab, ob in Edit1 oder in dem temporären String nicht vielleicht nichts drin steht, was Du ungeprüft in eine Zahl umwandeln willst...

quendolineDD 7. Apr 2009 15:38

Re: Fehlersuche
 
Irgendwo, wo du StrToInt() verwendest hast, wird ein Leerstring sein. Und das ergibt den Fehler.
Setze dir zu Beginn von der Prozedur einen Breakpoint, drücke F9 und klicke auf deinen Schalter. Danach gehst du Zeile für Zeile durch und schaust mal, was für Werte du so im einzelnen erhälst und siehst dann auch an welcher Stelle es hakt.
Und dann guckst du dir mal das hier durch.

DeddyH 7. Apr 2009 15:39

Re: Fehlersuche
 
Was passiert, wenn Du
Zitat:

Delphi-Quellcode:
y:= StrToInt(Copy(Edit1.Text,0,1));

in
Delphi-Quellcode:
y:= StrToInt(Copy(Edit1.Text,1,1));
änderst? Eine weitere Fehlerquelle wäre sTemp, aber da das anscheinend eine globale Variable ist, kann man im Code nicht sehen, was drinstehen könnte.

quendolineDD 7. Apr 2009 15:45

Re: Fehlersuche
 
Wäre
Delphi-Quellcode:
y:= StrToInt(Edit1.Text[1]);
nicht etwas lesbarer? ;) Es würde außerdem die Fehlerquellen minimieren.
Genauso kannst du Edit1.Text direkt String2 zuweisen.
Delphi-Quellcode:
String2 := Edit2.Text;
Edit:
Das Beste wäre eine Eingangsprüfung auf Leerstrings. Oder TryStrToInt.

gangs-taas 7. Apr 2009 15:47

Re: Fehlersuche
 
Zitat:

Zitat von DeddyH
Was passiert, wenn Du
Zitat:

Delphi-Quellcode:
y:= StrToInt(Copy(Edit1.Text,0,1));

in
Delphi-Quellcode:
y:= StrToInt(Copy(Edit1.Text,1,1));
änderst? Eine weitere Fehlerquelle wäre sTemp, aber da das anscheinend eine globale Variable ist, kann man im Code nicht sehen, was drinstehen könnte.


okay
also das erste hat leider nichts gebracht ...


so und zu sTemp
das ist eine globale Variable, in der die ersten 'y' buchstaben von dem textfeld Edit2 stehen.
dann soll/wird überprüft ob das gleich einer von meinen verschlüsselten buchstaben ist....




Zitat:

Zitat von quendolineDD
Irgendwo, wo du StrToInt() verwendest hast, wird ein Leerstring sein. Und das ergibt den Fehler.
Setze dir zu Beginn von der Prozedur einen Breakpoint, drücke F9 und klicke auf deinen Schalter. Danach gehst du Zeile für Zeile durch und schaust mal, was für Werte du so im einzelnen erhälst und siehst dann auch an welcher Stelle es hakt.
Und dann guckst du dir mal das hier durch.


also ich weiß leider nicht wie das mit dem breakpoint funktioniert aber ich werde mir gerne das Tutorial durchlesen und hoffe ich bin danach schlauer.

vielen dank für den link auf jedenfall !!



lg

Phoenix 7. Apr 2009 15:48

Re: Fehlersuche
 
Zitat:

Zitat von quendolineDD
Wäre
Delphi-Quellcode:
y:= StrToInt(Edit1.Text[1]);
nicht etwas lesbarer? ;) Es würde außerdem die Fehlerquellen minimieren.

Naja.. wenn ich 10 Eingebe erwarte ich dann nicht was anderes als wenn ich 1 eingebe? ;-)

gangs-taas 7. Apr 2009 15:49

Re: Fehlersuche
 
Zitat:

Zitat von quendolineDD
Wäre
Delphi-Quellcode:
y:= StrToInt(Edit1.Text[1]);
nicht etwas lesbarer? ;) Es würde außerdem die Fehlerquellen minimieren.
Genauso kannst du Edit1.Text direkt String2 zuweisen.
Delphi-Quellcode:
String2 := Edit2.Text;
Edit:
Das Beste wäre eine Eingangsprüfung auf Leerstrings. Oder TryStrToInt.


für das bin ich auch dankbar und werde es gleich umändern.

wobei der einwurf meines vorredners gut ist ... ich werde da nochmal drübernachdenken, denke aber, dass ich es so lassen werde wie es bislang ist, da ich das dann leichter auf 'die ersten 2 zahlen in dem Editfeld' umändern kann....

ich wusste nicht das
Delphi-Quellcode:
String2 := Edit2.Text;
so einfach funktioniert ... ich dachte ich bekomme dann wieder irgend ne blö** fehlermeldung ....


aber ich werde es jetzt mal ausprobieren

quendolineDD 7. Apr 2009 15:49

Re: Fehlersuche
 
Zitat:

Zitat von Phoenix
Zitat:

Zitat von quendolineDD
Wäre
Delphi-Quellcode:
y:= StrToInt(Edit1.Text[1]);
nicht etwas lesbarer? ;) Es würde außerdem die Fehlerquellen minimieren.

Naja.. wenn ich 10 Eingebe erwarte ich dann nicht was anderes als wenn ich 1 eingebe? ;-)

Er hat aber auch nur eine Stelle kopiert
Delphi-Quellcode:
y:= StrToInt(Copy(Edit1.Text,0,1));

DeddyH 7. Apr 2009 15:50

Re: Fehlersuche
 
Naja, der Copy-Befehl nimmt aber auch nur ein Zeichen, so wie er da steht.

[edit] *gnarf* macht doch alleine weiter *püh* [/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:36 Uhr.
Seite 1 von 7  1 23     Letzte »    

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