Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Bei try..except Zeilenr. der fehlerhaften Zeile ausgeben? (https://www.delphipraxis.net/88674-bei-try-except-zeilenr-der-fehlerhaften-zeile-ausgeben.html)

OldGrumpy 19. Mär 2007 10:52

Re: Bei try..except Zeilenr. der fehlerhaften Zeile ausgeben
 
Schau Dir mal MadExcept von Madshi an, das dürfte Dir alles liefern was Du willst. Das Lizenzmodell ist auch sehr erträglich, und vor allem ist das ganze wirklich bequem in der Anwendung ohne grossartig Code zu schreiben.

IngoD7 19. Mär 2007 10:55

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

Zitat von KoS
(...) aber glaubst du das ich dann bei über 250 Zeilen weiß welche von den verschiedenen z.b. StrToFloat Funktionen probleme bei der Umwandlung macht?
Und ich möchte vermeiden um jede einzelne ein try..except zu machen.

Wie wäre es denn mit Fehlervermeidung? ;)
Oder anders herum: Welche Fehlerfälle könnten denn passieren, die du nicht vorher abfangen könntest, bevor du den String umzuwandeln versuchst?

Es hat fast den Anschein, als würdest du Exceptions als "Stilmittel" zur Gültigkeitsüberprüfung verwenden, anstatt folgendes zu tun:
Delphi-Quellcode:
if StringIstSauber(StringA) then
   FloatB := StrToFloat(StringA)
else
   SchreibeProtokoll('ProtEintrag');
:gruebel:

Muetze1 19. Mär 2007 11:07

Re: Bei try..except Zeilenr. der fehlerhaften Zeile ausgeben
 
Mit ExceptAddr und einem MAP Datei kann man höchstens die Methode/Procedure ermitteln, aber nicht die Zeilennummer. Diese kann man damit nicht ermitteln. Von daher bringt dich das nicht weiter.

sakura 19. Mär 2007 11:12

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

Zitat von turboPASCAL
Nein. In der Exec gibts ja dann och keine Zeihlennummer nicht.

Doch, ist gar kein größeres Problem. Suche mal nach Hier im Forum suchenmadExcept - da gibt es hier auch ein Tutorial.

...:cat:....

P.S.: Ich sehe gerade OldGrumpy hat es auch schon empfohlen :oops: Aber es ist wirklich gut und ich nutze es in unserer Haussoftware ebenfalls.

SirThornberry 19. Mär 2007 11:20

Re: Bei try..except Zeilenr. der fehlerhaften Zeile ausgeben
 
MadExcept nutzt vermutlich auch nur die DebugInfos. Es wäre interessant wie man diese auslesen kann bzw. wie diese aufgebaut sind.

sakura 19. Mär 2007 11:23

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

Zitat von SirThornberry
MadExcept nutzt vermutlich auch nur die DebugInfos. Es wäre interessant wie man diese auslesen kann bzw. wie diese aufgebaut sind.

Tut es, ja. Wenn ich mich recht entsinne, dann habe ich für 4 Jahren oder so hier mal Source Code dafür gepostet...

...:cat:...

KoS 19. Mär 2007 11:31

Re: Bei try..except Zeilenr. der fehlerhaften Zeile ausgeben
 
Ich hab mir das madExcept mal auf der Homepage angeschaut, aber kann das Teil auch im Hintergrund aggieren, ohne sichtbare Fenster aufzurufen?

Es handelt sich bei mir nämlich um einen Windows-Dienst, der natürlich keine Fenster öffnen soll.

@IngoD7: Natürlich versuche ich vorher einige Fehler vorweg zu nehmen, nur leider gelingt das nicht immer so wie es soll, da es sich nicht direkt um statische Quellen Handelt. Genau genommen werden die Daten von einer Webseite bezogen und der HTML-Code wird aus irgendwelchen bisher noch nicht auffindbaren Gründen teilweise falsch übermittelt, bzw. falsch vom Programm verarbeitet. (ich würde mal 15-30% Fehlerquote schätzen, genau kann ich das nicht sagen)

Was mir erst aufgefallen ist:
'309.29' is not a valid floating point value
Irgendwie finde ich das komisch, Float arbeitet doch mit . und das klappt an allen möglichen Stellen und ich prüfe auch mit einer Routine ob es sich um ein Float handelt, aber in diesem Fall schlägt das StrToFloat immer fehl.

mkinzler 19. Mär 2007 11:35

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

309.29' is not a valid floating point value
Irgendwie finde ich das komisch, Float arbeitet doch mit . und das klappt an allen möglichen Stellen und ich prüfe auch mit einer Routine ob es sich um ein Float handelt, aber in diesem Fall schlägt das StrToFloat immer fehl.
StrToFloat verwendet die Systemeinstelleung für den dezimalTrenner (DecimalSeparator) bzw Tausendertrenne ( ThousandSeparator), welche bei einem deutschen Windows ',' und '.' sind.

KoS 19. Mär 2007 11:50

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

Zitat von mkinzler
StrToFloat verwendet die Systemeinstelleung für den dezimalTrenner (DecimalSeparator) bzw Tausendertrenne ( ThousandSeparator), welche bei einem deutschen Windows ',' und '.' sind.

Hmm, ich war bisher immer der Meinung das klappt mit dem Punkt, das kann aber sein das die Werte alle keine Nachkommastelle hatten.
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.

IngoD7 19. Mär 2007 11:51

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

Zitat von KoS
@IngoD7: (...)und der HTML-Code wird aus irgendwelchen bisher noch nicht auffindbaren Gründen teilweise falsch übermittelt, bzw. falsch vom Programm verarbeitet.

Eher letzteres, oder? :zwinker: Und genau daran gilt es, zu arbeiten. :)

Zitat:

Zitat von KoS
'309.29' is not a valid floating point value
Irgendwie finde ich das komisch, Float arbeitet doch mit . und das klappt an allen möglichen Stellen und ich prüfe auch mit einer Routine ob es sich um ein Float handelt, aber in diesem Fall schlägt das StrToFloat immer fehl.

Siehste, da geht's schon los. "." durch "," ersetzen und die Welt sieht schon gleich viel rosiger aus. :)

Das ist das, was ich grundsätzlich meinte: Exceptions sind (nach meiner bescheidenen Meinung) allermeistens das Ende eines (programmtechnischen) "Missverständisses". Sobald eine geworfen wird, gucken warum und Missverständnis aus dem Weg räumen. Ganz besonders bei häufigen Exceptions. Solange Exceptions die Regel und nicht die Exception (=Ausnahme :zwinker: ) sind, hat der Programmierer noch andere Dinge zu tun, als sich über viele oder weniger viele try..except-Blöcke Gedanken zu machen. :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:12 Uhr.
Seite 2 von 3     12 3      

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