Entwickler-Ecke

Basistechnologien - String auswertung


mokus - Mo 08.02.10 23:35
Titel: String auswertung
Hallo,
ich suche eine Möglichkeit, einen String auswerten zulassen, dieser besteht aus einer Funktion (x^2). Mein erster Gedanke war wie on PHP oder sonst wo, nach einer Methode z.B. eval() zu suchen, aber so etwas gibt es unter C# meines Wissens nicht, da es durch die Kompilierung nicht möglich ist.
Deshalb suche ich jetzt nach einer Lösung die auch von NET.CF unterstützt wird. Am besten wäre eine freie Lösung, also keinen fertigen Parser.

Erste Versuche habe ich mit diesem Beispiel erzielt, etwas langsam und was sehr Wichtig für mich ist, die Kompatibilität mit NET.CF die aber nicht vorhanden ist. Leider gibt es keinen Verweis bei Windows Mobile Projekten und so bin ich auf der Suche, nach einer Ressourcen armen Möglichkeit Mathe Funktionen um zu rechnen.


C#-Quelltext
1:
2:
3:
4:
5:
6:
public static double Evaluate(string expression)
{
   if (String.IsNullOrEmpty(expression)) throw new ArgumentNullException("expression");

   return Convert.ToDouble(Microsoft.JScript.Eval.JScriptEvaluate(expression, Microsoft.JScript.Vsa.VsaEngine.CreateEngine()));
}


Kha - Mo 08.02.10 23:48

user profile iconmokus hat folgendes geschrieben Zum zitierten Posting springen:
Am besten wäre eine freie Lösung, also keinen fertigen Parser.
Wie meinen? Ich interpretiere das mal so, dass du nur Open-Source-Lösungen willst, dann solltest du dich mal bei http://www.codeproject.com umschauen. Schneller, kompakter, ressourcensparender und portabler als ein spezieller Matheparser geht es jedenfalls nicht.


mokus - Di 09.02.10 00:00

Naja die Sache ist einfach die, wenn ich das Programm vertreiben möchte, dann hätte ich halt den Rechtlichen Hintergrund wegen dem fertigen Matheparser.


Kha - Di 09.02.10 00:09

Dass den meisten OSS-Projekten eine genaue Lizenz beiliegt, hast du aber schon bemerkt?
Ich habe eigentlich keinen Schimmer, was du mit "Rechtlichem Hintergrund" meinst, aber so, wie es sich anhört, solltest du wohl lieber bald mal mit deinem eigenen Parser anfangen.