Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Ini file automatisch ergänzen, Exception handling (https://www.delphipraxis.net/204555-ini-file-automatisch-ergaenzen-exception-handling.html)

bernhard_LA 6. Jun 2020 11:04

Ini file automatisch ergänzen, Exception handling
 
ich wollte mit folgendem Code automatisch fehlenden Einträge in einer Ini Datei ergänzen


Delphi-Quellcode:
  result := GetINifileInfos_AS_STRING(FileName, MySectionIDENT, MySectionValue);

  try
      testbool := StrToBool(result); //  exception bekomme ich wenn der Wert ungleich 0 oder 1 

  except

      Raise Exception.Create('Error happened, reading boolean from ini file');


      SetInifileInfos( Filename, MyValue, false); //   Wird nicht ausgeführt ???

  end;

wenn der Eintrag nicht vorhanden ist wird die Exception zwar geworfen, allerdings wird nicht der fehlenden Eintrag in der Ini geschrieben....
Starten der *.exe vom Explorer aus hat auch nicht geholfen :-(


( http://etutorials.org/Programming/ma...th+Exceptions/ )

Olli73 6. Jun 2020 11:30

AW: Ini file automatisch ergänzen, Exception handling
 
Du musst die Funktion VOR dem raise aufrufen.

bernhard_LA 6. Jun 2020 21:49

AW: Ini file automatisch ergänzen, Exception handling
 
das war's ... , Danke

himitsu 7. Jun 2020 11:14

AW: Ini file automatisch ergänzen, Exception handling
 
Abgesehn davon
Zitat:

StrToBool(result); // exception bekomme ich wenn der Wert ungleich 0 oder 1
Keine Zahl (Integer mit 0=False und Anderes=True) und nicht 'True' oder 'False'

Und warum kommt niemand auf die Idee Delphi-Referenz durchsuchenTryStrToBool oder Delphi-Referenz durchsuchenStrToBoolDef zu benutzen?

ich hatte bei uns im Programm früher sehr oft sowas wie
Delphi-Quellcode:
try
  i := StrToInt(S);
except
  i := 0;
end;
gefunden und das sogar in einigen OnPaint-Ereignissen.

Als jemand der öfters mal debuggt würde ich den Ersteller solcher Codes nur zu gern erwürgen.
Bei dir bekommt man dann z.B. zwei Exceptions im Debugger um die Ohren geworfen, anstatt nur Einer.

Zitat:

Delphi-Quellcode:
try
  ...
except
  ...
  raise Exception.Create('uninformativer nutloser Text, wo man anschließend nicht mehr weiß warum es knallte');
end;

Per se sollte man auch für solche Codes mindestens gesteinigt werden.

Gut, hier gibt es nur eine Exception, womit es auch nur einen Zustand gibt,
aber grundsätzlich sollte man niemals die ursprüngliche Exception verfälschen und durch einen vollkommen nutzlosen Text ersetzen.
Maximal den Text der Exception um Zusatzinfos erweitern.
Wenn das Programm ein Log hat, dann kann die originale Fehlermeldung auch dort rein.

z.B. wenn man FileName, MySectionIDENT, MySectionValue und Result in den Fehlertext aufnimmt, dann könnte man die originale Message durch dieses ersetzen, da der Informationsgehalt mindestens gleichwertig ist.
Und dann steht in deiner Meldung nichts davon, dass der Fehler behoben wurde. Wenn jetzt jemand auf die Idee kommt in die INI zu schauen, dann entdeckt er dort keinen Fehler mehr und hält den Programmierer dieser Software für dämlich, weil dort nichts falsch drin ist. :angle2:

Außerdem, warum kein
Delphi-Quellcode:
GetINifileInfos_AS_BOOLEAN(S: string): Boolean
was eine Exception liefert,
oder
Delphi-Quellcode:
GetINifileInfos_AS_BOOLEAN(S: string; out Value: Boolean): Boolean;
wo stattdessen der Status als Boolean geliefert wird?

freimatz 9. Jun 2020 06:23

AW: Ini file automatisch ergänzen, Exception handling
 
Zitat:

Zitat von himitsu (Beitrag 1466638)
Und warum kommt niemand auf die Idee Delphi-Referenz durchsuchenTryStrToBool oder Delphi-Referenz durchsuchenStrToBoolDef zu benutzen?

Gab es früher nicht. (Leider steht in der verlinkten Doku nicht ab wann die eingeführt wurden. Bei den Windows-API Docs steht sowas dabei.)

HolgerX 9. Jun 2020 07:09

AW: Ini file automatisch ergänzen, Exception handling
 
Hmm..

Zitat:

Zitat von freimatz (Beitrag 1466809)
Zitat:

Zitat von himitsu (Beitrag 1466638)
Und warum kommt niemand auf die Idee Delphi-Referenz durchsuchenTryStrToBool oder Delphi-Referenz durchsuchenStrToBoolDef zu benutzen?

Gab es früher nicht. (Leider steht in der verlinkten Doku nicht ab wann die eingeführt wurden. Bei den Windows-API Docs steht sowas dabei.)


TryStrToBool / StrToBoolDef sind Funktionen aus SysUtils, welche zumindestens hier in D6 schon vorhanden waren...


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:27 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