Click here to Skip to main content
11,413,676 members (76,182 online)
Click here to Skip to main content

String Parser and Evaluator

, 7 Apr 2003
Rate this:
Please Sign up or sign in to vote.
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.

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

Share

About the Author

Zainaustria
Web Developer
Russian Federation Russian Federation
No Biography provided

Comments and Discussions

 
GeneralOperator Or (and,...) Pin
richardlukes, 12-Nov-08 1:49
memberrichardlukes12-Nov-08 1:49 
GeneralUpdated Code Pin
zacksz, 26-Sep-08 12:03
memberzacksz26-Sep-08 12:03 
GeneralMuch easier to do this in .NET 2.0 Pin
Kristopher Cargile, 8-Apr-08 15:04
memberKristopher Cargile8-Apr-08 15:04 
GeneralA Bug needs attention Pin
sakykhan, 30-May-07 15:04
membersakykhan30-May-07 15:04 
GeneralMinus/Substract Bug resolved Pin
Afersol00, 3-Aug-06 10:47
memberAfersol003-Aug-06 10:47 
GeneralGood Work, but got a bug Pin
Marais, 13-Mar-06 21:46
memberMarais13-Mar-06 21:46 
Generalbug Pin
wanwenguo, 20-Jan-05 21:42
memberwanwenguo20-Jan-05 21:42 
Generalbuggy Pin
dl4gbe, 21-Dec-04 17:12
memberdl4gbe21-Dec-04 17:12 
Sorry but this thing is really buggy

tried to enter 10.5*2 the result is 210

back to the drawing board
Mad | :mad:
GeneralRe: buggy Pin
patmarleon, 2-Jul-11 12:34
memberpatmarleon2-Jul-11 12:34 
GeneralI'd like to submit some improvements Pin
Mike95, 13-Feb-04 6:44
memberMike9513-Feb-04 6:44 
GeneralRe: I'd like to submit some improvements Pin
Tony M John, 27-Feb-04 5:24
memberTony M John27-Feb-04 5:24 
GeneralRe: I'd like to submit some improvements Pin
emiliodabdoub, 25-Sep-07 22:12
memberemiliodabdoub25-Sep-07 22:12 
GeneralImprovements Pin
Matthew Dye, 28-Nov-03 7:51
memberMatthew Dye28-Nov-03 7:51 
GeneralWhy not CodeDOM Pin
Jonathan de Halleux, 9-Oct-03 5:33
memberJonathan de Halleux9-Oct-03 5:33 
GeneralBug Pin
Chibacity, 9-Oct-03 5:28
memberChibacity9-Oct-03 5:28 
GeneralRe: Bug Pin
TJ Manjaly, 1-Mar-04 8:30
memberTJ Manjaly1-Mar-04 8:30 
GeneralRe: Bug Pin
Naues, 16-Aug-04 5:43
memberNaues16-Aug-04 5:43 
GeneralRe: Bug Pin
Serkan Kokturk, 20-Dec-06 4:16
memberSerkan Kokturk20-Dec-06 4:16 
GeneralAnd &amp;&amp; Or operators Pin
J.M.Piulachs, 13-Sep-03 23:00
memberJ.M.Piulachs13-Sep-03 23:00 
QuestionUsage guidelines? Pin
ArchieBunker, 22-May-03 11:57
sussArchieBunker22-May-03 11:57 
GeneralNicely Done Pin
Blake Coverett, 8-Apr-03 19:07
memberBlake Coverett8-Apr-03 19:07 
GeneralRe: Nicely Done Pin
jdunlap, 1-Sep-03 13:50
memberjdunlap1-Sep-03 13:50 
GeneralRe: Nicely Done Pin
emiliodabdoub, 25-Sep-07 22:13
memberemiliodabdoub25-Sep-07 22:13 

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

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

| Advertise | Privacy | Terms of Use | Mobile
Web03 | 2.8.150427.2 | Last Updated 8 Apr 2003
Article Copyright 2003 by Zainaustria
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid