Задача 102.112348

Задача :102.112348

Краткое описание :
Нужна функция для вычисления длинных формул.
Описание :
Функции в Атлантисе
Что измененно :


Функции в Атлантисе

----- СУТЬ ПРЕДЛОЖЕНИЯ -----
Необходимо реализовать функцию идентичную
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;


Название продукта Название компонента Тип Последняя версия Дата выхода
atlCore_ATLCORE_DLL5.5.11.0
AtlExecATLEXECEXE5.5.11.0