Fehler in Val

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.
Antworten
sstein73
Beiträge: 3
Registriert: Do 12. Dez 2013, 17:36

Fehler in Val

Beitrag von sstein73 »

Hallo Lazarusgemeinde,

ich bin hier neu und möchte gerne einen Bug posten.

ich habe zur Zeit ein Problem mit der Val() Funktion.

Wenn meiner Funktion den Wert '18,78EUR' übergebe, hängt die in einer Endlosscheife.
Das Programm arbeitet bis der Wert '18.78E' erreicht wird, dann nimmt die Variable j immer den Wert 7 an, der aber außerhalb des Strings liegt.
Beim 1. Durchlauf hat j auch schon den Wert 7 (statt 6) und es wird aus EUR ER. Beim 2. Durchlauf bleibt der Wert für j bei 7 und es wird aus ER E.

Hier die Funktion:

Code: Alles auswählen

Function CheckZahl(str1 : String):String;
var
  i,j : Integer;
  re : Double;
begin
  str1:=StringReplace(str1,'.','',[rfReplaceAll]);  // Löschen der Tausenderpunkte
  str1:=StringReplace(str1,',','.',[rfReplaceAll]); // Aus dem Komma einen Punkt machen
  Val(str1,re,j);
  While j<>0 Do begin
    Delete(str1,j,1);                                        // Alle "Nichtzahlen" entfernen
    Val(str1,re,j);
  end;
  Str(re:0:2,Str1);                                          // Rekonvertierung in String
  str1:=StringReplace(str1,'.',',',[rfReplaceAll]);
  Result:=str1;
end;                   
Ich konnte keinen Programmierfehler bei mir entdecken, vielleicht kann ja jemand mal über den Codeschnipsel darüberschauen, oft hat man selbst ja Scheuklappen auf.
Der Hintergrund ist, dass ich aus pdf Dokumenten mittels xpdf (pdftotext) Texte erzeuge, die ich mit diesem Programm einlese und auswerte (Buchhaltungssoftware).

Danke für Eure Hilfe.

Gruß

Stephan
Zuletzt geändert von Lori am Do 12. Dez 2013, 19:06, insgesamt 1-mal geändert.
Grund: Highlighter

sstein73
Beiträge: 3
Registriert: Do 12. Dez 2013, 17:36

Re: Fehler in Val

Beitrag von sstein73 »

Ach ja, habe ich ganz vergessen:

Lazarus Version 1.0.14 32 Bit, Win7 Prof. 64 Bit SP1 mit allen Patches.

EIn Neukompilieren hat leider auch nichts gebracht.

Gruß

Stephan

wp_xyz
Beiträge: 5207
Registriert: Fr 8. Apr 2011, 09:01

Re: Fehler in Val

Beitrag von wp_xyz »

In der While-Schleife wird j nicht verändert --> Totschleife

[EDIT] Sorry - da habe ich dein Posting offenbar nicht genau genug gelesen. Es scheint tatsächlich so zu sein, dass sich die val-Prozedur da um 1 verzählt...

Ansonsten kannst du natürlich das "modernere" TryStrToFloat verwenden, das auch gleich das richtige Dezimalzeichen berücksichtigt.

Benutzeravatar
theo
Beiträge: 10947
Registriert: Mo 11. Sep 2006, 19:01

Re: Fehler in Val

Beitrag von theo »

Das liegt am "E". Für Val sind Buchstaben eben nicht bedeutungslos.

S.a. http://bugs.freepascal.org/view.php?id=23933

sstein73
Beiträge: 3
Registriert: Do 12. Dez 2013, 17:36

Re: Fehler in Val

Beitrag von sstein73 »

Hallo wp_xyz und theo,

wow, das ging schnell.
Danke für Eure Antworten, ich glaube es ansatzweise verstanden zu haben. Das E wird also als Teil einer Hexzahl oder Exponentialfunktion gesehen. Die Variable j zeigt einen Fehler an, weil bei Position 7 nichts mehr folgt.

Ich werde versuchen den Tipp von wp_xyz umzusetzen.

Danke nochmal.

Gruß

Stephan

Antworten