[[CYCLE_INDEX]] в двух циклах FOR вложенных друг в друга
-
@senerg самое не заморочное и кода нет проблем с массой переменных объявляем [[TEMP]] число 0 если вы идете например по if и меткам и увеличиваем ее вот вам и номера итерации вложения. Можно не только if любой просто при некоторых реализациях и temp не над bas умеет работать со списками он сам остановит цикл кода все кончилось. достаточно поставить галку удалять из списка
-
@senerg said in [[CYCLE_INDEX]] в двух циклах FOR вложенных друг в друга:
А так написал код за 10 минут, проверил на яваскрипте - работает.
Так если вы хорошо знаете яваскрипт, зачем вам Бас? Есть ведь всякие tampermonkey, помогающие работать со скриптами...
-
@senerg said in [[CYCLE_INDEX]] в двух циклах FOR вложенных друг в друга:
Если бы только была хоть какая-то документация
https://github.com/bablosoft/BAS и не хоть какая а кишки только надо уметь читать. Вы можете себе представить что первые пользователи unix - ов бегали и требовали мануал? Не доки, а картинки кнопки скриншоты?
Бас это новое. Трудно с нуля такие мануалы писать. И не нужно. Это не игрушка в конце концов. Это мы тут развлекаемся я балоболю да бодаюсь с ботами и смотрю что чего веселее наговнокодил. А вообще то басом легко можно брутить и я вам назвал только самоооое малонезаконное.
https://community.bablosoft.com/category/30/заказать-скрипт норот вон даже не стесняетсязнаете софт mass tunneler 😁 так вот знаете что басом легко можно его заменить? не чекать бас можно самого сделать tunneler -ом
лан все равно уже сказал а
https://github.com/bablosoft/BAS/issues/4
б разраб это тоже быстро понял)) переходить бесполезно -
@uraabk said in [[CYCLE_INDEX]] в двух циклах FOR вложенных друг в друга:
Так если вы хорошо знаете яваскрипт, зачем вам Бас?
Не то чтобы хорошо, просто там получается быстрее, и что не знаешь можно быстро нагуглить. А тут попробуй нагугли, например, как сохранить файл с урл строчкой кода в басе. Хрен там. Да и пока эти кубики настроишь и с пробелами и скобочками разберешься...
-
@senerg said in [[CYCLE_INDEX]] в двух циклах FOR вложенных друг в друга:
@uraabk said in [[CYCLE_INDEX]] в двух циклах FOR вложенных друг в друга:
Так если вы хорошо знаете яваскрипт, зачем вам Бас?
Не то чтобы хорошо, просто там получается быстрее, и что не знаешь можно быстро нагуглить. А тут попробуй нагугли, например, как сохранить файл с урл строчкой кода в басе. Хрен там. Да и пока эти кубики настроишь и с пробелами и скобочками разберешься...
Так если с Басом такие сложности, то не лучше ли найти что то более удобное, понятное? На что написано много гайдов...
-
@uraabk said in [[CYCLE_INDEX]] в двух циклах FOR вложенных друг в друга:
найти что то более удобное, понятное?
Боюсь бесплатных или работающих вылеченных аналогов с таким же функционалом просто нет.
@allive said in [[CYCLE_INDEX]] в двух циклах FOR вложенных друг в друга:
Т.е. было много попыток и далеко не 20% удачные
К сожалению, тут вы правы.
-
@senerg said in [[CYCLE_INDEX]] в двух циклах FOR вложенных друг в друга:
работающих вылеченных аналогов
Нужно больше ботов в сети, нужно больше ботов))
Бот в данном случае будете не ваше поделие, а ваш компьютер. Ну и вы соответсвеноbotnet
https://community.bablosoft.com/topic/5261/я-плачу-весь -
@sten30 said in [[CYCLE_INDEX]] в двух циклах FOR вложенных друг в друга:
Интересно, что ответ так и не дали.
Я первым же сообщением дал корректный ответ

Я решил проблему так - записываю CYCLE_INDEX в другую переменную, после этого задержка, и после вложенного цикла возвращаю номер обратно в CYCLE_INDEX .
Проще создайте перед циклом две переменных с значением
0, и внутри каждого цикла первым действием увеличивайте отдельную переменную. В такой конструкции не будет неожиданностей с переопределением. -
-
@Fox said in [[CYCLE_INDEX]] в двух циклах FOR вложенных друг в друга:
Проще создайте перед циклом две переменных с значением 0, и внутри каждого цикла первым действием увеличивайте отдельную переменную. В такой конструкции не будет неожиданностей с переопределением.
Тут есть небольшая проблема.
Если в кастомном модуле в функции есть цикл, то код из кастомного модуля затрет переменную CYCLE_INDEX в коде пользовательского скрипта своим значением.
С другими подобными переменными такая же проблема.
Вероятно, надо в коде функции кастомного скрипта перед объявлением цикла проверять есть ли такая переменная(она может быть объявлена в коде пользовательского скрипта), если есть, то сохранять ее и восстанавливать значение до возврата из функции.
Причем нужно восстанавливать значение при любом поведении, в том числе если функция из модуля упадет, чтобы пользователь не увидел свои изменённые переменные и долго не думал "что за фигня тут у меня".
Это если пользователь решит обернуть вызов функции из модуля в ошибку.Выглядит жутким хаком.
Если кому то надо, вот список глобальных переменных, не всех их надо сохранять и восстанавливать.
VAR_CYCLE_INDEX VAR_FOREACH_DATA VAR_FOR_EACH_CSS VAR_FOR_EACH_MATCH VAR_FOR_EACH_XPATH VAR_WAS_ERROR VAR_LAST_ERROR VAR_ERROR_ID VAR_CYCLE_INDEX VAR_FOREACH_DATA VAR_FOR_EACH_CSS VAR_FOR_EACH_MATCH VAR_FOR_EACH_XPATH VAR_WAS_ERROR VAR_LAST_ERROR VAR_ERROR_IDОбщую идею, как это можно делать, можно почитать тут:
https://community.bablosoft.com/topic/25851/проблема-при-вызове-функции/30 -
@sergerdn said in [[CYCLE_INDEX]] в двух циклах FOR вложенных друг в друга:
@Fox said in [[CYCLE_INDEX]] в двух циклах FOR вложенных друг в друга:
Проще создайте перед циклом две переменных с значением 0, и внутри каждого цикла первым действием увеличивайте отдельную переменную. В такой конструкции не будет неожиданностей с переопределением.
Тут есть небольшая проблема.
Если в кастомном модуле в функции есть цикл, то код из кастомного модуля затрет переменную CYCLE_INDEX в коде пользовательского скрипта своим значением.
С другими подобными переменными такая же проблема.
Вероятно, надо в коде функции кастомного скрипта перед объявлением цикла проверять есть ли такая переменная(она может быть объявлена в коде пользовательского скрипта), если есть, то сохранять ее и восстанавливать значение до возврата из функции.
Причем нужно восстанавливать значение при любом поведении, в том числе если функция из модуля упадет, чтобы пользователь не увидел свои изменённые переменные и долго не думал "что за фигня тут у меня".
Это если пользователь решит обернуть вызов функции из модуля в ошибку.Выглядит жутким хаком.
Проблема переменных BAS в модулях имеют более глобальные последствия, ведь многие используют в действиях стандартные названия переменных, а затем из этих действий создают модули, которые и вызывают проблемы перезаписи переменных со стандартными названиями. Об этой проблеме уже есть тикет, есть несколько возможных решений, но пока единственный надёжный способ, это в ручную править код заменяя переменные BAS на переменные js (var VAR_CYCLE_INDEX и т.д.)
-
@Fox said in [[CYCLE_INDEX]] в двух циклах FOR вложенных друг в друга:
проблема переменных BAS в модулях имеют более глобальные последствия
Да. Но основная проблема не в существующем поведении, а в том, что нет документации на этот счет, пользователи расшибают лбы об стенку самостоятельно.
И нет инструкция с обходными путями. Пользователи сами придумывают костыли, как избежать этого.
Хотя логика простая - если до вызова функции некий список переменных был объявлен(CYCLE_INDEX, VAR_FOREACH_DATA, etc), то перед вызовом функции сохранять их значения и восстанавливать после возврата.
Вот прямо сейчас я это и делаю на основании твоего же кода.
P.S.
У модулей должен быть своя видимость области переменных, это решит почти все проблемы. -
@sergerdn said in [[CYCLE_INDEX]] в двух циклах FOR вложенных друг в друга:
@Fox said in [[CYCLE_INDEX]] в двух циклах FOR вложенных друг в друга:
проблема переменных BAS в модулях имеют более глобальные последствия
Да. Но основная проблема не в существующем поведении, а в том, что нет документации на этот счет, пользователи расшибают лбы об стенку самостоятельно.
И нет инструкция с обходными путями. Пользователи сами придумывают костыли, как избежать этого.
Хотя логика простая - если до вызова функции некий список переменных был объявлен(CYCLE_INDEX, VAR_FOREACH_DATA, etc), то перед вызовом функции сохранять их значения и восстанавливать после возврата.
Вот прямо сейчас я это и делаю на основании твоего же кода.
P.S.
У модулей должен быть своя видимость области переменных, это решит почти все проблемы.Не уверен, что область видимости можно ограничить в BAS. Можно поступить с переменными, как с функциями - добавить опцию, что бы генерировать длинные случайные названия переменных, заменяя используемые в функции при создании модуля
-
@Fox said in [[CYCLE_INDEX]] в двух циклах FOR вложенных друг в друга:
Не уверен, что область видимости можно ограничить в BAS
Пользователям нельзя, разработчику думаю можно все.
@Fox said in [[CYCLE_INDEX]] в двух циклах FOR вложенных друг в друга:
Можно поступить с переменными, как с функциями - добавить опцию, что бы генерировать длинные случайные названия переменных
Кстати идея, задумался не написать ли мне сейчас скрипт, который делает post-process модуля, превращая все переменные внутри функции модуля в случайные названия.
-
@sergerdn said in [[CYCLE_INDEX]] в двух циклах FOR вложенных друг в друга:
Пользователям нельзя, разработчику думаю можно все.
Если реализация изоляции переменных BAS в модуле будет требовать больших изменений в текущей логики работы BAS, то разработчик этого делать не будет.
Кстати идея, задумался не написать ли мне сейчас скрипт, который делает post-process модуля, превращая все переменные внутри функции модуля в случайные названия.
Да, я вроде даже выкладывал скрипт для замены имён переменных в модуле, не помню только где именно.
-
@Fox said in [[CYCLE_INDEX]] в двух циклах FOR вложенных друг в друга:
Да, я вроде даже выкладывал скрипт для замены имён переменных в модуле, не помню только где именно.
@Fox said in [[CYCLE_INDEX]] в двух циклах FOR вложенных друг в друга:
это в ручную править код заменяя переменные BAS на переменные js (var VAR_CYCLE_INDEX и т.д.)
Если в файле engine.js заменить все переменные, которые начинаются с VAR на что-то другое, то это пройдет без побочных эффектов?
было:
VAR_LOG_PREFIX = _function_argument("_log_prefix") var json = JSON.parse(native("filesystem", "fileinfo", VAR__DIRECTORY_PATH)) VAR_FILEINFO_EXISTS = json["exists"]стало:
_LOG_PREFIX = _function_argument("_log_prefix") var json = JSON.parse(native("filesystem", "fileinfo", __DIRECTORY_PATH)) _FILEINFO_EXISTS = json["exists"] -
@sergerdn said in [[CYCLE_INDEX]] в двух циклах FOR вложенных друг в друга:
@Fox said in [[CYCLE_INDEX]] в двух циклах FOR вложенных друг в друга:
это в ручную править код заменяя переменные BAS на переменные js (var VAR_CYCLE_INDEX и т.д.)
Если в файле engine.js заменить все переменные, которые начинаются с VAR на что-то другое, то это пройдет без побочных эффектов?
было:
VAR_LOG_PREFIX = _function_argument("_log_prefix") var json = JSON.parse(native("filesystem", "fileinfo", VAR__DIRECTORY_PATH)) VAR_FILEINFO_EXISTS = json["exists"]стало:
_LOG_PREFIX = _function_argument("_log_prefix") var json = JSON.parse(native("filesystem", "fileinfo", __DIRECTORY_PATH)) _FILEINFO_EXISTS = json["exists"]По идее должно работать, однако вы меняете одни глобальные переменные js на другие.
-
@Fox said in [[CYCLE_INDEX]] в двух циклах FOR вложенных друг в друга:
По идее должно работать, однако вы меняете одни глобальные переменные js на другие.
Было "VAR_", стало без него.
А это значит, что стандартным способом пользователь не сможет случайно затереть свою переменную из-за модуля, которую он также создал стандартным способом(BAS-переменная).
Или надо var VAR_Buu и таким обзором они станут локальными javascript переменными ?