Краткое описание :
Нужна функция для вычисления длинных формул.Описание :
Функции в АтлантисеЧто измененно :
Функции в Атлантисе
----- СУТЬ ПРЕДЛОЖЕНИЯ -----
Необходимо реализовать функцию идентичную
CompileExpression для вычисления длинных формул. Сейчас
длинна формул в CompileExpression ограничена - 255
символов.
Как измененно :
В модуле NExprSem реализована функция
function CompileStreamExpression(Expression : PStream; RealConst : boolean): PField;
компилирует длинное вычисляемое выражение (значительно больше чем 255 символов)
Параметры:
Expression - указатель на потомок TStream. Текст выражения должен
содержаться в потоке (потомок объекта TStream). Рекомендуется
использовать PMemStream, PMemoryStream или PRealMemoryStream.
Экземпляр объекта Expression будет автоматически освобожден !
RealConst - True включает режим интерпретации числовых констант
как Double. False числовые константы интерпретируются как целые.
Результат: Указатель на вычисляемое поле либо nil в случае ошибки компиляции
Пример:
Uses NExprSem;
procedure test;
var
i : longint;
StartTimeStamp : longint;
F : PField;
ExprMemStrm: PMemStream;
ExprText: AnsiString;
begin
StartTimeStamp := T_ToSec100(T_CurTime);
ExprText := 'wGetTune(''DOC.VISIBLE'') + 30 * 2';
ExprText := ExprText + ' + wGetTune(''DOC.VISIBLE'') + 30 * 2';
ExprText := ExprText + ' + wGetTune(''DOC.VISIBLE'') + 30 * 2';
LogStrToFile('zzz', ExprText);
ExprMemStrm := New(PMemStream, Init(PChar(ExprText), Length(ExprText))); // ExprMemStrm уничтожится автоматом внутри функции CompileStreamExpression
F := CompileStreamExpression(ExprMemStrm, false);
for i := 0 to 100000 do
F^.Verify;
StartTimeStamp := T_ToSec100(T_CurTime)-StartTimeStamp;
LogStrToFile('zzz','test5 значение: '+f^.UnPack(f^.MyLength,0)+' время: '+T_ToChar(T_fromSec100(StartTimeStamp),'HH:MM:SS,SSS'));
end;