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.