Click here to Skip to main content
15,881,678 members
Articles / Programming Languages / C#
Article

String Parser and Evaluator

Rate me:
Please Sign up or sign in to vote.
4.76/5 (23 votes)
7 Apr 2003 107.5K   2.9K   51   25
Formula parser for C#

Sample Image - String_Evaluator.gif

Introduction

This formula evaluator can use different data types like int, double, string, DateTime or bool to calculate the value of a mathematical expression. You can use any of the operators, +, -, *, /, >, <, == etc., and specify parameters for them.

Background

.NET doesn't support types like Variant as in VB6 or Delphi. To avoid validating data type before doing any operation, I could create Variant type that can be used to save data of different types and overload some operators that are frequently used, like bitwise +, unary + -, *,/.

This code works in 2 steps: First, parse the expression and transform it to Backward Poland Notation. Now every order item can be either an operator or an operand. Second, calculate value of order using stack. Variables are saved in a public static field, that has the Hashtable type shown in the "string/value" view.

Using the code

To use this code, you must add a reference to the Evaluator.dll library.

C#
Hashtable ht = new Hashtable();
ht.Add("A",12);
ht.Add("B",15);
Za.Evaluator.Evaluator.Variables = ht;
try
{
    textBox1.Text = Za.Evaluator.Evaluator.Evaluate("[A] + [B]/1.2").ToString();
}
catch(Za.Evaluator.CalcException ex)
{
    SomeCode xxxxxxxxx;
}
catch(Exception ex)
{
    SomeCode xxxxxxxxx;
}            

To realize addition functions, you need to edit EmbeddedFunction in Calculator.cs file.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
Russian Federation Russian Federation
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
QuestionLicense Pin
Member 1158981321-May-15 0:28
Member 1158981321-May-15 0:28 
GeneralOperator Or (and,...) Pin
richardlukes12-Nov-08 0:49
richardlukes12-Nov-08 0:49 
GeneralUpdated Code Pin
zacksz26-Sep-08 11:03
zacksz26-Sep-08 11:03 
GeneralMuch easier to do this in .NET 2.0 Pin
Kristopher Cargile8-Apr-08 14:04
Kristopher Cargile8-Apr-08 14:04 
GeneralA Bug needs attention Pin
sakykhan30-May-07 14:04
sakykhan30-May-07 14:04 
GeneralMinus/Substract Bug resolved Pin
Afersol003-Aug-06 9:47
Afersol003-Aug-06 9:47 
GeneralGood Work, but got a bug Pin
Marais13-Mar-06 20:46
Marais13-Mar-06 20:46 
Generalbug Pin
wanwenguo20-Jan-05 20:42
wanwenguo20-Jan-05 20:42 
Generalbuggy Pin
dl4gbe21-Dec-04 16:12
dl4gbe21-Dec-04 16:12 
GeneralRe: buggy Pin
patmarleon2-Jul-11 11:34
patmarleon2-Jul-11 11:34 
GeneralI'd like to submit some improvements Pin
Mike9513-Feb-04 5:44
Mike9513-Feb-04 5:44 
It seems the author can't be reached. How I can I submit an update that contains:
- A bug fix in the - operator for doubles
- Many more Math functions
- && and || support

I would attach the changes here if I could
GeneralRe: I'd like to submit some improvements Pin
T Manjaly27-Feb-04 4:24
T Manjaly27-Feb-04 4:24 
GeneralRe: I'd like to submit some improvements Pin
emiliodabdoub25-Sep-07 21:12
emiliodabdoub25-Sep-07 21:12 
GeneralImprovements Pin
matt dye28-Nov-03 6:51
matt dye28-Nov-03 6:51 
GeneralWhy not CodeDOM Pin
Jonathan de Halleux9-Oct-03 4:33
Jonathan de Halleux9-Oct-03 4:33 
GeneralBug Pin
Chibacity9-Oct-03 4:28
Chibacity9-Oct-03 4:28 
GeneralRe: Bug Pin
T Manjaly1-Mar-04 7:30
T Manjaly1-Mar-04 7:30 
GeneralRe: Bug Pin
naues16-Aug-04 4:43
naues16-Aug-04 4:43 
GeneralRe: Bug Pin
Serkan Kokturk20-Dec-06 3:16
Serkan Kokturk20-Dec-06 3:16 
GeneralAnd &amp;&amp; Or operators Pin
Marc Piulachs13-Sep-03 22:00
Marc Piulachs13-Sep-03 22:00 
QuestionUsage guidelines? Pin
MicrosoftBob22-May-03 10:57
MicrosoftBob22-May-03 10:57 
GeneralNicely Done Pin
Blake Coverett8-Apr-03 18:07
Blake Coverett8-Apr-03 18:07 
GeneralRe: Nicely Done Pin
J. Dunlap1-Sep-03 12:50
J. Dunlap1-Sep-03 12:50 
GeneralRe: Nicely Done Pin
emiliodabdoub25-Sep-07 21:13
emiliodabdoub25-Sep-07 21:13 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.