|
Косвенный аргумент @
|
|||
---|---|---|---|
#18+
Имеется БД. В ней около 40 исполняемых кодов. В каждом по 4-5 однотипных формулы. Итого около 170 формул. Формулы типа Инструмент1*коэффициент1, инструмент 2*коэффициент2. Таких инструментов 38. Коэффициенты меняются довольно таки часто. Раз в 3-7 дней. Переписывать все формулы вручну - жестко. Стал использовать косвенный аргумент. Имеется БД с четырмя полями, в которую вносятся формулы 1=Номер (число) 2=Описание (текст 150 символов) 3=Проверка (текст) 4=Формула (2500 символов) Длина текстового поля для "Формулы" в реальности колеблется от 1300 до 1700 символов. Что делаю. Прописываю формулу в поле Формулу. Затем в выполняемом коде вытаскиваю эту формулу. Перепробовал кучу способов, но результат один. Формула копируется, но не пересчитывается, даже не определяется, что это формула, в то же время, если написать w @frmполучается требуемый результат. То есть формула рассчитывается, но вот это расчёт никак не могу заполучить. Пример результатов прилагается ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2014, 23:23 |
|
Косвенный аргумент @
|
|||
---|---|---|---|
#18+
PalitraФормула копируется, но не пересчитывается, даже не определяется, что это формула, в то же время, если написатьЧто значит, не определяется, что это формула? можно больше подробностей, нормальные примеры кода, а незамалеванный скриншот. когда формула расчитывается а когда нет есть ли в формуле дополнительные переменные ? возможно просто не попадаете в область видимости переменных. переменные которые участвуют в "формуле" опишите как публичные. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2014, 23:42 |
|
Косвенный аргумент @
|
|||
---|---|---|---|
#18+
Используйте косвенность аргумента для команды quit:eval(expr) q @expr ... s result=$$eval(frm) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2014, 23:46 |
|
Косвенный аргумент @
|
|||
---|---|---|---|
#18+
Вставка формулы с коэффициентами происходит внутри исполняемого кода (в середине). Цикл перерасчета данных повторяется непрерывно на пртяжении 9 часов (32000 раз). Команда Quit в данном случае неприменима. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2014, 00:06 |
|
Косвенный аргумент @
|
|||
---|---|---|---|
#18+
DAiMorPalitraФормула копируется, но не пересчитывается, даже не определяется, что это формула, в то же время, если написатьЧто значит, не определяется, что это формула? можно больше подробностей, нормальные примеры кода, а незамалеванный скриншот. когда формула расчитывается а когда нет есть ли в формуле дополнительные переменные ? возможно просто не попадаете в область видимости переменных. переменные которые участвуют в "формуле" опишите как публичные. Формула работы на бирже. Есть 38 эмитентов (торговых инструментов). Для каждого своя доля. Сумма всех 38 долей дают 1.0 Если внутрь исполняемого кода вставить Итог=(Х1*K1)+(X2*K2)+(X3*K3)+..., то код выполняется без проблем. Получаем результат 55.3843 Если этот же код прописать в БД "Формулы", то когда мы вытаскиваем этот код и вставляем в исполняемый код ничего не происходит. А именно, если выводить результаты, то получаем следующее Копируем формулу из БД = успешно Присваиваем переменной формулу = успешно (Set frm=AvtoFormula.FORMULA) Аналогичный результат получается если сделать Set bbb="frm=AvtoFormula.FORMULA" Set @bbbТак вот если сделать запрос, чему равна переменная frm то получим (Х1*K1)+(X2*K2)+(X3*K3)+..., А вот если сделать запрос, чему равна переменная @frm, то получим результат 55.3843 Я пытаюсь сделать так, чтобы переменной ZZZ назначился результат в виде итога= 55.3843, а не в виде (Х1*K1)+(X2*K2)+(X3*K3)+..., Вопрос: Как это реализовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2014, 00:20 |
|
Косвенный аргумент @
|
|||
---|---|---|---|
#18+
Indirection Подобный вызов завершится ошибкой: SET var1 = "2+2" SET x = @var1*6 Правильно - так: SET var1 = "var2" SET var2 = 2+2 //А вот SET var2 = "2+2" не пройдёт SET x = @var1*6 Можно попробовать так: SET var1="2+2" X "set x="_a_"*6"Во 2м и 3м случае x=24. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2014, 04:01 |
|
Косвенный аргумент @
|
|||
---|---|---|---|
#18+
Последний, 3й сниппет, имелось в виду: SET var1="2+2" // А тут можно и SET var1=2+2 X "set x="_var1_"*6" ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2014, 04:04 |
|
Косвенный аргумент @
|
|||
---|---|---|---|
#18+
eduard93Последний, 3й сниппет, имелось в виду: SET var1="2+2" // А тут можно и SET var1=2+2 X "set x="_var1_"*6"Все эти примеры я знаю. В стандартной ситуации они работают. Проблема в том, что. Переменная var1 var2 var2 есть Если сделать set frm=Avtofirmula.Formula //, где значение Formula=(var1*K1)+(var2*K2)+(var3*K3)+... и берётся из внешнего файла Set bbb="Formula=frm" Set @bbbДают на выходе значение Formula=(var1*K1)+(var2*K2)+(var3*K3)+... где значение равно в виде ТЕКСТА а не в виде результата Проблема начинается именно тогда, когда данные (название переменных) берутся из внешнего файла (файла с формулой). Если же сделать Set Var1=(var1*K1)+(var2*K2)+(var3*K3)+...то var1 получим результат равный 55.34, то есть результат в виде ЧИСЛА! ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2014, 07:54 |
|
Косвенный аргумент @
|
|||
---|---|---|---|
#18+
Palitra, Просто когда эти переменные Х1 Х2 Х3 стоят в формуле, которая первоначально расположена внутри исполняемого кода, то Х1*К1+Х2*К2+... воспринимается как формула. А если абсолютно такую же формулу скопировать из внешнего файла внутрь того же кода, то Х1*К1+Х2*К2+... воспринимается уже как текст и соответственно переменные Х1 Х2 Х3 не перемножаются на коэффициенты К1 К2 К3 и соответственно получаем не числовое значение а последовательность символов, которые нам бесполезны. Вот в этом вся загвоздка. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2014, 08:16 |
|
Косвенный аргумент @
|
|||
---|---|---|---|
#18+
Попробуйте set @@frm ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2014, 09:18 |
|
Косвенный аргумент @
|
|||
---|---|---|---|
#18+
Palitra , logistЖивучий вопрос, поднимается регулярно ;) 5549407 set var1=1,K1=1,var2=2,K2=2,var3=3,K3=3 set frm="(var1*K1)+(var2*K2)+(var3*K3)" //, где значение Formula=(var1*K1)+(var2*K2)+(var3*K3)+... и берётся из внешнего файла Set bbb="Formula="_frm ;ключевое изменение Set @bbb w FormulaРезультат: Код: plaintext
PS:Соответственно рабочий код должен быть таким Set bbb="frm="_AvtoFormula.FORMULA Set @bbb ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2014, 09:35 |
|
Косвенный аргумент @
|
|||
---|---|---|---|
#18+
Palitra, так подойдет: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2014, 09:38 |
|
Косвенный аргумент @
|
|||
---|---|---|---|
#18+
DirksDRтак подойдет: s var1=0.5 set k1=25 set frm="z=(var1*k1)" set @frm w z 12.5Так не подойдет, так как если вводить как написали Вы, то все работает. Имеем переменные внутри кода var1=0.5 k1=25 Если формулу вставить внутри исполняемого кода - как у вас, то все работает без проблем. Но если эту же формулу скопировать из внешнего файла, то в результате выдаст следующий результат (var1*k1) можете попробовать сами. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2014, 07:44 |
|
Косвенный аргумент @
|
|||
---|---|---|---|
#18+
PalitraЕсли формулу вставить внутри исполняемого кода - как у вас, то все работает без проблем. Но если эту же формулу скопировать из внешнего файла, то в результате выдаст следующий результат (var1*k1) можете попробовать сами.а в чем разница между двумя этими вариантами по вашему коду? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2014, 08:09 |
|
Косвенный аргумент @
|
|||
---|---|---|---|
#18+
DAiMor, Итак, сравнил 4 варианта. Вариант №1, наш стандартный - неверный результат ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2014, 09:11 |
|
Косвенный аргумент @
|
|||
---|---|---|---|
#18+
Palitra, Вариант №2, предложенный andrew000999 Неверный результат - вообще ошибка. . ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2014, 09:13 |
|
Косвенный аргумент @
|
|||
---|---|---|---|
#18+
Palitra, Вариант №3, предложенный servit из г. Кишинёв, Республика Молдова УСПЕШНЫЙ, то что нужно. Ему за это Большое Человеческое Спасибо. . ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2014, 09:15 |
|
Косвенный аргумент @
|
|||
---|---|---|---|
#18+
Palitra, Вариант №4, производный от варианта №3 Также является успешным. . ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2014, 09:17 |
|
|
start [/forum/topic.php?fid=39&msg=38696414&tid=1556847]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 271ms |
total: | 412ms |
0 / 0 |