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 :
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:
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;