Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi try / except, problem.... (https://www.delphipraxis.net/65481-try-except-problem.html)

mmfembr 17. Mär 2006 06:59


try / except, problem....
 
Liste der Anhänge anzeigen (Anzahl: 1)
guten morgen alle zusammen

ich habe folgendes problem:
ich habe keine ahnung wie man einen fehler abfangen kann mithilfe der funktionen try/except. kann mir da vielleicht mal jemand behilflich sein und mir das in den code einpflanzen? hier mein code und die fehlermeldung (im anhang) welche dabei entsteht:

Delphi-Quellcode:
procedure THauptformular.sbtnKonvertierenClick(Sender: TObject);
var
  hexarray           : array[0..7] of String;
  ihexzaehler        : integer;


begin
//Schreiben der Arraydaten in ein Textfile
  Assignfile(Tfile,'C:\Dokumente und Einstellungen\mmfembr\Desktop\test.txt');
  Rewrite(Tfile);
  try
    ihexzaehler := StrtoInt('X' + edit1.Text);
  except
    on EConvertError do showmessage('Bitte korrekten Hexwert angeben!');
  end;
    For y := 0 to 7 do
      begin
        ihexzaehler := ihexzaehler + $1;
        Writeln(Tfile, inttohex(ihexzaehler,4) + ':' + hexarray[y]);
      end;
    CloseFile(Tfile);

end;

end.
besten dank schon im vorraus

mmfembr

Luckie 17. Mär 2006 07:04

Re: try / except, problem....
 
Äh, warum hast du den Screenshot erst noch in ein Word-Dokument verpackt? Und was ist das Problem?

Kroko1999 17. Mär 2006 07:07

Re: try / except, problem....
 
(a)
Delphi-Quellcode:
ihexzaehler := StrtoInt('X' + edit1.Text);
sollte doch sicherlich
Delphi-Quellcode:
ihexzaehler := StrtoInt('$' + edit1.Text);
heißen (//EDIT: da kommt immer eine Exception)
(b)
Delphi-Quellcode:
ihexzaehler := ihexzaehler + $1;
geht besser mit
Delphi-Quellcode:
Inc (ihexzaehler);
(c) Hexarray wird doch gar nicht beschrieben, aber in WriteLn () gelesen
(d) hast Du unter Tools-> Debugger-Optionen...->SprachExceptions die Option "Bei Delphi-Exceptions" abgeschaltet :?:

mmfembr 17. Mär 2006 07:13

Re: try / except, problem....
 
ich bekomme wenn ich das ganze ausführe einen fehler wenn ich in das edit feld einen anderen buchstaben, welcher nicht dem hexadezimalen format entspricht, einfüge. die exception welche die software ausgibt weisst darauf hin, dass ich einen ungültigen hexwert genommen habe. anschliessend habe ich versucht mir eine fehlerabfang methode zu konstruieren (try / except) welche jedoch nicht funktioniert, warum weiss ich auch nicht, daher meine frage ob mir jemand diese richtig einbauen kann.

gruss mmfembr

ps. der hexarray wird schon beschrieben nur weiter oben....

chrisw 17. Mär 2006 07:21

Re: try / except, problem....
 
Die Exception wird ausgelöst und, solange Du den Code in der IDE ausführst, von der IDE abgefangen und von Debugger ausgegeben.
Führst Du diesen Code nun als Kompilat aus (exe Datei) wird Dein Fehler richtig ausgegeben.

Den selben Effekt kannst Du erreichen, wenn Du in der IDE die Delphi Exceptions abschaltest (wie Kroko1999 unter Punkt d bereits erwähnt hat)

mmfembr 17. Mär 2006 07:24

Re: try / except, problem....
 
ach so, jetzt hatte ich aber eine lange leitung!

besten dank für eure antwort!

gruss mmfembr

:dancer:

marabu 17. Mär 2006 07:28

Re: try / except, problem....
 
Guten Morgen.

Mit deinem Code machst du es besser so:

Delphi-Quellcode:
procedure THauptformular.sbtnKonvertierenClick(Sender: TObject);
var
  hexArray: Array [0..7] of String;
  iHexZaehler: Integer;
  // ...
begin
  // ...

  // Schreiben der Arraydaten in ein Textfile
  AssignFile(Tfile, 'C:\Dokumente und Einstellungen\mmfembr\Desktop\test.txt');
  Rewrite(Tfile);
  try
    iHexZaehler := StrtoInt('X' + Edit1.Text);
    for y := 0 to 7 do
    begin
      iHexZaehler := iHexZaehler + $1;
      Writeln(Tfile, inttohex(ihexzaehler,4) + ':' + hexarray[y]);
    end;
  except
    on EConvertError do
      ShowMessage('Bitte korrekten Hexwert angeben!');
  end;
  CloseFile(Tfile);
end;
Oder noch besser:

Delphi-Quellcode:
begin
  // Schreiben der Arraydaten in ein Textfile
  AssignFile(Tfile, 'C:\Dokumente und Einstellungen\mmfembr\Desktop\test.txt');
  Rewrite(Tfile);
  if TryStrToInt('X' + Edit1.Text, iHexZaehler) then
  begin
    for y := 0 to 7 do
    begin
      iHexZaehler := iHexZaehler + $1;
      Writeln(Tfile, inttohex(ihexzaehler,4) + ':' + hexarray[y]);
    end
  end else ShowMessage('Bitte korrekten Hexwert angeben!');
  CloseFile(Tfile);
end;
Grüße vom marabu

Union 17. Mär 2006 07:30

Re: try / except, problem....
 
Zitat:

ich bekomme wenn ich das ganze ausführe einen fehler wenn ich in das edit feld einen anderen buchstaben, welcher nicht dem hexadezimalen format entspricht, einfüge
Eine andere Möglichkeit ist natürlich defensives Programmieren. D.h. in diesem Fall, dass am besten schon die fehlerhafte Eingabe abgefangen werden sollte und nicht erst beim Schreiben von irgendwelchen Daten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:31 Uhr.

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