ich habe ein Problem bei der Umstellung eines Clipper Programmes. In diesem Programm gibt es ein längeres Textfeld, in das Berechnungsformeln geschrieben werden und ein Errorhandler hat unter Clipper einen Fehler abgefangen und den Benutzer darauf hingewiesen, dass ein logischer Fehler in der Formel ist. Unter XPP fängt die Funktion aber nicht den Fehler ab, sondern steigt mit einem XPPFATAL aus. Kann mir bitte jemand sagen, wo ich den Fehler mache?
Code: Alles auswählen
function a_chk(zz1,zz2,zz3,zz4,zz5,zz6,c_get)
local ret_val:=.t.,;
anzsa:=numat("(",zz1+zz2+zz3+zz4+zz5+zz6),;
anzsb:=numat(")",zz1+zz2+zz3+zz4+zz5+zz6),;
falsch,;
zeichenkette
local bErrorHandler, bLastHandler, objError
private erg
zz1=atrepl(",",zz1,".")
zz2=atrepl(",",zz2,".")
zz3=atrepl(",",zz3,".")
zz4=atrepl(",",zz4,".")
zz5=atrepl(",",zz5,".")
zz6=atrepl(",",zz6,".")
setprec(4)
set decimals to 2
zeichenkette=zz1+zz2+zz3+zz4+zz5+zz6
erg:=strtran(zeichenkette," ","")
erg:=zeichenkette
if lastkey()=5 .or. lastkey()=24
return(.t.)
endif
c_get=currentget()
if anzsa=0 .and. anzsb=0
ret_val=.t.
else
if anzsa#anzsb
ret_val:=.f.
if anzsa#anzsb
alert("Klammerausdruck fehlerhaft, bitte korrigieren!",{"OK"},,"W+/B,W+/B")
endif
return(ret_val)
endif
endif
bErrorHandler:={|objError|RechenError(objError)}
bLastHandler:=errorblock(bErrorHandler)
begin sequence
falsch=&erg
recover // using objErrorInfo
ret_val=.f.
end sequence
errorblock(bLastHandler)
return(ret_val)
*
function RechenError(objError)
if objError:SubCode=1513
alert("ACHTUNG!;"+;
"Die Formel ist zu komplex für eine Auswertung.;"+;
"Kürzen oder vereinfachen Sie bitte die Formel.",{"OK"},,"W+/B,W+/B")
break objError
elseif objError:SubCode=1449
alert("ACHTUNG! ("+strzero(objError:subCode,4)+");"+;
"In der Formel ist ein logischer Fehler enthalten.;"+;
"Möglicherweise ist in der Formel ein Leerzeichen ;"+;
"enthalten oder es sind mehrere Zeilen ohne Opera-;"+;
"tionszeichen (+ - * /) miteinander verbunden. ;"+;
"Falsch:;"+;
"5* (3. 14 * 5.29 ) / 3 (99 - 33);"+;
"Richtig:;"+;
"5*(3.14*5.29)/3*(99-33)",{"Formel korrigieren"},,"W+/B,W+/B")
break objError
else
alert("ACHTUNG! ("+strzero(objError:subCode,4)+");"+;
"In der Formel ist ein logischer Fehler enthalten.;"+;
"Möglicherweise wurde ein mathematischer Operator ;"+;
"vergessen (+ - * /). Nachstehend zwei Beispiele: ;"+;
"Falsch:;"+;
"5(3.14*5.29)/3(99-33);"+;
"Richtig:;"+;
"5*(3.14*5.29)/3*(99-33)",{"Formel korrigieren"},,"W+/B,W+/B")
break objError
endif
return NIL
FATAL ERROR LOG
Stack Overflow
SYS Thread-ID: 520
Module: EH
Error Codes: EH: 12 Sub: 0(0) OS: 0 XPP: 16
Call Stack of Thread 1 (520):
RECHENERROR(470)
(B)A_CHK@0003(434)
RECHENERROR(470)
(B)A_CHK@0003(434)
RECHENERROR(470)
(B)A_CHK@0003(434)
RECHENERROR(470)
(B)A_CHK@0003(434)
RECHENERROR(470)
(B)A_CHK@0003(434)
RECHENERROR(470)
(B)A_CHK@0003(434)
RECHENERROR(470)......
Was mach ich falsch?