怎样处理字符串形式的公式,让它计算结果(100分)

  • 主题发起人 主题发起人 wallis
  • 开始时间 开始时间
W

wallis

Unregistered / Unconfirmed
GUEST, unregistred user!
我正在开发一个工资管理系统,遇到工资项目的处理问题,请各位出出主意。我用一张表
记录所有的工资项目,其中一个字段记录项目的计算公式,类型是字符串类型,怎样处理
该字段来算出项目的值。例如有两个项目A1,A2。A2计算公式:IF A1>1000,A2=A1*0.1,
IF A1>2000,A2=A1*0.2。此公式只是一个例子,我的问题是怎样处理字符串的公式,让它
计算结果。
 
hehe,拆分字符串,按运算符。直到不能猜分为止。
按照运算顺序猜分。
 
to amsea:
我也知道要拆分字符串,但不知道具体应该怎么做,因为还有条件语句。能说一下你的算法吗
 
没给出具体类型,不好办,好像没有通用算法。
可分离出Num1:=?
fnum:=?
 
下面是解析公式代码
var
Expressions:string;
P, Start: PChar;
S: string;
begin
Expressions:='IF A1>1000,A2=A1*0.1,IF A1>2000,A2=A1*0.2';
P := Pointer(Expressions);
if P <> nil then
while P^ <> #0do
begin
Start := P;
// 读IF
while not (P^ in [#0, ',', ' '])do
Inc(P);
SetString(S, Start, P - Start);
if S='IF' then
begin
while (P^ in [',', ' '])do
Inc(P);
// 读条件
Start := P;
while not (P^ in [#0, ',', ' '])do
Inc(P);
SetString(S, Start, P - Start);
ShowMessage('条件:'+S);
// 处理条件
while (P^ in [',', ' '])do
Inc(P);
// 读公式
Start := P;
while not (P^ in [#0, ',', ' '])do
Inc(P);
SetString(S, Start, P - Start);
while (P^ in [',', ' '])do
Inc(P);
ShowMessage('公式:'+S);
// 处理公式
end
end;
end;
 
接受答案了.
 
后退
顶部