Игры с Evaluate

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2329
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 18 раз

Игры с Evaluate

Сообщение Губин Игорь »

Потребовалось включить в программу простое вычисление по наборам строк, задаваемым пользователем.

Идеально подходит Evaluate.
С результатом логических операций всё предельно просто, а вот с операциями присвоения сложности.

Т.е. Evaluate('A > 2') - логическая операция, результат 1/0, всё просто и понятно.

А вот с операцией присвоения сложности. С точки зрения удобства и однотипности хорошо бы написать что-нибудь в стиле Evaluate('B = 10*A'), но это воспринимается как логическая операция.

Нет ли какой фичи для подобного?

P.S. Идея с вызовом в Evaluate внешней функции для присвоения понятна, но не совсем удобна.
P.P.S. Можно написать свой интерпретатор, но это не лучший выход, т.к. процесс ресурсоёмкий и не быстрый, а тут скорость поставлена во главу угла.
P.P.P.S. Идея подключать внешний интерпретатор, типа того же питона, не подходит. Программа организована по принципу "всё в одном, никаких дополнительно устанавливаемых модулей, работаем везде и при самом глупом сисадмине"
Это я только кажусь дураком! На самом деле я полный идиот!
kreator
✯ Ветеран ✯
Сообщения: 4984
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 20 раз

Игры с Evaluate

Сообщение kreator »

Почему не нравится вот такая однотипность:
B = evaluate('10A')
B = evaluate('A > 2')
?
We are hard at work… for you. :)
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2329
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 18 раз

Игры с Evaluate

Сообщение Губин Игорь »

kreator писал(а): 05 Август 2023, 18:59 Почему не нравится вот такая однотипность:
Потому, что возможен, одновременно, такой набор

A > 5.0
C = 10*B + D
E < 0.1*C
F = E + B

И вот таких переменных может быть под десяток в различнейших, заранее неизвестных сочетаниях. Отделить логические выражения от вычисляемых заранее, до вычислений возможно, но вот предсказать весь набор присвоений...
Если бы была фича, то всё было бы просто: прогнал в цикле вычисляемые, а затем, в другом цикле, логические. А без неё, каждое вычисляемое надо разбирать на присвоение и нужной переменной.
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3134
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Игры с Evaluate

Сообщение Дед Пахом »

P.P.P.P.S. Можно же подключить тот же vbscript, условию "всё в одном, никаких дополнительно устанавливаемых модулей, работаем везде и при самом глупом сисадмине" удовлетворяет.
С уважением, ДП
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4618
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Игры с Evaluate

Сообщение finsoftrz »

Вместо глупого может очень умный попасться и отключить vbscript нафиг...
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3134
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Игры с Evaluate

Сообщение Дед Пахом »

Не знал, что это возможно, кстати как?
Ладно, вместо vbscript можно javascript.
С уважением, ДП
kreator
✯ Ветеран ✯
Сообщения: 4984
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 20 раз

Игры с Evaluate

Сообщение kreator »

Губин Игорь писал(а): 05 Август 2023, 19:12 Потому, что возможен, одновременно, такой набор

A > 5.0
C = 10*B + D
E < 0.1*C
F = E + B
Тогда мне непонятно. Как одновременно? И что надо получить? Из первого поста вроде бы понятно - надо "B" получить.
We are hard at work… for you. :)
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4618
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Игры с Evaluate

Сообщение finsoftrz »

Можно попробовать использовать bindexpression. То есть результат вычисления сохранить куда-нибудь в очередь и доставать из нее значение по имени переменной. Что-то типа такого:
B = Evaluate('10*A')
setVar('B', B)
bindexpression('B', 'getVAr(''B'')')
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2329
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 18 раз

Игры с Evaluate

Сообщение Губин Игорь »

Дед Пахом писал(а): 05 Август 2023, 19:55 P.P.P.P.S. Можно же подключить тот же vbscript, условию "всё в одном, никаких дополнительно устанавливаемых модулей, работаем везде и при самом глупом сисадмине" удовлетворяет.
Wine? :dizzy: Нет, можно, но это дополнительные внешние модули. Да и вызов vbscript 100000 раз за 10 секунд (реальные цифры) не вызовет ли излишнюю нагрузку на компьютер? :?:

Кстати, тут, намедни, встретилась контора в которой у пользователей закрыты права записи, кроме одного единственного каталога на всём компьютере. И да, это, отнюдь, не Мои документы... :facepalm:
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4618
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Игры с Evaluate

Сообщение finsoftrz »

finsoftrz писал(а): 05 Август 2023, 20:08 Можно попробовать использовать bindexpression. То есть результат вычисления сохранить куда-нибудь в очередь и доставать из нее значение по имени переменной. Что-то типа такого:
B = Evaluate('10*A')
setVar('B', B)
bindexpression('B', 'getVAr(''B'')')
Не, просто bind.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4618
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Игры с Evaluate

Сообщение finsoftrz »

Дед Пахом писал(а): 05 Август 2023, 20:04 Не знал, что это возможно, кстати как?
Ладно, вместо vbscript можно javascript.
Сорри, для ответа на этот вопрос лучше погуглить типа "отключить vbs windows 10:. :D
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2329
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 18 раз

Игры с Evaluate

Сообщение Губин Игорь »

finsoftrz писал(а): 05 Август 2023, 20:08 Можно попробовать использовать bindexpression.
Это те же яйца с предварительным разбором формул.
kreator писал(а): 05 Август 2023, 20:05 Тогда мне непонятно. Как одновременно? И что надо получить? Из первого поста вроде бы понятно - надо "B" получить.
В каждой проверяемой записи надо проверить все логические условия, в которых могут использоваться, а могут и нет, не только значения полей из записи, но и результаты вычисляемых выражений по этим полям.
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2329
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 18 раз

Игры с Evaluate

Сообщение Губин Игорь »

Дед Пахом писал(а): 05 Август 2023, 20:04 Ладно, вместо vbscript можно javascript.
И чем это лучше? :nono:
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4618
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Игры с Evaluate

Сообщение finsoftrz »

Губин Игорь писал(а): 05 Август 2023, 20:15
finsoftrz писал(а): 05 Август 2023, 20:08 Можно попробовать использовать bindexpression.
Это те же яйца с предварительным разбором формул.
Ну, не совсем разбор, достаточно найти первый "=". Других вариантов я не знаю, скорее всего, их и нет.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3134
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Игры с Evaluate

Сообщение Дед Пахом »

Губин Игорь писал(а): 05 Август 2023, 20:09Wine?
Я и слов таких не знаю.
С уважением, ДП
Ответить