dcsimg
Login | Register   
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX

By submitting your information, you agree that devx.com may send you DevX offers via email, phone and text message, as well as email offers about other products and services that DevX believes may be of interest to you. DevX will process your information in accordance with the Quinstreet Privacy Policy.


Tip of the Day
Language: VB7
Expertise: Intermediate
Jun 29, 2002

WEBINAR:

On-Demand

Application Security Testing: An Integral Part of DevOps


Evaluate an expression at runtime

The .NET framework doesn't offer any direct way to evaluate an expression that has been entered by the end user when the application is running. However, it is quite simple to create a simple expression evaluator based on calculated columns in DataTable. The following routine does the trick:


Function EvalExpression(ByVal expr As String) As Double
    ' create a new DataTable containing a calculated column
    Dim dt As New DataTable()
    dt.Columns.Add("Expr", GetType(Double), expr)
    ' add a dummy row
    dt.Rows.Add(dt.NewRow)
    ' return the value of the calculated column
    Return CDbl(dt.Rows(0).Item("Expr"))
End Function
Here's an example that uses the above function:

Dim expr As String = "100 * (2 + 3)"
Console.WriteLine(EvalExpression(expr))   ' displays 500
You can also support variables by creating one or more column named after the variables, as in this function:

Function EvalExpression(ByVal expr As String, ByVal x As Double) As Double
    ' create a new DataTable 
    Dim dt As New DataTable()
    ' first, add a column named after the variable
    dt.Columns.Add("x", GetType(Double))
    ' then add the calculated column
    dt.Columns.Add("Expr", GetType(Double), expr)

    ' add a dummy row
    dt.Rows.Add(dt.NewRow)
    ' set the value of the variable
    dt.Rows(0).Item("x") = x
    ' return the value of the calculated column
    Return CDbl(dt.Rows(0).Item("Expr"))
End Function
You can use the overloaded version of the function as follows:

Dim expr As String = "x*x + 3*x + 4"
Dim res As Double = EvalExpression(expr, 10)
Notice that the operation of creating the DataTable and its dummy row is rather time-consuming. If you plan to reuse the same expression with different values for different values of the variable you should create the DataTable only once and reuse it for all subsequent evaluations.

The expression parser built in the DataSet and DataTable objects supports all the usual math and comparison operators, except the ^ operator. You can use the % symbol in place of the MOD operator, and the + symbol for string concatenations. The LIKE operator is similar to the T-SQL and VB6 operator with same name. A few functions are supported as well: IIF, LEN, ISNULL, CONVERT, and SUBSTRING. For more information see the SDK documentation.

Francesco Balena
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
×
We have made updates to our Privacy Policy to reflect the implementation of the General Data Protection Regulation.
Thanks for your registration, follow us on our social networks to keep up-to-date