请问各位,怎样计算以字符串为表达式的自定义公式呢?

yuanting2006 2007-05-17 01:39:58
比如用户随意在textbox控件中写了一个表达式如( A1+B1*C2 ),要求计算出它的值.而A1,B1,C1对应的是三个数组,也就是把对应数组的每一行全部求出来.请问各位有没有好的办法?表达式是无法确定的.加,减,乘,除,括号和数字(1,2...)是任意放置的.先谢谢各位.帮帮忙吧!苦思N天了,还是没有高效率的算法.
...全文
562 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanting2006 2007-05-29
  • 打赏
  • 举报
回复
先谢谢楼上的几位了.楼上的方法我试了.如果的数组很长的话运行起来太慢了.还是不可行啊.
cqq_chen 2007-05-28
  • 打赏
  • 举报
回复
引用microsoft script control 1.p
Dim Ax As New MSScriptControl.ScriptControl
Ax.Language = "VbScript"
Debug.Print Ax.Eval(Text1.Text)
rainstormmaster 2007-05-28
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20040801/14/3231596.html
TCES_NET 2007-05-28
  • 打赏
  • 举报
回复
不是段的问题,这里没有用到那里,所以不会的,我看就是数据类型问题,但是不知道修改哪里!~
iamxiang 2007-05-28
  • 打赏
  • 举报
回复
你是说我的模块溢出吗?
你看看字段定义的类型,每个类型都有固定的限定范围的,超出了就会溢出。可以想办法缩位或者另存补丁一下!
yuanting2006 2007-05-28
  • 打赏
  • 举报
回复
我还没知道.请各位高手指点一下吧.
TCES_NET 2007-05-28
  • 打赏
  • 举报
回复
应该怎么修改呢~!没看明白~!还得请教高手指点!
yuanting2006 2007-05-28
  • 打赏
  • 举报
回复
是.真像你说的那样
TCES_NET 2007-05-28
  • 打赏
  • 举报
回复
你输入一个较长的数或式子,你再试试,我这里出现了!!
yuanting2006 2007-05-28
  • 打赏
  • 举报
回复
我这没有出现溢出啊?
TCES_NET 2007-05-28
  • 打赏
  • 举报
回复
溢出~!要怎么修改才行啊
TCES_NET 2007-05-28
  • 打赏
  • 举报
回复
这里出现溢出是怎么回事啊!~
vbman2003 2007-05-28
  • 打赏
  • 举报
回复
mark
yuanting2006 2007-05-28
  • 打赏
  • 举报
回复
谢谢楼上的回答.我尝试一下.
iamxiang 2007-05-25
  • 打赏
  • 举报
回复
给你个模块吧!很好用的!



Option Explicit
Private Declare Function EbExecuteLine Lib "vba6.dll" (ByVal pStringToExec As Long, ByVal Unknownn1 As Long, ByVal Unknownn2 As Long, ByVal fCheckOnly As Long) As Long

Private Function ExecuteLine(sCode As String, Optional fCheckOnly As Boolean) As Boolean
ExecuteLine = EbExecuteLine(StrPtr(sCode), 0&, 0&, Abs(fCheckOnly)) = 0
End Function


Sub calc(ByVal x As String)
Dim result
ExecuteLine "dim x as double"
ExecuteLine "x= " & x
ExecuteLine "clipboard.settext x"
result = Clipboard.GetText
MsgBox x & "=" & result
Set result = Nothing
End Sub

Private Sub Command1_Click()
calc Text1
End Sub

Private Sub Form_Load()
Text1.Text = "1+2*3-4/5"
End Sub
yuanting2006 2007-05-18
  • 打赏
  • 举报
回复
请问用什么第三方工具啊?说一下听听好吗?
TechnoFantasy 2007-05-18
  • 打赏
  • 举报
回复
如果有2K多的话。。。。就算你自己写解释器也不会比ScriptControl快,因为要涉及到很多入栈、出栈和字符串判断、解析的工作。你还是用第三方工具把。
PS,我刚才用4*1000的数组,速度还是很快的,你是不是考虑下分段操作。
yuanting2006 2007-05-18
  • 打赏
  • 举报
回复
嗯.可是我感觉自己写解释器是很复杂的,考虑的因素太多.短时间之内不会完成这个任务了.所以还望大侠们继续指教.
laviewpbt 2007-05-18
  • 打赏
  • 举报
回复
那只能写个函数解释器了,我以前写遗传算法求函数最大值的时候也是用的EVAL这个函数由于要多次调用,效率就非常低了,matlab里面的EVAL函数效率还是相当高的,应该是自己写的解释器吧
yuanting2006 2007-05-18
  • 打赏
  • 举报
回复
首先非常谢谢各位!
TechnoFantasy的回答我之前也已经尝试过了.当我有8个数组,且每个数组都是二千多的长度时.运行起来是相当的慢啊.而且数组的长度也许会更长.长度也是不定的.
不知有没有更高效的方法呢?
加载更多回复(8)

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧