Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fehler Abfangen (stringkonvertierung) (https://www.delphipraxis.net/28002-fehler-abfangen-stringkonvertierung.html)

Nightfly 18. Aug 2004 12:48


Fehler Abfangen (stringkonvertierung)
 
Hi

ich beschäftige mich noch nich lang mit delphi, und bin jetzt an dem Punkt wo ich mich intensiv um fehlerbehandlung kümmern will/muß.

konkretes problem:

ich lese Daten aus einer asci datei. dazu lese ich diese zeilenweise ein, zerhacke die zeilen mit dem copy befehl und schreibe dann die daten in eine tabelle. nun weiß ich, das
Delphi-Quellcode:
Table1RZM.Value := StrToInt((copy(zeile,261,3)))
zu 99% der fälle geht, weil an besagter stelle halt zahlen hingehören. es gab aber ausnahmen. also behalf ich mir mit
Delphi-Quellcode:
if copy(daten,261,3) <> '  ' then Table1RZM.Value := StrToInt((copy(daten,261,3)));
das schafft abhilfe. wenn nun aber an besagter Stelle buchstaben stehen kommt die fehlermeldung "ist kein gültiger integerwert" ..is ja logisch. wie kann ich dem compiler sagen: "heul nich wenns kein gültiger integer wert is, sondern knick die konvertierzung undlass das feld dann einfach leer"

Gruber_Hans_12345 18. Aug 2004 12:50

Re: Fehler Abfangen (stringkonvertierung)
 
entweder in eine try..except anweisung
oder statt strtoint einfach StrToIntDef('text', 0); wird dann der Wert zurückgegben, fals der Text nicht umgewandelt werden kann.

KrasserChecker 18. Aug 2004 12:51

Re: Fehler Abfangen (stringkonvertierung)
 
Delphi-Quellcode:
  StrToIntDef(copy(daten,261,3)),0);
Mist, zu langsam :shock:

Chewie 18. Aug 2004 12:56

Re: Fehler Abfangen (stringkonvertierung)
 
Das Problem an StrToIntDef ist aber, dass man einen Wert braucht, der auf gar keinen Fall ein gültiger Wert ist. Denn wenn der String-Wert auch '0' sein darf (also die Zahl gleich 0), dann könnte eine 0 im Falle von StrToIntDef(bla, 0) entweder bedeuten, dass es keine Zahl war oder dass der String die Entsprechung der Zahl 0 war. In so einem Fall ist ein try..except-Block sicherer, aber nicht schneller. Ich würde dann die Funktion Delphi-Referenz durchsuchenVal empfehlen, auf der InttoStr auch aufbaut.

Nightfly 18. Aug 2004 13:38

Re: Fehler Abfangen (stringkonvertierung)
 
Delphi-Quellcode:
  try
      Table1RZM.Value := StrToInt(copy(daten,231,3));
      Table1RZG.Value := StrToInt(copy(daten,911,3));
      Table1.Post;
      except
      end;
damit gehts...wars das schon? Wenn ich beim except nix reinschreib ignoriert er die fehler, richtig? Meine frage: versucht er jedes statement des try blocks auszuführen? soll heißen, wenn die erste strink konvertzierung fehlschlägt, macht er dann trotzdem die zweite und das post?

Nightfly 18. Aug 2004 13:41

Re: Fehler Abfangen (stringkonvertierung)
 
und nochwas: zur entwicklungszeit bekomm ich die fehler ja immernoch..kann ich das abstellen?

Chewie 18. Aug 2004 13:58

Re: Fehler Abfangen (stringkonvertierung)
 
try..except-Blöcke funktionieren so: Er arbeitet die Anweisungen Schritt für Schritt ab. Wenn eine Execption hervorgerufen wird, wird der Code im except-Block ausgeführt. Das Post würde also nur ausgeführt werden, wenn keine Exception auftrat.
Es gibt aber auch ein Konstrukt, das Code ausführt, egal ob eine Exception aufgetreten ist oder nicht: try..finally. In Verbindung mit try..except sähe das so aus:

Delphi-Quellcode:
try
  try
    Table1RZM.Value := StrToInt(copy(daten,231,3));
    Table1RZG.Value := StrToInt(copy(daten,911,3));
  finally
    Table1.Post;
  end;
except
  //hier Fehlerbehandlung
end;
Hier wird Table1.Post auf jeden Fall ausgeführt.

Wegen der Exceptions zur Entwicklungszeit: Tools->Debugger-Optionen->Bei Exceptions stoppen (oder so ähnlich)

maximov 18. Aug 2004 14:41

Re: Fehler Abfangen (stringkonvertierung)
 
Ich würd TryStrToInt bevorzugen, hat man keine unnötigen ausnahmen, in einer angelegenheit die eigentlich keine ausnahmen erfordert:

Delphi-Quellcode:
var i:integer;
...
if TryStrToInt('0oo1',i) then bla := i;
ohne das man das betriebssystem damit belästigen muss :wink:

Chewie 18. Aug 2004 14:58

Re: Fehler Abfangen (stringkonvertierung)
 
Also mein Delphi5 kennt kein TryStrToInt. Vielleicht gibts das erst seit Delphi8?

dizzy 18. Aug 2004 15:13

Re: Fehler Abfangen (stringkonvertierung)
 
Seit D7 glaube ich dabei.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:43 Uhr.
Seite 1 von 2  1 2      

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