用户自定义算术表达式的求解
很时候,需要用户自定义报表。
里面的数值计算,用户要自己定义。
常见问题:
有变量a[1 to 20]
用户可以自由设定
如: ((a[1]+a[2])/a[3])-a[4]
复杂一点可以输入常用数学函数。
还有如a1单元格加b5单元格之类的。
我的实现方法。
写一个算术表达式的分析程序。
先将其转化为后缀表达式,再求解。
数据结构的书里有。
没有百十行语句,难以实现。
如果有函数,那就更费经了。
怎么办,有没有更简单的办法?
我不信,PB有这么笨,要程序员从头自己写一个分析程序。
问题点数:20、回复次数:5Top
1 楼flyerlxg(飞鸟)回复于 2002-03-08 21:49:05 得分 0
你用的PB版本是多少?Top
2 楼pingming(平民)回复于 2002-03-08 22:13:48 得分 0
pb8.0Top
3 楼killerdanny(堕落的瓦拉斯塔兹)回复于 2002-03-09 01:31:30 得分 0
hehe!UP.在另外帖子回答了!建议用DW自己方法!Top
4 楼llitcwl(中国龙)回复于 2002-03-09 09:29:31 得分 15
最简单的方法:
dw_1.describe( "Evaluate('你的表达式 ', 1)")
和DW中做计算列表达式一样
eg:
dw_1.describe( "Evaluate('(a[1]+a[2])/a[3])-a[4] ', 1)")
Top
5 楼K999(学习)回复于 2002-03-09 09:41:56 得分 5
转帖:
那么,我们现在来学习一下怎样得到数据窗口内的计算域的计算内容.pb没有现成的可以提取计算域计算值的描述方法,只能取得计算域的描述内容。那我们可不可以,让程序在datawindow中运行这个表达式来获得结果呢?答案是可以!
我再介绍一个函数,它可以调用pb内的datawindow的内嵌函数及各种表达式:Evaluate().它的函数格式如下:
Evaluate("expression",row)
expression---要执行的内嵌函数表达式,要用引号引上。
row --执行表达式的数据窗口内的数据行
例如,要在第一行数据上运行if(salary>100,1,0)的表达式,代码如下:
ls_ret = dw_1.Describe( & "Evaluate('If(salary > 100, 1, 0)', 1)")
假定我们要取得的计算域名称为cfd_sum,我们首先利用Describe()函数获得cfd_sum的表达式expression,然后我们利用Evaluate()函数,在数据窗口内计算该表达式,这样我们就可以间接的获得计算域的计算内容了!下面的程序脚本将说明具体的取值方法
//------------------------------------------
//---获得pb数据窗口内的计算域的内容
//--- Scripe made by 范泽亮 2000.8.6
//------------------------------------------
string c_express //保存计算域表达式
string c_var //保存计算域的计算结果
//-----------设置事物对象、检索数据窗口----//
dw_1.settransobject(sqlca)
dw_1.retrieve()
//----------------获得计算域cfd_sum的表达式
c_express=dw_1.describe("cfd_sum.expression")
//----------------取得对应计算域表达式的结果
c_var=dw_1.describe("Evaluate('"+c_express+"',2)")
//---------------显示表达式的结果
st_show.text=c_var
到此为止,我简单的给大家介绍了一个获得datawindow中的计算域的方法。大家也可以融会贯通,运用此方法获得不能直接获取的datawindow内部的函数或者表达式内容.
Top





