如何在Delphi中评估包含二进制公式的字符串?

时间:2013-08-14 18:54:48

标签: string delphi binary evaluation livebindings

在Delphi XE中,我有一个例程,将一些复杂的公式分解为二进制公式结果,如下所示:

(1及((1 | 0)| 1)及1)

由于我的应用程序在SQL Server上,因此我可以轻松地执行SELECT(1&((1 | 0)| 1)& 1)作为结果,SQL Server将评估逻辑以给出1或0结果。

我似乎无法找到一种原生的Delphi方式来获取二进制公式的字符串表示并对其进行评估。

我查看了添加到XE的Live Bindings Evaluators,但是对和/或运算符的任何尝试都会抛出解析器错误,因此我认为这更像是一个数学过程。

我还看了几个解析器,但似乎没有人突然向我跳过。

那我怎么做类似的事情呢?

iSomeInt:=评估('(1&((1 | 0)| 1)& 1)');

BTW ..我可以完全重写公式并使用和/或代替& | ..这只是为了使它与SQL Server一起使用。

1 个答案:

答案 0 :(得分:1)

问题不在于它是一个“数学过程”,而是LiveBindings解析器希望你的数学过程用Pascal运算符表示,但是&和|是C运营商。

尝试类似这样的事情,假设你有一个名为LiveBindingsEval的函数,它使用LiveBindings解析器计算字符串:

function PreprocessExpression(const expr: string): string;
begin
   result := StringReplace(expr, '|', ' or ', [rfReplaceAll]);
   result := StringReplace(result, '&', ' and ', [rfReplaceAll]);
end;

iSomeInt := LiveBindingsEval(PreprocessExpression('(1&((1|0)|1)&1)'));

您可能需要对此进行一些改进,但这应该足以让您开始正确的道路......