把符合字符串转化成一个函数或过程的语句(0分)

  • 主题发起人 主题发起人 coldew
  • 开始时间 开始时间
C

coldew

Unregistered / Unconfirmed
GUEST, unregistred user!
我的要求正如标题所说,

a string fstr;
fstr:='sum(123,234)'
a function sum(m,n:integer):integer;
result:=m+n;

now i want get a function
strToFunction(s:string):variants;
strToProcedure(s:string);


如果答案有收获,我会给足我的全部分 thank !!!
 
function strToFunction(s:string):integer;
var
qryTmp:TQuery;
begin
qryTmp := TQuery.Create(self);
try
qryTmp.DatabaseName := 'DBDEMOS';//s值应如s = '90+12*(3+3)'
qryTmp.sql.text := 'select ' + s+ 'as qq from customer';
qryTmp.Open;
result := qryTmp.FieldByName('qq').AsInteger;
qryTmp.Close;
finally
qryTmp.free;
end;
end;
 
我觉得的设计一个语法解析的过程吧:
procedure StrToFunction(s: string);
begin
if LowerCase(Copy(s, 0, POS('(',s))) = 'sum' then
Sum(arg1(s), arg2(s)); // arg1, arg2都是解析s中的参量的过程.
if .....
.
.
end;
可能还有别的方法阿!我想知道。
 
你这个方法只是适合少数几个如果很多就不知道要写多少行代码才可以。
也就是说通用性太小。能否在想一个更好的。
 
怎么没有人回答我的问题
 
如果真有想象的那样简单就好了
 
你是想用vfp中类似 &的功能吧 delphi中是没有的
 
我没有用过VFP不知道&的功能。能否实现我要说的功能
 
你可以在程序中使用Script控件
 
DevExpress中有个表达式计算器,很好用的,要的话我可以发个你
 
to pmlpml:
你说的SCRIPT控件是做什么用的。我从未用过。
to Fred2000
DevExpress又有什么功能。我不是要一个数学运算。我是要一个把符合一个函数的字符
串转化成一个函数,并有值可以返回。
 
在VB所有版本里都有这个哦OCX控件,在delphi中添加该控件。
object.Eval(expression)返回字符串的计算结果。expression是符合VBScript或JScript表达
式字符串,当然可以用VB的函数啦。真的计算功能强大。
object.run(procedureName, parameters()可以运行自己用Script定义的函数。
如果你的程序里有一个COM对象OBJ,OBJ有方法method,
ScriptControl.AddObject(name, object[, addMembers])后,用 'name.method'可以直接
访问该方法。
详细见VB有关帮助。VB安装后,C:/windows/system/MSScript.ocx. 在VBproject中添加该控件,
按F1有帮助文件。在delphi中一样好用。
 
为什么没有人回答我的问题.
我们可以在Fast Report中添加函数
他是如何完成的
有人知道是否可以告之于我.
 
到网上去找PasScript, CajScript等一大堆,都有源码
 
to tseug
能说具体点是那个网站吗?
 
你这个问题不太好回答,因为要做一套表达式翻译系统才行,工程量非常庞大。

曾经也有人对我说:简单,用逆波兰解析一下字符串就可以了。但事实上远非
如此,说这话的人一定没有做过,因为他不知道,一套实用化的表达式处理系
统,翻译只是其中大约不到10%的工作量。

ZREXP 3785行 基本表达式处理单元
ZRTIME 808 时间函数处理单元
ZRMacro 508 宏处理单元
ZRCtrlExp 384 组件访问函数
ZRDBExp 1197 数据库表达式处理单元
ZRDDExp 1241 数据字典表达式处理单元
ZRRExp 850 报表表达式处理单元

这些是我的表达式处理系统中的主要单元,它们还要使用其它基础单元,整个
表达式处理系统源程序大约就有1万行。

跟你说这些,除了吹嘘自己外,同时还想告诉你,如果没有足够的思想准备、
没有足够的投入,就别做了。如果用别人的,一定要有源码,并且要把别人的
设计思想摸透,以后才能维护、扩展,因为你一旦有了这样一套系统,你就会
用得越来越滥,对它的要求也会越来越多。
 
to coldew:
用MSScript控件。你用了吗?
目前 delphi 的表达式工具全是垃圾。
 
to pmlpml:
我不会用,如何加到DELPHI中来。可用过否?能否举个例子给我。
 
安装VB完成后。
delphi中 Component->Import Active Control
选择 microsoft Script Control V1.0
这样该控件就倒入系统。在Active X下

怎么使用见帮助文件。
这就可以满足你的要求了
object.Eval(expression)返回字符串的计算结果。expression是符合VBScript或JScript表达


 
接受答案了.
 
后退
顶部