Formel-Parser für .NET

Für ein neues Softwareprojekt war ich auf der Suche nach einem guten Formel-Parser für .NET.

Neben dem Parsen und Auswerten von Formeln mit allen gängigen mathematischen Funktionen (wie Sinus, Cosinus, Logarithmus, …) sollte es auch möglich sein Variablen in den Formeln zu verwenden.

Die beste Lösung, die ich fand, ist diese hier:
http://www.lundin.info/mathparser.asp (Englisch)

Die Verwendung ist sehr einfach; hier ein Beispiel-Code in C#:

// Parser instanziieren
ExpressionParser parser = new ExpressionParser();

// Erstellen einer Hashtable für die Werte
Hashtable h = new Hashtable();

// Variablen und Werte zur Hashtable hinzufügen
h.Add("x", 1.ToString());
h.Add("y", 2.ToString());

// Parsen und Ergebnis holen
double result = parser.Parse("xcos(y)", h);

Und für diejenigen, die Visual Basic .NET bevorzugen:

' Parser instanziieren
Dim parser As New ExpressionParser()

' Erstellen einer Hashtable für die Werte
Dim h As New Hashtable()

' Variablen und Werte zur Hashtable hinzufügen
h.Add("x", 1.ToString())
h.Add("y", 2.ToString())

' Parsen und Ergebnis holen
Dim result As Double
result = parser.Parse("xcos(y)", h)

Es ist wichtig, dass die Werte dabei stets als String zur Hashtable der Variablen hinzugefügt werden. Der Grund dafür ist, dass diese intern einfach in die Formel eingefügt werden, bevor diese geparst wird – entsprechend müssen sie natürlich vom Typ String sein.

Die kostenlose Bibliothek is Open-Source und unter der LGPL lizensiert. Dadurch kann sie auch in kommerziellen Projekten eingesetzt werden, solange sie dynamisch als externe Bibliothek eingebunden wird.

Der Artikel ist auch in English verfügbar.

Einen Kommentar hinterlassen

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Sie können folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>