AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler Abfangen (stringkonvertierung)

Ein Thema von Nightfly · begonnen am 18. Aug 2004 · letzter Beitrag vom 18. Aug 2004
Antwort Antwort
Seite 1 von 2  1 2      
Nightfly

Registriert seit: 25. Mär 2004
Ort: Dresden
118 Beiträge
 
#1

Fehler Abfangen (stringkonvertierung)

  Alt 18. Aug 2004, 12:48
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 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 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"
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Fehler Abfangen (stringkonvertierung)

  Alt 18. Aug 2004, 12:50
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.
  Mit Zitat antworten Zitat
KrasserChecker

Registriert seit: 21. Jul 2004
120 Beiträge
 
#3

Re: Fehler Abfangen (stringkonvertierung)

  Alt 18. Aug 2004, 12:51
  StrToIntDef(copy(daten,261,3)),0); Mist, zu langsam
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Fehler Abfangen (stringkonvertierung)

  Alt 18. Aug 2004, 12:56
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.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Nightfly

Registriert seit: 25. Mär 2004
Ort: Dresden
118 Beiträge
 
#5

Re: Fehler Abfangen (stringkonvertierung)

  Alt 18. Aug 2004, 13:38
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?
  Mit Zitat antworten Zitat
Nightfly

Registriert seit: 25. Mär 2004
Ort: Dresden
118 Beiträge
 
#6

Re: Fehler Abfangen (stringkonvertierung)

  Alt 18. Aug 2004, 13:41
und nochwas: zur entwicklungszeit bekomm ich die fehler ja immernoch..kann ich das abstellen?
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Fehler Abfangen (stringkonvertierung)

  Alt 18. Aug 2004, 13:58
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)
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#8

Re: Fehler Abfangen (stringkonvertierung)

  Alt 18. Aug 2004, 14:41
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
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Fehler Abfangen (stringkonvertierung)

  Alt 18. Aug 2004, 14:58
Also mein Delphi5 kennt kein TryStrToInt. Vielleicht gibts das erst seit Delphi8?
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Fehler Abfangen (stringkonvertierung)

  Alt 18. Aug 2004, 15:13
Seit D7 glaube ich dabei.
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:10 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