Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: aheart82 on March 26, 2014, 05:00:30 PM

Title: include с переменным именем файла?
Post by: aheart82 on March 26, 2014, 05:00:30 PM
у меня есть допустим 3 сценария ,которые записаны в файлах
1.cms
2.cms
3.cms

в случайном порядке мне надо их вызывать
как представляю я

$x=RND(1,3)
#include "/projects/ВОТ ЗДЕСЬ $x.cms"

но у меня не работает, перепробовал различные варианты 4.9 (build 005)


и заодно вопрос, а если таких инклюдов у меня будет сотня, не зависнет ли программа?
Title: Re: include с переменным именем файла?
Post by: Oraven on March 26, 2014, 06:44:03 PM
Верный код.
Code: (clickermann) [Select]
$inclx = RND(1,3)

IF($inclx = 1)
   #include "1.cms"
END_IF

IF($inclx = 2)
   #include "2.cms"
END_IF

IF($inclx = 3)
   #include "3.cms"
END_IF
Title: Re: include с переменным именем файла?
Post by: aden on March 26, 2014, 08:21:41 PM
Code: (clickermann) [Select]
$x=strconcat(RND(1,3),".cms")
#include $x
жалко что не работает изза обязательного наличия кавычек
Title: Re: include с переменным именем файла?
Post by: Oraven on March 26, 2014, 08:42:35 PM
Code: (clickermann) [Select]
$x=strconcat(RND(1,3),".cms")
#include $x
жалко что не работает изза обязательного наличия кавычек

При запуске строки #include заменяются кодом из соответствующего файла. Ты что хочешь динамически менять код чтоли? Это никак работать не будет!
Title: Re: include с переменным именем файла?
Post by: Atas on March 26, 2014, 08:44:44 PM
Сорри, но не работает из за того , что инклуд загружается только при загрузке скрипта и только один раз. В этот момент переменных просто нет, поэтому имя инклуда уже должно быть и должно быть действительным. Причем, сам инклуд должен быть самостоятельно выполняемым. Я пробовал на ходу, из основного скрипта, изменять текст в файле инклуда. Но Кликерман повторно файл инклуда не перечитывает, а выполняет то, что уже взял в память при загрузке скрипта.

Поэтому тут, как мне кажется, возможны только костыли, типа:
Но этот код, у меня почему то не работает.
Code: (clickermann) [Select]
$inclx = RND(1,3)

SWITCH($inclx)
CASE(1)
   #include "1.cms"
CASE(2)
   #include "2.cms"
CASE(3)
   #include "3.cms"
DEFAULT
   // случай по умолчанию
END_SWITCH

Очевидно, что если инклудов будет сотня и они будут большими, то потребуется много оперативной памяти. Надеюсь, что не так уж и много, чтобы зависла программа.
Title: Re: include с переменным именем файла?
Post by: Крис Тинка on March 27, 2014, 08:18:56 AM
Для чего сотня инклудов? Нельзя в одном скрипте написать сотню сабов и вызывать их в любой момент, используя 1 инклуд в начале?
Title: Re: include с переменным именем файла?
Post by: aheart82 on March 27, 2014, 08:53:32 AM
Code: (clickermann) [Select]
$inclx = RND(1,3)
 
SWITCH($inclx)
CASE(1)
   #include "1.cms"
CASE(2)
   #include "2.cms"
CASE(3)
   #include "3.cms"
DEFAULT
   // случай по умолчанию
END_SWITCH
слишком длинная портянка получается, но  наверно другого выхода нет.
когда будет полностью готов код на счет 100 сценариев- я отпишусь в этой ветке, как себя ведет комп
Title: Re: include с переменным именем файла?
Post by: Vint on March 27, 2014, 09:14:45 AM
Не представляю себе зачем это нужно. Ещё учти что если в коде по инклюду есть сабы, #include "1.cms" нельзя писать внутри любых конструкций, хоть IF, хоть CASE
Title: Re: include с переменным именем файла?
Post by: Atas on March 27, 2014, 10:45:50 AM
Не представляю себе зачем это нужно. Ещё учти что если в коде по инклюду есть сабы, #include "1.cms" нельзя писать внутри любых конструкций, хоть IF, хоть CASE

А ведь правда не работает внутри конструкций IF и CASE, даже без сабов.  :( То, что я написал выше не работает. SWITCH нельзя использовать.  Почему то выполняется только первая секция CASE, независимо от значения переменной.

С IF тоже беда, его получилось использовать только один раз. Если написать два IF с инклудами и рандомной переменной $inclx = RND(1,3), то всегда выполняется только первый IF. Если написать $inclx = 2, например, то скрипт впадает в какой то бесконечный цикл.

Windows 7 SP1 x64
Clickermann v4.9 (build 005) и Clickermann v4.10
Title: Re: include с переменным именем файла?
Post by: Oraven on March 27, 2014, 11:07:08 AM
А что в твоих скриптах?

Простой тест показывает что все работает и с условиями и с SWITCH

В три скрипта записываю строки
Code: (clickermann) [Select]
LOGWRITE ("Скрипт 1")
WAITMS(500)
далее "Скрипт 2" и "Скрипт 3"

В логе получаю
Code: [Select]
12:02:17 Скрипт 3
12:02:18 Скрипт 1
12:02:18 Скрипт 3
12:02:19 Скрипт 3
12:02:19 Скрипт 2
Title: Re: include с переменным именем файла?
Post by: Vint on March 27, 2014, 11:19:27 AM
Да, да с обычными работает. Проверял раньше на 4.9
С сабами нет, т.к. SUB должен быть в "корне" скрипта, а не в цикле или условии.
Title: Re: include с переменным именем файла?
Post by: Zets on March 27, 2014, 01:03:35 PM
А так не получится?
Code: (clickermann) [Select]
$y=".cms"
$x=strconcat(RND(1,3),$y)
#include $x
Title: Re: include с переменным именем файла?
Post by: aheart82 on March 27, 2014, 01:27:59 PM
А так не получится?
Code: (clickermann) [Select]
$y=".cms"
$x=strconcat(RND(1,3),$y)
#include $x

не работает

а вот вариант вполне работает
Code: (clickermann) [Select]
$inclx = RND(1,3)
 SWITCH($inclx)
CASE(1)
   #include "/projects/1.cms"
CASE(2)
   #include "/projects/2.cms"
CASE(3)
   #include "/projects/3.cms"
END_SWITCH
только длинный получается в условии
Title: Re: include с переменным именем файла?
Post by: Zets on March 28, 2014, 07:53:48 PM

а вот вариант вполне работает
Code: (clickermann) [Select]
$inclx = RND(1,3)
 SWITCH($inclx)
CASE(1)
   #include "/projects/1.cms"
CASE(2)
   #include "/projects/2.cms"
CASE(3)
   #include "/projects/3.cms"
END_SWITCH
только длинный получается в условии

И получится свитч из 100 условий... =\
Title: Re: include с переменным именем файла?
Post by: Johnny on March 29, 2014, 07:01:02 AM
если для работы тебе нужно сто сценариев \ сто условий, то я бы задумался об оптимальности выбранного решения
Title: Re: include с переменным именем файла?
Post by: aheart82 on March 30, 2014, 10:54:32 AM
если для работы тебе нужно сто сценариев \ сто условий, то я бы задумался об оптимальности выбранного решения

предложи пожалуйста
Title: Re: include с переменным именем файла?
Post by: Johnny on March 31, 2014, 06:55:28 AM
так задача то не озвучена. ты просто сообщил что у тебя есть три внешних сценария. и предположил какой начался бы ад если бы их было сто например.
на что в свою очередь я заметил что "сто сценариев не нужны".

что такого у тебя там в твоих трех сценариях например? и почему бы их не запихать в один, а внутренности допустим разделить условиями или процедурами
Title: Re: include с переменным именем файла?
Post by: aheart82 on March 31, 2014, 08:56:08 AM
каждый сценарий движения мышки и кликанье по кнопкам , протяженностью 3-7  минут.
для удобства хотел каждый сценарий и записать отдельно в свой файл, в случае если надо изменить что то, то просто перезаписать этот cms.

и кстати еще вопрос, а то вроде видел где то, но не вдавался в подробности.
если в основе поставить #include , а в нем еще #include , то работать не будет?
просто у меня выходило, что при написании инклудов, вроде все работало, а когда закрывал кликер и запускал заново, то не работал вложенный инклюд
Title: Re: include с переменным именем файла?
Post by: aden on March 31, 2014, 09:16:24 AM
если тебе так сильно нужно прыгать от одного сценария к другому то можешь прибегнуть к goto
чтото типа того
Code: (clickermann) [Select]
nachalo:
//какоето условие
......
goto(kuda_to)
......
goto(kuda_to2)
......
goto(kuda_to3)
.....
.....
kuda_to:
//это самое куда то
//делаем что нам надо
// возвращаемся в начало
goto(nachalo)
kuda_to2:
...
// возвращаемся в начало
goto(nachalo)
kuda_to3:
...
// возвращаемся в начало
goto(nachalo)
тут вам и цикл можно применить и переменные(не уверен)
Title: Re: include с переменным именем файла?
Post by: Zets on April 01, 2014, 07:41:03 AM
если в основе поставить #include , а в нем еще #include
:o
Это как?
Title: Re: include с переменным именем файла?
Post by: aden on April 01, 2014, 07:43:03 AM
:o
Это как?

(http://img0.joyreactor.cc/pics/comment/countryballs-%D0%9A%D0%BE%D0%BC%D0%B8%D0%BA%D1%81%D1%8B-%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F-%D1%8F%D0%BF%D0%BE%D0%BD%D0%B8%D1%8F-878719.jpeg)
Title: Re: include с переменным именем файла?
Post by: Крис Тинка on April 01, 2014, 12:11:30 PM
если в основе поставить #include , а в нем еще #include
:o
Это как?
Загрузка скрипта через инклуд, в котором присутствует инклуд
Title: Re: include с переменным именем файла?
Post by: Vint on April 01, 2014, 12:35:13 PM
Да, с этим хотелось бы уточнить. Тоже возникал вопрос по вложенности... но не возможность (вроде работает), а о взаимодействии. Что, если в инклюде будет вызов инклюда который есть в основном скрипте?
Поюсняю: есть скрипт
#include "УРА.cms"
ляляля
#include "тополя.cms"
...

Если в тополя.cms уже есть #include "УРА.cms" это критично? Вопрос об уникальности имён сабов например, которые есть в УРА.cms. Так как в результате вливания в один скрипт получаются 2++ саба с одним именем. И если без проблем, вызываться будет расположенный выше? С этим тоже проблем не будет?

Зачем это всё нужно? Для создания библиотек. Некоторые подпрограммы требуют подключения определённых инклюдов. Естесственно для самодостаточности и завершённости библиотеки она сама должна содержать вызов #include (чтобы не забыть). Естесственно они могут пересекаться.

Вот в питоне например подключаемые модули активно пересекаются, но при импорте интерпритатор запоминает имя подгруженного модуля и если импорт встретится ещё, загружать повторно не будет, просто расширит область видимости на этот модуль.
Title: Re: include с переменным именем файла?
Post by: Zets on April 01, 2014, 04:29:07 PM
Содомия какая то =\
Title: Re: include с переменным именем файла?
Post by: NEf on April 13, 2014, 03:14:07 AM
каждый сценарий движения мышки и кликанье по кнопкам , протяженностью 3-7  минут.
для удобства хотел каждый сценарий и записать отдельно в свой файл, в случае если надо изменить что то, то просто перезаписать этот cms.
Копаешь совсем в ложную сторону реализации, а может оказаться всё гораздо проще ;-)

В тот момент, когда я (наконец) дочитал в хелпе до инклудов (вернее, когда их ввели в новой версии) - я сразу представил, как мои Sub'ы мигрируют в отдельные файлы  ;D и читаемость/юзабилити кода упроститься намного.

Короче говоря, нужно инклудить ВСЁ! но с умом:
Code: (clickermann) [Select]
SUB (mouse1)
#include "1.cms"
END_SUB

SUB (mouse2)
#include "2.cms"
END_SUB

SUB (mouse2)
#include "2.cms"
END_SUB

GOSUB(mouse1)
GOSUB(mouse2)
GOSUB(mouse3)

В отличии от GOTO, с SUB'ами работать намного удобнее и практичнее. Загоняешь всё в сабы, а потом уже играешься с условиями из вызовов.
Title: Re: include с переменным именем файла?
Post by: Zets on April 13, 2014, 07:17:02 PM

Короче говоря, нужно инклудить ВСЁ! но с умом:
Code: (clickermann) [Select]
GOSUB(mouse1)

Еще рекомендую дочитать про вызов функций в новой версии ;)

На мой взгляд проще иметь просто один подключаемый файл с функциями. Чем вагон файлов. На читаемость это вряд ли повлияет.