Парсеровщик формул
Delphist
Россия - Воронеж
Столкнулся я со следующей проблемой:
Мне необходимо средствами FastReport'a3.0 или FatsScript'a реализовать расчет по известной мне формуле, например:
V := 12*CP + 47*P - 0.143*Ca + Sqrt(CP) + Sqr(Ca)
Где Ca - определенное значение для кальция,
P - определенное значение для фосфора
CP - определенное значение для сырого протеина
Все эти значение берется из базы данных Interbase.
Формула хранится в текстовом виде в БД. FastReport должен с парсировать формулу хранимую в БД, получив при это реальную, ну а посчитать значения по реальной формуле не сложно.
Как всё это реализовать? Если можно приведите пример.
Мне необходимо средствами FastReport'a3.0 или FatsScript'a реализовать расчет по известной мне формуле, например:
V := 12*CP + 47*P - 0.143*Ca + Sqrt(CP) + Sqr(Ca)
Где Ca - определенное значение для кальция,
P - определенное значение для фосфора
CP - определенное значение для сырого протеина
Все эти значение берется из базы данных Interbase.
Формула хранится в текстовом виде в БД. FastReport должен с парсировать формулу хранимую в БД, получив при это реальную, ну а посчитать значения по реальной формуле не сложно.
Как всё это реализовать? Если можно приведите пример.
Комментарии
А формулу в БД можно хранить в таком виде:
V := 12*<CP> + 47*<P> - 0.143*<Ca> + Sqrt(<CP>) + <Ca>*<Ca>
Только они, наверное, сначала пошлют тебя читать доку. Здесь
http://www.fast-report.com/pbc_download/fs_ru.pdf
Вот цитата (стр. 72)
написал этот пост в соседней теме с таким же названием
Берешь эту формулу и заменяешь все
<Ca> на <frxDataSet."Ca">
<Cp> на <frxDataSet."Cp">
и т.д.
слева и справа добовляешь квадратные скобки и эту строку кидаешь
Memo.Text
это можно делать в коде программы до
формирования отчета
или коде отчета в frxReportOnStartRepor
так-же можно OnBeforePrint для всех мемо(один обработчик) написать
begin
TfrxMemoView(Sender).Text := MyParse(TfrxMemoView(Sender).Text)
end;
предварительно занеся формулы из базы в мемки как есть
MyParse - производит замену части строки (см. выше).
если некторых функций нет в фасте то добавляешь свои пользовательские функции.
например, Memo - это компонент TMemo или это сво-во FastScript'a
предварительно во все необходимые TfrxMemoView занеси формулы в виде
12*<Ca> + 47*<P> и т.д.
Например :
если будешь использовать какие - то функции которых нет в Фасте
(например Sqr) подключай внешнии функции (см. документацию и прикрепленную тему сдесь).
У меня простая формула типа <Ca> + 3 * <P> для простенького набора
данных из 2-х строк отработала.