AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Bei try..except Zeilenr. der fehlerhaften Zeile ausgeben?
Thema durchsuchen
Ansicht
Themen-Optionen

Bei try..except Zeilenr. der fehlerhaften Zeile ausgeben?

Ein Thema von KoS · begonnen am 19. Mär 2007 · letzter Beitrag vom 19. Mär 2007
Antwort Antwort
Seite 3 von 3     123   
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#21

Re: Bei try..except Zeilenr. der fehlerhaften Zeile ausgeben

  Alt 19. Mär 2007, 12:53
Zitat:
Kann man das irgendwo festlegen ob Punkt oder Komma verwendet werden soll?
Ja durch setzen der Konstanten DecimalSeparator bzw ThousandSeparator oder durch Verwendung der Funktion überladenen StrToFloat-Funktion
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#22

Re: Bei try..except Zeilenr. der fehlerhaften Zeile ausgeben

  Alt 19. Mär 2007, 13:04
Zitat von KoS:
Hmm, ich war bisher immer der Meinung das klappt mit dem Punkt, das kann aber sein das die Werte alle keine Nachkommastelle hatten.
Delphi ignoriert praktischer Weise die lokalen Einstellungen.
Im QuellCode ist "." der Dezimaltrenner.
(wäre och blög, wenn der Deutsche keine englischen Progamme kompilieren könnte )

Zitat von KoS:
Kann man das irgendwo festlegen ob Punkt oder Komma verwendet werden soll? Wenn das Programm auf einem englischem System läuft würde ja dann wieder ne Exception kommen.
Ja, die Einstellungen werden beim Programmstart ausgelesen und dann lokal in den entspechenden Variablen abgespeichet, welche du natürlich auch selber ändern/setzen kannst.

siehe Delphi-Referenz durchsuchenDecimalSeparator und Tausendertrenne, oder eben die passende Delphi-Referenz durchsuchenStrToFloat
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
KoS

Registriert seit: 9. Jun 2006
55 Beiträge
 
#23

Re: Bei try..except Zeilenr. der fehlerhaften Zeile ausgeben

  Alt 19. Mär 2007, 13:31
Das weicht jedoch alles vom eigentlichen Thema ab.

@IngoD7: Es ist ja nicht so das ich nur auf Grund dieses Fehlers ein Exception bekomme. Das war halt jetzt 1 Fehler der mir aufgefallen ist und wo ich vielleicht von der Programmierung her etwas unwissentlich gehandelt habe. Zumal eben Delphi intern mit '.' rechnet.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#24

Re: Bei try..except Zeilenr. der fehlerhaften Zeile ausgeben

  Alt 19. Mär 2007, 13:40
Um das angesprochene Problem zu beheben, nutze ich immer einen solchen (oder ähnlich gelagerten) Code:

Delphi-Quellcode:
Function MyStrToFloat(AString: String): Float;
Begin
  AString := StringReplace(AString, '.', DecimalSeparator, []);
  AString := StringReplace(AString, ',', DecimalSeparator, []);
  Result := StrToFloat(AString);
End;
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#25

Re: Bei try..except Zeilenr. der fehlerhaften Zeile ausgeben

  Alt 19. Mär 2007, 14:00
Delphi erzeugt ja gerne mal Exceptions, die so allgemein sind, dass der Benutzer nichts damit anfangen kann. (z.B. "ungültige Variantumwandlung")
Hier muss man als Programmierer mitdenken und an strategisch günstigen Stellen die Exception abfangen, erweitern und neu auslösen:
Delphi-Quellcode:
procedure TForm1.ButtonImport(Sender:TObject);
begin
   if FileDialog1.Execute then
   begin
      try
         ImportXMLfile(FileDialog1.Filename);
      except
         on E:Exception do
         begin
            // sinn- und gehaltvolle Fehlermeldung bilden
            E.Message := 'XML - Import'#13#10+
               'Fehler beim Importieren der Datei <'+FileDialog1.Filename+'>'#13#10+
               E.Message; // auf jeden Fall die orginale Meldung anhängen !!
            Raise; // Exception erneut auslösen
         end;
      end;
   end;
end;
Man hütte sich davor, anstelle von Raise etwa ShowMessage zu verwenden.
Mit dieser Technik kann man Programme schreiben, die jederzeit präzise Fehlermeldungen ausgeben,
mit denen sowohl der Benutzer, als auch der Programmierer etwas anfangen kann.

Sinnvoll lässt sich diese Technik auch innerhalb von Schleifen einsetzen:
Delphi-Quellcode:
for i := 0 to stringlist.Count-1 do
begin
   try
     ImportCSVdaten(stringlist[i]);
   except
      on E:Exception do
      begin
         E.Message := Format('Fehler in Zeile %d'#13#10, [i])+
            E.Message;
         raise;
      end;
   end;
end;
Andreas
  Mit Zitat antworten Zitat
LAWn-M0W3R

Registriert seit: 31. Jul 2006
Ort: Potsdam / Berlin
38 Beiträge
 
#26

Re: Bei try..except Zeilenr. der fehlerhaften Zeile ausgeben

  Alt 19. Mär 2007, 15:16
Tach,
um mal wieder auf das Anfangsthema zurückzukommen:
Delphi-Quellcode:
try
 //fehlerhafter Quelltext
except
 Assert(false,'Fehler SoUndSo');
end;
Die Fehlerausgabe sieht dann ungefähr so aus:
Zitat:
Fehler SoUndSo (D:\new\Unit1.pas, Zeile 34)
Achtung: Nicht wundern, in Delphi werden natürlich die normalen Compiler-Fehler ausgegeben, aber wenn du dann die kompilierte EXE unabhängig von Delphi startest, dann bekommst du deine Exception wie oben angegeben!

Grüße
der MAX
  Mit Zitat antworten Zitat
KoS

Registriert seit: 9. Jun 2006
55 Beiträge
 
#27

Re: Bei try..except Zeilenr. der fehlerhaften Zeile ausgeben

  Alt 19. Mär 2007, 16:40
Kann man das Assert() auch in die Logfile bzw. in ne String-Variable lenken?
Da es ja ein Dienst ist sollte es nicht als MsgBox oder derartiges kommen.

Als ich mit dem Assert mal kurz gespielt hab ist mir aufgefallen, das immer genau die Zeile ausgegeben wird in der das Assert(false) ist. Irgendwie bringt mich das dann im Except auch nicht weiter weil ich ja anfänglich sagte, das der try-Block recht groß ist und ich ja die Zeile von dem Fehler und nicht von dem Exception brauche.

Bleibt mir wohl wirklich nix anderes übrig als nach eine der Bereits genannten Lösungen vorzugehen?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:50 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