在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一起使用。
答案 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)'));
您可能需要对此进行一些改进,但这应该足以让您开始正确的道路......