1

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

(1&((1|0)|1)&1)

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

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

我查看了添加到 XE 中的 Live Bindings Evaluators,但是任何对 and/or 运算符的尝试都会引发解析器错误,所以我相信这更像是一个数学过程。

我还查看了一些解析器,但似乎没有一个真的对我跳出来。

那么我该如何做类似的事情:

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

顺便说一句..我可以完全修改公式并使用和/或代替 &|.. 这只是为了使它与 SQL Server 一起工作。

4

1 回答 1

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)'));

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

于 2013-08-14T19:14:34.180 回答