Игры с Evaluate
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Губин Игорь
- ✯ Ветеран ✯
- Сообщения: 2349
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Благодарил (а): 1 раз
- Поблагодарили: 19 раз
Игры с Evaluate
Потребовалось включить в программу простое вычисление по наборам строк, задаваемым пользователем.
Идеально подходит Evaluate.
С результатом логических операций всё предельно просто, а вот с операциями присвоения сложности.
Т.е. Evaluate('A > 2') - логическая операция, результат 1/0, всё просто и понятно.
А вот с операцией присвоения сложности. С точки зрения удобства и однотипности хорошо бы написать что-нибудь в стиле Evaluate('B = 10*A'), но это воспринимается как логическая операция.
Нет ли какой фичи для подобного?
P.S. Идея с вызовом в Evaluate внешней функции для присвоения понятна, но не совсем удобна.
P.P.S. Можно написать свой интерпретатор, но это не лучший выход, т.к. процесс ресурсоёмкий и не быстрый, а тут скорость поставлена во главу угла.
P.P.P.S. Идея подключать внешний интерпретатор, типа того же питона, не подходит. Программа организована по принципу "всё в одном, никаких дополнительно устанавливаемых модулей, работаем везде и при самом глупом сисадмине"
Идеально подходит Evaluate.
С результатом логических операций всё предельно просто, а вот с операциями присвоения сложности.
Т.е. Evaluate('A > 2') - логическая операция, результат 1/0, всё просто и понятно.
А вот с операцией присвоения сложности. С точки зрения удобства и однотипности хорошо бы написать что-нибудь в стиле Evaluate('B = 10*A'), но это воспринимается как логическая операция.
Нет ли какой фичи для подобного?
P.S. Идея с вызовом в Evaluate внешней функции для присвоения понятна, но не совсем удобна.
P.P.S. Можно написать свой интерпретатор, но это не лучший выход, т.к. процесс ресурсоёмкий и не быстрый, а тут скорость поставлена во главу угла.
P.P.P.S. Идея подключать внешний интерпретатор, типа того же питона, не подходит. Программа организована по принципу "всё в одном, никаких дополнительно устанавливаемых модулей, работаем везде и при самом глупом сисадмине"
Это я только кажусь дураком! На самом деле я полный идиот!
-
- ✯ Ветеран ✯
- Сообщения: 4994
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 21 раз
Игры с Evaluate
Почему не нравится вот такая однотипность:
B = evaluate('10A')
B = evaluate('A > 2')
?
B = evaluate('10A')
B = evaluate('A > 2')
?
We are hard at work… for you.
- Губин Игорь
- ✯ Ветеран ✯
- Сообщения: 2349
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Благодарил (а): 1 раз
- Поблагодарили: 19 раз
Игры с Evaluate
Потому, что возможен, одновременно, такой набор
A > 5.0
C = 10*B + D
E < 0.1*C
F = E + B
И вот таких переменных может быть под десяток в различнейших, заранее неизвестных сочетаниях. Отделить логические выражения от вычисляемых заранее, до вычислений возможно, но вот предсказать весь набор присвоений...
Если бы была фича, то всё было бы просто: прогнал в цикле вычисляемые, а затем, в другом цикле, логические. А без неё, каждое вычисляемое надо разбирать на присвоение и нужной переменной.
Это я только кажусь дураком! На самом деле я полный идиот!
- Дед Пахом
- Старичок
- Сообщения: 3136
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 31 раз
- Контактная информация:
Игры с Evaluate
P.P.P.P.S. Можно же подключить тот же vbscript, условию "всё в одном, никаких дополнительно устанавливаемых модулей, работаем везде и при самом глупом сисадмине" удовлетворяет.
С уважением, ДП
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4646
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 7 раз
- Поблагодарили: 37 раз
Игры с Evaluate
Вместо глупого может очень умный попасться и отключить vbscript нафиг...
C6/C11, ШВС, tps/btrieve.
- Дед Пахом
- Старичок
- Сообщения: 3136
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 31 раз
- Контактная информация:
Игры с Evaluate
Не знал, что это возможно, кстати как?
Ладно, вместо vbscript можно javascript.
Ладно, вместо vbscript можно javascript.
С уважением, ДП
-
- ✯ Ветеран ✯
- Сообщения: 4994
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 21 раз
Игры с Evaluate
Тогда мне непонятно. Как одновременно? И что надо получить? Из первого поста вроде бы понятно - надо "B" получить.Губин Игорь писал(а): ↑05 Август 2023, 19:12 Потому, что возможен, одновременно, такой набор
A > 5.0
C = 10*B + D
E < 0.1*C
F = E + B
We are hard at work… for you.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4646
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 7 раз
- Поблагодарили: 37 раз
Игры с Evaluate
Можно попробовать использовать bindexpression. То есть результат вычисления сохранить куда-нибудь в очередь и доставать из нее значение по имени переменной. Что-то типа такого:
B = Evaluate('10*A')
setVar('B', B)
bindexpression('B', 'getVAr(''B'')')
B = Evaluate('10*A')
setVar('B', B)
bindexpression('B', 'getVAr(''B'')')
C6/C11, ШВС, tps/btrieve.
- Губин Игорь
- ✯ Ветеран ✯
- Сообщения: 2349
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Благодарил (а): 1 раз
- Поблагодарили: 19 раз
Игры с Evaluate
Wine? Нет, можно, но это дополнительные внешние модули. Да и вызов vbscript 100000 раз за 10 секунд (реальные цифры) не вызовет ли излишнюю нагрузку на компьютер?
Кстати, тут, намедни, встретилась контора в которой у пользователей закрыты права записи, кроме одного единственного каталога на всём компьютере. И да, это, отнюдь, не Мои документы...
Это я только кажусь дураком! На самом деле я полный идиот!
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4646
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 7 раз
- Поблагодарили: 37 раз
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4646
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 7 раз
- Поблагодарили: 37 раз
Игры с Evaluate
Сорри, для ответа на этот вопрос лучше погуглить типа "отключить vbs windows 10:.
C6/C11, ШВС, tps/btrieve.
- Губин Игорь
- ✯ Ветеран ✯
- Сообщения: 2349
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Благодарил (а): 1 раз
- Поблагодарили: 19 раз
Игры с Evaluate
Это те же яйца с предварительным разбором формул.
В каждой проверяемой записи надо проверить все логические условия, в которых могут использоваться, а могут и нет, не только значения полей из записи, но и результаты вычисляемых выражений по этим полям.
Это я только кажусь дураком! На самом деле я полный идиот!
- Губин Игорь
- ✯ Ветеран ✯
- Сообщения: 2349
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Благодарил (а): 1 раз
- Поблагодарили: 19 раз
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4646
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 7 раз
- Поблагодарили: 37 раз
Игры с Evaluate
Ну, не совсем разбор, достаточно найти первый "=". Других вариантов я не знаю, скорее всего, их и нет.
C6/C11, ШВС, tps/btrieve.
- Дед Пахом
- Старичок
- Сообщения: 3136
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 31 раз
- Контактная информация: