?
Solved

Help!!!

Posted on 2000-04-24
13
Medium Priority
?
161 Views
Last Modified: 2010-05-02
I need to know how can I convert string to an arithmetic expression

For example I have this variable:

ABC="10+2-5"

and i want to have the answer shown in a msgbox
0
Comment
Question by:DImirC
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
  • 2
  • +5
13 Comments
 
LVL 12

Expert Comment

by:mark2150
ID: 2745077
This is much harder than it looks.

If your expression is always of th form A+B-C then you can simplify things. But if you want to evaluate any random equation you're looking at a lot of work. You'ld have to generate a parser that will scan the line of text and identify numeric values and operators. You'll then need to perform the indicated operations.

In the old days of BASIC you could place that formula on a numerical input statement and the BASIC itself would parse it out. However it could be corrupted by entering invalid characters, etc.

The relative complexity comes when you start taking all the permutions into account. Are the only functions you need + & -? Or do you need * and / as well? How about trig functions, Sin(), Cos(), Tan()? Powers? Are your numbers only going to be integers? or do you need to handle reals? How about fractions? Are you going to allow $ signs and ,'s? This can get really messy in a hurry.

Search the PAQ's, I've seen code for this posted before.

M
0
 

Expert Comment

by:tsa2
ID: 2745165
try the VAL statement
0
 

Author Comment

by:DImirC
ID: 2745218
if I use this:

ABC="10+2-5"
A=val(ABC)

Then

A=10

I need the result of the arithmetic expression
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 1

Expert Comment

by:cable4096
ID: 2745230
Uh, no, the VAL() function will just give the number until a non-number character is found. So

Val("10 + 2 - 5") will just return 10 and not 7, the correct answer.

Will this just be for Integer numbers, or will you be using Floating Point numbers as well? Will you be using Parenthesis "()" in the formula as well?

This is kind of a complex thing if you want to include support for floating point numbers and parenthesis.

Otherwise you could do a loop that reads the number until it reaches a plus "+", minus "-", multiply "*", or divide "/". Then parse it into an array and sort the array so that the multiplide part is done first, then the division, then the plus, and then the minus.

Say, this isn't for a school assignment, is it? ;)
0
 

Expert Comment

by:tsa2
ID: 2745234
Try parsing the string:

dim a$
dim b$
dim c$
a$ = mid$(abc, 1, 2)
b$ = mid$(abc, 3, 1)
c$ = mid$(abc, 6, 1)

ans = val(a$ + b$ - c$)

This is the only way.
There is no other way.
0
 

Author Comment

by:DImirC
ID: 2745248
tsa2 , the expression can have more numbers, so I dont know how many numbers are there going to be...
0
 
LVL 28

Accepted Solution

by:
AzraSound earned 200 total points
ID: 2745250
http://www.vbweb.co.uk/commands/math_functions.htm

example there that parses the expression and calculates
0
 
LVL 32

Expert Comment

by:Brendt Hess
ID: 2745375
If you can use the MS Scripting control in your VB programs, you can use the EVAL and EXECUTE functions from VBScript.

See:
http://www.thescarms.com/vbasic/Scripting.htm
for a discussion of the scripting control.
0
 
LVL 28

Expert Comment

by:Ark
ID: 2745433
Hi
If you need only "+/-" operations (order is not important), it's not a hard code. Using brackets, multiplication and dividing is more difficult.
Cheers
0
 
LVL 4

Expert Comment

by:arcusd
ID: 2746273
if ur app is connected to a database you can use select statement
to evaluate this string , using recordset you can access the answer
to the expression


ur code may look like this

ABC = "10+2-5"

sqlstmt = "select" & ABC & "from DummyTable"


set mdb = OPendatabase.....
set mset = mdb.OpenRecordset(sqlstmt,.....)
if not mset.eof then
   answer  = mset.Fields(0)
end if

Note:
DummyTable must exist in your database , this table could only have one field and one row .....


hope this helps
0
 
LVL 28

Expert Comment

by:Ark
ID: 2746800
Azra,
I thing, you have to change your comment to answer - class from your link do many math operations, it's new and I just found two links at this class at another VB sites - it means that code is good and popular.
Cheers
0
 
LVL 12

Expert Comment

by:mark2150
ID: 2747041
Just use the "Accept comment as answer" option above his response...

M
0
 

Author Comment

by:DImirC
ID: 2749032
thanx AzraSound
0

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Have you ever wanted to restrict the users input in a textbox to numbers, and while doing that make sure that they can't 'cheat' by pasting in non-numeric text? Of course you can do that with code you write yourself but it's tedious and error-prone …
I was working on a PowerPoint add-in the other day and a client asked me "can you implement a feature which processes a chart when it's pasted into a slide from another deck?". It got me wondering how to hook into built-in ribbon events in Office.
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…
Suggested Courses

719 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question