Delphi TIP – Function Parser
Grazie alla grande libreira open source di classi fornita da JEDI , reperibile al sito http://www.delphi-jedi.org/ la VCL di qualsiasi versione di Delphi si arricchisce di un infinità di componenti e classi che definirei indispensabili per lo sviluppo di applicazioni in questo ambiente.
Tra le tantissime cose c’è la libreria JclExprEval che permette di integrare un potente e flessibile motore di valutazione di espressioni matematiche all’interno della vs applicazione.
Il funzionamento è molto semplice, è sufficiente creare un istanza della classe TEvaluator contenuta nella libreria JclExprEval e passare alla funzione Evaluate una stringa che rappresenta una funzione ed otterremo un numero decimale come risultato.
ad esempio :
1 2 3 4 5 6 7 8 9 |
uses JclMath,JclComplex,JclExprEval; procedure TForm1.Button1Click(Sender: TObject); Var ev : JclExprEval.TEvaluator; begin ev := JclExprEval.TEvaluator.Create; ShowMessage(FloatToStr(ev.Evaluate('1*2/3'))); end; |
la classe TEvaluator prevede anche l’istruzione AddFunc che permette di estendere il set di funzioni disponibili per eseguire la funzione, come mostrato nel seguente esempio:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
uses JclMath,JclComplex,JclExprEval; procedure TForm1.Button1Click(Sender: TObject); Var ev : JclExprEval.TEvaluator; begin ev := JclExprEval.TEvaluator.Create; // Functions ev.AddFunc('ArcTan2', ArcTan2); ev.AddConst('Pi', Pi); ev.AddFunc('cos', Cos); //ev.AddFunc('sqrt', sqrt2); ev.AddFunc('cot', Cot); ev.AddFunc('Log10', LogBase10); ev.AddFunc('Log2', LogBase2); ev.AddFunc('logN', LogBaseN); ShowMessage(FloatToStr(ev.Evaluate('cos(1*3)'))); end; |