Formel in VB 6 evaluieren

Manchmal kommt man in die Not, einen frei eingebbaren mathematischen Ausdruck auswerten zu müssen.
Besonders bei der berühmten Taschenrechner-Applikation, die jeder einmal irgendwann in seinem Leben schreiben muss, lohnt es nicht, einen eigenen Parser dafür zu schreiben.
Visual Basic bietet eine einfache Möglichkeit, das zu bewerkstelligen. Das “Script Control” erledigt alles.
Hier ein Taschenrechner in seiner simpelsten Form:

Public Function Eval(ByVal iFormel As String) As Double
Dim sc As ScriptControl
 
On Error GoTo MyFehler
 
Set sc = New ScriptControl
sc.Language = "vbscript"
Eval = sc.Eval(iFormel)
Exit Function
 
MyFehler:
MsgBox "Formel '" & iFormel & "' kann nicht evaluiert werden!" & vbCrLf & "Fehler: " & Err.Description
Exit Function
 
End Function
Public Function Eval(ByVal iFormel As String) As Double
Dim sc As ScriptControl

On Error GoTo MyFehler

Set sc = New ScriptControl
sc.Language = "vbscript"
Eval = sc.Eval(iFormel)
Exit Function

MyFehler:
MsgBox "Formel '" & iFormel & "' kann nicht evaluiert werden!" & vbCrLf & "Fehler: " & Err.Description
Exit Function

End Function

Der Aufruf ist ebenso simpel:

Ergebnis = Eval(3*4+20/5) ' Ergebnis = 16
Ergebnis = Eval(3*4+20/5) ' Ergebnis = 16

Wie man erkennen kann, werden selbstverständlich mathematische Rechenregeln beachtet.

Wichtig: Unter Verweise muss im zugrundeliegenden Visual Basic Projekt ein Verweis auf “Microsoft Script Control x.x” gesetzt werden!

Natürlich steht es jedem frei, auch einen umfangreichen Parser zu schreiben, der den Ausdruck zerlegt und dann auswertet. Aber die oben gezeigte Möglichkeit finde ich wesentlich effektiver.

Kommentar schreiben

0 Kommentare.

Kommentar schreiben

* Copy this password:

* Type or paste password here:

52 Spam Comments Blocked so far by Spam Free Wordpress


Hinweis - Du kannst dies benutzenHTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code lang=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" extra="">