1 (изменено: mustang, 2018-01-20 20:14:38)

Тема: AHK: Шаблоны в файле для проверок условий

Направьте в нужное русло. Куда копать. Даже не знаю, правильно ли я заголовок написал.
Мне нужно нечто такое, что может прочитать условия в файле и на основании их, выдать true

Пример как оно обычно делается:
Пишутся вручную каждое условие в файле кода .ahk и проверяется переменная.


if (ВРЕМЯ>=10)
	Msgbox, OK


if (ВРЕМЯ<10 AND СЧЕТ<5)
	Msgbox, OK

УРОВЕНЬ := СЧЕТ+ВРЕМЯ
if (УРОВЕНЬ=10)
	Msgbox, OK


Но мне нужен один единственный КОД который прочитает шаблоны-файлы, найдет в них условия, проверит их, и выдаст true (есть такая штука как eval, но не знаю правильно ли будет ее использовать).

Если взять переменные из примера выше то файлы с условиями как-то так будут выглядеть:

файл1.ini


param1=ВРЕМЯ>=10

файл2.ini


param1=ВРЕМЯ<10 and СЧЕТ<5

файл3.ini


param1=УРОВЕНЬ := СЧЕТ+ВРЕМЯ
param2=УРОВЕНЬ=10

Шаблоны могут быть разные - равно, не равно, больше, меньше, вычислить - плюс, минус и т.д., где-то даже выполнить функции Mod, Round.
Переменные такие как УРОВЕНЬ, СЧЕТ, ВРЕМЯ у меня они читаются из другого файла, где хранится база.

2

Re: AHK: Шаблоны в файле для проверок условий

eval - это из js, в AHK нет аналогии, но имена переменных можно создавать динамически из строк и переменных. Поищите на форуме, или в Гугле.

В остальном же, имеет больше смысла описывать логику работы в файле скрипта, а подключаемым файлам делегировать только функционал хранилища. Вы же всё равно в каждый конкретный момент времени выполнения, знаете, какие данные будут получены из внешнего файла, если собираетесь иметь от их работы корректную реакцию кода, верно?

Так же, озаглавьте пожалуйста предложения и поставьте точку. Тут принято не отвечать на вопросы, оформленные не по правилам, с которыми Вы так же согласились при регистрации.

3 (изменено: mustang, 2018-01-20 20:21:18)

Re: AHK: Шаблоны в файле для проверок условий

KusochekDobra пишет:

В остальном же, имеет больше смысла описывать логику работы в файле скрипта, а подключаемым файлам делегировать только функционал хранилища.

Мне это и нужно, файлы-хранилища отдельно, там только условия лежать будут. А логику уже описать в .ahk
Но я не могу додумать, как должна выглядеть структура хранилища, чтобы и переменные мог вычислить +-*/, и проверить разные переменные IF and or != >= <=.
Вот вопрос.
То ли построчно как-то, то ли в одну строку. Нет пока четкого понимания структуры шаблона-хранилища. В этом мне помощь нужна, обработчик думаю я уже напишу, с помощью регулярок буду разбивать шаблоны на элементы, либо еще как-то.

4

Re: AHK: Шаблоны в файле для проверок условий

Я даже не пойму, что можно гуглить в этом направлении. Возможно на английском где-то встречается такая тема и вопрос. Не обязательно для AHK, но что искать ?

5

Re: AHK: Шаблоны в файле для проверок условий

Условия - логическая форма, которую кодер заполняет данными. Если она у Вас в подключаемом файле, то, возможно, будет правильней написать кучу маленьких сценариев которые будут последовательно, или по списку запускаться?

Скажите, какой смысл описывать условия во внешнем файле? Чем это улучшает качество кода? Или это результат вычислений другого софта, который нужно с помощью AHK обработать? Можете описать тех. задание подробней? Тогда может оказаться, что есть другое решение и не нужно городить смесь бульдога с носорогом.

Я например, вижу ситуацию так: если Вы читаете файл "файл1.ini", то даю 100% гарантию, что будет выполняться сравнение ">=", с одной из переменной, имя которой "ВРЕМЯ". Если её имя известно, тогда она на момент чтения из файла должна откуда-то получать значение для сравнения, если так, то раз известно, что это будет она, то вызывающий инструкции код, на этот момент, можно дополнить переменной с этим именем. Тогда в "файл1.ini" нужно сохранить числовое значение, потому как оно, вероятно - сохранённый результат каких-то вычислений и в файле скрипта нужно прочитать именно его, после чего выполнить уже известное сравнение:


ВРЕМЯ := 11
IniRead, timeVar, файл1.ini, Default, param1
if (ВРЕМЯ >= timeVar)
	Msgbox, OK
else
	Msgbox, Не ОК

То же самое касается и остальных случаев. И не обязательно хранить значения в разных файлах.

Вы уж простите за уточнение, но пока не очевидна выгода такого подхода, мне этот способ кажется от части диковатым и от части абсурдным.

6

Re: AHK: Шаблоны в файле для проверок условий

Есть база с параметрами. Их по разным критериям надо проверить и вывести свой отдельный результат.

Раньше у меня было куча файлов .ahk в каждом из которых прописана была своя логика и проверка по условиям.
Проверок может быть не много под один результат, а может быть прилично много ...

файл1 ->  B := C+E; a>10 AND B>10 -> вывод результата 1.
файл2 ->  If A>10. A := C/B; round(a) -> вывод результата 2.
файл3 ->  If A=B  -> вывод результата 3.
..........
файлN

надоело ручками писать кучу этих if else, хочется какой-то единый шаблон, чтобы один файл AHK пробежался по базе с условиями и проверил все что есть.

7

Re: AHK: Шаблоны в файле для проверок условий

Проще наверное сделать скрипт, который пробежится по всем файлам и объединит их в один файл.

8

Re: AHK: Шаблоны в файле для проверок условий

stealzy, дёшево и сердито!

Но всё-таки, хотелось бы понять необходимость чтения описанных ручками же "шаблонов" во внешних файлах, помещая тем самым их в тело основного сценария для манипуляций, когда то же самое можно описать в сценарии и не делать ненужной, или даже ничем не обоснованной работы.

По сути ведь происходит то же самое, но только через "одно место". Это даже интригует!
Зачем, уважаемый автор этого алгоритма, именно так?! В чём превосходство такого подхода? Такое ощущение, что я что-то важное упускаю из вида, или Вы что-то недоговариваете. Удовлетворите пожалуйста моё любопытство.

9 (изменено: mustang, 2018-01-21 18:28:57)

Re: AHK: Шаблоны в файле для проверок условий

stealzy пишет:

#Include файл1.ini
MsgBox % param1 " " param2
#Include файл2.ini
MsgBox % param1 " " param2

Это все тут конечно хорошо, но тут нет проверки параметров по каким либо условиям.

KusochekDobra пишет:

Зачем, уважаемый автор этого алгоритма, именно так?! В чём превосходство такого подхода? Такое ощущение, что я что-то важное упускаю из вида, или Вы что-то недоговариваете.

Ну как вам объяснить. У вас есть много данных в базе. Они постоянно меняются, нужно в определенный момент времени найти свои значения из базы и выдать уведомление. Да можно наплодить кучу ahk файлов, которые будут подключатся в тело, но там все равно в коде будет каша.

Если на примере автомобильного завода. У вас конвеер. У вас много разных моделей может быть на выходе собранных. Собирает робот автоматически, нужно только ему задать правильные параметры под каждый автомобиль.

[ЖИГУЛИ]

двигатель = 16 клапанов
коробка передач = если КЛИЕНТ ЗАКАЗЧИК VIP тогда АВТОМАТИЧЕСКАЯ иначе МЕХАНИКА
лампочки = галоген
координаты установки двигателя = "5 метров длина авто" минус "длина капота"

[БУГАТТИ]

двигатель = 32 клапанов
коробка передач = АВТОМАТИЧЕСКАЯ 
лампочки = ДИОД
координаты установки двигателя = "6 метров длина авто" минус "длина задних фонарей*3"

Робот прочитает эти параметры, сверит есть ли они в наличии на складе и соберет тот самый нужный авто. Если на складе нет нужного двигателя, он просто ничего не сделает.
Если мне нужно создать ВОЛГУ я просто добавлю в конфиг новую запись с параметрами. База данных (склад) остается прежней.
И мне кучу новых файлов с проверкой IF ELSE под каждое авто, создавать не нужно будет. Логика уже прописана в коде, надо только параметры перебрать из конфига.

10

Re: AHK: Шаблоны в файле для проверок условий

Не понимаю, чего вы хотите добиться в итоге, но текст можно обрабатывать так:

var=if, 30, >=, 20

loop, parse, var, `,, %A_Space%
   a%A_Index% := A_LoopField

if (a1 = "if") and (a3 = ">=")
{
   if (a2 >= a4)
      msgbox OK
   else
      msgbox Not OK
}

11

Re: AHK: Шаблоны в файле для проверок условий

Что подразумевается под - "База Данных", в которой в начале предыдущего поста говорится о том, что данные в ней постоянно меняются, а в конце, противоречащее этому утверждение? И как влияет описанная ситуация на необходимость держать данные вместе с условиями в отдельном файле, в строке?

На моём заводе, роботы снабжены методикой выполнения работ по определённому признаку, где каждый выполняет свой спектр деятельности. Логика каждого запрограммирована и я всегда знаю, чего ожидать от каждой машины, скармливая ей те, или иные значения, а у Вас, похоже, что на заводе работает всего один робот и для каждой операции он должен перепрограммироваться.

В моём понимании, "База Данных" - хранит данные, а логика описана отдельно от них.

Если бы я собирал на своём заводе машины разных марок, то для каждой написал бы функцию, описывающую содержание такой модели. А ещё лучше, наследуемый каскад классов, в которых для каждой опции было подробное описание кодом, а для создания конечного продукта, передавал бы в вызов метода создания машины данные из БД. Вот такое описание стоило бы сделать подключаемым файлом, чтобы не загромождать основной код.

12

Re: AHK: Шаблоны в файле для проверок условий

Так ну я вроде нашел то что нужно, придется все же через eval все это делать. По другому что-то не хочется мне, возвращаться к старому как было и плодить ahk файлы.
Всем спасибо.

https://autohotkey.com/board/topic/15675-monster-evaluate-math-expressions-in-strings/

13

Re: AHK: Шаблоны в файле для проверок условий

Все же через ту функцию не получается сделать полностью задуманное. Тамошний eval из текстовых файлов не понимает переменные, чтобы их динамически подхватывать/создавать. Перерыл уже кучу инфы, ничего дельного найти не могу.
Подскажите кто, как бы реализовал бы это все действие. Направьте в нужное русло, голова не соображает, что-то совсем уже.

Еще раз, что имеется:

FILE.ini - это база с данными

[id_555]
game=CounterStrike
time_game=5
score_team1=2
score_team2=10

[id_999]
game=Race
time_game=60
score_team1=0
score_team2=0

Нужны проверки параметров из базы выше и записывать свой текст результата.
Но сколько проверок будет я не знаю, надо как можно проще их создать и потом добавлять/убирать.
может состоять из одной строки проверка и после будет результат, может к одному результату понадобится много проверок и +-*/ вычисление.
Их может быть грубо сегодня 2, через месяц 100.

проверка 1.


game=CounterStrike ? ok:=1 : ok:=0
x:= time_game*3.14
ok=1 AND x<66 ? result:=1 : 0
result "Все четко"

проверка 2.

score_team2 > score_team1 AND game=Race ? result:=1 : 0
result "Беда-печаль"

проверка 99.
.....
проверка 100.
.........

14

Re: AHK: Шаблоны в файле для проверок условий

Простите за это сравнение, но Вы с такой настойчивостью "копаете чайной ложкой асфальт", что это невольно заставляет задумываться над скрытым смыслом, который так и не удаётся разглядеть. Ровно как и Вам, в поисках аналогий для решения своей задачи. Если будете упорствовать в той же мере с последим, то рано или поздно придёте к пониманию, что никто так не делает, поэтому не удивляйтесь, что никто не может вам показать, как же правильно намутить "олимпийский спринт" вверх ногами и кроссовках на ладонях.

Когда дойдёте до самой крайней точки этого пути и сила сопротивляющейся истины будет выдавливать последние капли отчаяния, изложите как можно подробнее технический процесс, который должен реализовываться от момента генерации данных, попадающих в место хранения, до момента, где они будут являться целью превращения в полезный труд. Тогда, я уверен, Вы найдёте здесь всё, что ищете. Пока же, Вы заставляете читателя решать квест, общий контекст которого абсолютно не ясен, а опубликованные фрагменты говорят, что их автор следует ложному пути.

15

Re: AHK: Шаблоны в файле для проверок условий

Да я уже отчаиваюсь решить свою задачу своим способом т.к. ahk  ограничен в этом плане. Вот тут на форуме и пытаюсь найти пути решения. Но если уважаемые форумчане мне не помогут конечно я буду искать и пытаться сделать как-то по другому. Хоть это и будет для меня казаться костылями.

16

Re: AHK: Шаблоны в файле для проверок условий

Позвольте ещё раз обратить Ваше внимание на то, что Вы не сообщаете уважаемым форумчанам, ровным счётом ничего, кроме механизма попыток остановить свой велосипед сунув палку в его колёса. Не исключаю того, что в контексте всей задумки, это может иметь смысл, казаться и даже быть решением, но она(вся задумка) - не очевидна наблюдателю. Видно только то, что Вы пытаетесь совершить нечто, имеющее возможности быть реализованным другими способами, но поскольку непонятно, откуда ноги растут и где его применение, бессмысленно предлагать эти решения.

К тому же, как Вы можете судить об ограниченности инструмента, вооружившись для этого ограниченным пониманием о самом инструменте? Со стороны это заявление выглядит как абсурдные утверждения "о плоской земле", людьми, с явным недостатком образования. Так что скорее именно Ваши попытки приделать ноги своему "чудовищу Франкенштейна" выглядят "костылями", нежели все те решения, которые ещё даже не попытались быть озвучены.

17

Re: AHK: Шаблоны в файле для проверок условий

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

18

Re: AHK: Шаблоны в файле для проверок условий

В 14 сообщении я вроде подробно все расписал. Что у меня имеется и что в итоге требуется на выходе.
Странно, что вы обсуждаете действия человека, пытаетесь указать ему не на ошибки в коде, а пытаетесь найти причины и последствия из-за чего же я такой не образованный и зачем вообще полез в дерби кода.
Разве форум об этом?

19

Re: AHK: Шаблоны в файле для проверок условий

Верно. Форум не для этого. Этим никто и не занимается.
Верно и то, что Вы не видите решения для поставленной перед собой задачи, как не видит его никто, кто бы не пытался посмотреть не предвзято на то, из чего Вы бы хотели увидеть результат. Только Вы не видите решения в пользу недостатка знаний, а остальные его не видят в пользу понимания того, что Ваша проблема решаема, как любая иная, но, Вы:
1. Подходите к задаче не из того места и это очевидно.
2. Не предоставляете описаний сопровождающих подразумеваемый Вами процесс. Не важно, кодом, или псевдо-кодом.

Если понять и принять это как данность, то его закономерно опишет определение того, что на этом этапе, сумма сказанного Вами заключается в попытке сотворить рабочий код из неподходящих для этого механизмов, а сумма сказанного в ответ, пытается описать конкретику, почему Вас невозможно понять и две попытки помочь Вам, основываясь на этой белиберде, что Вы настойчиво воспроизводите от раза к разу, которые, к слову, были проигнорированы на корню.

Вас и Ваши ментальные возможности никто не обсуждает. Все начинают путь познания из того места, где впереди полнейшая неопределённость и в этом нет совершенно ничего предосудительного. И Вам пытаются помочь. Если Вы не в состоянии это уловить через весь посыл, то мы, вероятно, понимаем ситуацию по разному, но Вам никто не обязан помогать, это дело добровольное и если Вы будете настаивать на своём, то найдёте только нежелание реагировать на Ваши вопросы и в будущем, раз они с такой вероятностью ведут в тупик понимания.