|
|
|
"Синтаксического анализатора выражений" из DLL
|
|||
|---|---|---|---|
|
#18+
может есть у кого dll (а можно с source) Синтаксического анализатора выражений, который понимал что-то наподобии: if((X=1),(Y1+Y2)*0,2),(Y1-Y2)), где X,Y1,Y2 - переменные. PS: Дельный совет тоже непомешает! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2003, 19:38 |
|
||
|
"Синтаксического анализатора выражений" из DLL
|
|||
|---|---|---|---|
|
#18+
в rfunc.dll есть ф-я CalcExpr(VARCHAR(255),VARCHAR(255)) Пример: CalcExpr('sin(pi*:p11/3)*:p22','p11=2;p22=4') ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2003, 20:13 |
|
||
|
"Синтаксического анализатора выражений" из DLL
|
|||
|---|---|---|---|
|
#18+
а вместо 'sin(pi*:p11/3)*:p22' я могу поставить "if (выражение)" ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2003, 20:28 |
|
||
|
"Синтаксического анализатора выражений" из DLL
|
|||
|---|---|---|---|
|
#18+
поставил: но что то с синтаксисим не все понятно: CalcExpr(S, S) - if(expr, x1, x2) - если expr=0, то x2, иначе x1 вот я и поставил: "CalcExpr('if((:P11>:P2),1,-1)', 'P11=2;P2=10')" - ....ничего а "CalcExpr('power(:P11,:P2)', 'P11=2;P2=2')" - нормально. Подскажите - где ошибка! ........ ..и еще : при компиляции скрипта у меня выдало ошибку на "IIF" (Yaffil 1.0) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2003, 20:58 |
|
||
|
"Синтаксического анализатора выражений" из DLL
|
|||
|---|---|---|---|
|
#18+
CalcExpr(S, S) Пример: CalcExpr('Sin( Pi*:p11/3)*:P2', 'P11=2;P2=10') f Простенький анализатор выражений. Поддерживаемые функции и операции + - * / Sin, Cos, tg, ctg, ArсCos, ArcSin, ArcTg, sh, ch, th, exp, lh, lg, sqrt, sqr, abs(x1) sgn(x1) - знак числа x1 log(x1,x2) - логарифм x1 по основанию x2 power(x1,x2) - возведение x1 в степень x2 if(expr, x1, x2) - если expr=0, то x2, иначе x1 Min(x1, ...) - минимум из чисел Max(x1, ...) - максимум из чисел Sum(x1, ...) - суммирование аргументов Avg(x1, ...) - среднее арифметическое Pi - число Pi. Для использования переменных в выражении - перед ними ставится двоеточие, и они описываются во втором параметре (см. пример). ExprIsValid(S, S) i Проверка на корректность заданного выражения. Возвращает 0, если все правильно, иначе - код ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2003, 15:35 |
|
||
|
"Синтаксического анализатора выражений" из DLL
|
|||
|---|---|---|---|
|
#18+
кстати если тебе надо для работы в IB просто скопируй в папку UDF, только переименуй в какое нибудь другое имя. Затем выполни скрипт DECLARE EXTERNAL FUNCTION CALCEXPR CSTRING(16384), CSTRING(16384) RETURNS DOUBLE PRECISION BY VALUE ENTRY_POINT 'fn_CalcExpr' MODULE_NAME 'rfunc'; DECLARE EXTERNAL FUNCTION EXPRISVALID CSTRING(16384), CSTRING(16384) RETURNS INTEGER BY VALUE ENTRY_POINT 'fn_ExprIsValid' MODULE_NAME 'rfunc'; где 'rfunc' переименнованная дллка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2003, 15:39 |
|
||
|
"Синтаксического анализатора выражений" из DLL
|
|||
|---|---|---|---|
|
#18+
да я все прекрасно понимаю... и UDF я подключил и автор писал:CalcExpr('Sin( Pi*:p11/3)*:P2', 'P11=2;P2=10') у меня работает и автор писал:CalcExpr('power(:P11,:P2)', 'P11=2;P2=2') работает, а вот такую операция - автор писал:if(expr, x1, x2) - если expr=0, то x2, иначе x1 я реализовать немогу...Вот и прошу помощи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2003, 16:54 |
|
||
|
"Синтаксического анализатора выражений" из DLL
|
|||
|---|---|---|---|
|
#18+
Если тебе надо именно такая конструкция то воспользуйся ф-ми IIF(i,i1,i2) i1 если i<>0 DIF(f,f1,f2) i-integer f-float из rfunc.dll DECLARE EXTERNAL FUNCTION IIF INTEGER, INTEGER, INTEGER RETURNS INTEGER BY VALUE ENTRY_POINT 'fn_iif' MODULE_NAME 'rfunc'; DECLARE EXTERNAL FUNCTION DIF INTEGER, DOUBLE PRECISION, DOUBLE PRECISION RETURNS DOUBLE PRECISION BY VALUE ENTRY_POINT 'fn_dif' MODULE_NAME 'rfunc'; DECLARE EXTERNAL FUNCTION CIF INTEGER, CSTRING(256), CSTRING(256) RETURNS CSTRING(256) ENTRY_POINT 'fn_cif' MODULE_NAME 'rfunc'; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2003, 19:49 |
|
||
|
|

start [/forum/topic.php?fid=40&fpage=499&tid=1579737]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
82ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
2ms |
| others: | 247ms |
| total: | 417ms |

| 0 / 0 |
