delphi下有无对字符串表达式直接计算求值的方法?(100分)没高手? 这问题很有价值哦(张鸿林、lich 大侠在吗?) ( 积分: 100 )

  • 主题发起人 主题发起人 YMYANGJIE
  • 开始时间 开始时间
Y

YMYANGJIE

Unregistered / Unconfirmed
GUEST, unregistred user!
如果用户输入了一个字符表达式,有无求取表达式值的方法或控件?
如:“ATABLE.FIELD1+BTABLE.FIELD2”(数字型)
"ATABLE.STRFILED=‘234‘"(逻辑型)
请大虾帮忙!!
 
如果用户输入了一个字符表达式,有无求取表达式值的方法或控件?
如:“ATABLE.FIELD1+BTABLE.FIELD2”(数字型)
"ATABLE.STRFILED=‘234‘"(逻辑型)
请大虾帮忙!!
 
用JavaScript 或SQL方法很多,你看看以前的贴子有这样的
function calculate(express: string): string;
var
vscript: Variant;
begin
vscript := createoleobject('scriptcontrol');
vscript.language:='javascript';
result := vscript.eval(express);
end;
 
JFYES兄,首先感谢您的热心,还不太明白。
首先,计算后返回‘STRING’,不对吧?
其次,效率? 我的意思想把用户提供的标准SQL 用于过滤,OLE对象计算行吗?
再次,SCRIPT对象,我是非WEB应用。
 
有很多方法,自己想
最完美的解决方法是,设计模式中的解释器模式(InterPreter)
参见刘艺<Delphi模式编程>
 
张大侠,我正好有那本书,看了一下,不就是自己搞语法分析器吗,太复杂,我肯定考虑过,有无简单方法?
我用VF开发过,EVAL()函数很好用,DELPH下没法,只有自己做此函数方法?
另外,不知能否将其它具备此功能的语言函数接口转DELPHI用,简单多了,请指点!!
 
将对应的值代入表达试,用sql来执行一下就OK了.
 
如果其他语言有这个函数,且语言支持创建dll
则理论上可以把它封装到dll中调用
 
>>不就是自己搞语法分析器吗
确實有很多方法! 可用系統自帶的 VB Script 這個ActiveX這個控件!
也可用 excel的公式計算器, 導入到 delphi!
也可用些 pascal的解釋器
 
==>再次,SCRIPT对象,我是非WEB应用。
=========================
在delphi中可以运行,是创建ole Script 对像
uses comobj
function calculate(express: string): string;
var
vscript: Variant;
begin
vscript := createoleobject('scriptcontrol');
vscript.language:='javascript';
result := vscript.eval(express);
end;
 
问题引出:
谈论TDATABASE过滤帖子太多,没有从根本解决问题,我们开发项目时经常需要数据集过滤,不知为什么设计DELPHI时没有考虑统一过滤方法即SQL92标准,需要我们自己做?
现在只有通过onfilter解决,但首先必须解决标准SQL92字符表达式求值,自己作解析器当然不是首选,还不如用CXFILTER组件,只需判断条件OK,相当于它帮我们解析(实际上是我们从最基础元素创建了条件表达式),或者自己做一个用基本元素对象生成表达式的组件。
 
用SQL执行应该不行,虽然我在VF下执行过,但VF执行的是自己内部的SQL,可以代入任意表达式(也可以是任意内存变量,多方便啊),DELPHI下行吗,用什么执行?
另外,不能在数据库上用此SQL条件,否则用过滤干嘛?
 
UP以下 禁止灌水 Delphi开发
 
请AIIRII指点,怎样用PASCAL解释器,不胜感激
 
这个问题可以歇息了。
没有你说的"对字符串表达式直接计算求值的方法".也就是说delphi本身没有这个方法()。
要实现"对字符串表达式计算求值"必须要自己写.实现的方法很多。
 
最优解决方案依然是用语法解析器
用语法解析器你可以完成任何你想完成的内容
语法解析器其实很简单的
在 http://www.delphi32.com/ 里有一个现成的pascel解析器,这个解析器已做成了类,使用很方便的。
你下载后只要在相应的函数体中写入你的处理代码就行了。
 
顺便加一句,其他方法的扩展性都不行,只有语法分析处理才最好
 
有本用pascal讲数据结构的书中有详细的例子。好象是关于桟的应用.
 
谢谢ABOOKDOG,我试试。
有点缘分,我的电脑名: ABOOK, 哈哈!!
在DELPHI。COM那个项目中?
 
TO : jfyes
这样的算不出来,如何解决?
procedure TForm1.Button1Click(Sender: TObject);
var
kk:string;
aa,bb,cc:real;
begin
aa:=2.62;
bb:=3.78;
cc:=9.65;
kk:='aa+bb+cc';
showmessage(calculate(kk));
end;
 
后退
顶部