@Blablabla8133 разделитель ;
[[CYCLE_INDEX]] в двух циклах FOR вложенных друг в друга
-
Если действие вложено в два цикла FOR, то внутри действия доступна только [[CYCLE_INDEX]] последнего, т.е. второго вложения. Как получить доступ к [[CYCLE_INDEX]] первого вложения? Или придется колхозить, объявляя переменную перед циклом и увеличивая ее в конце цикла?
-
-
@fox , понятно, спасибо.
В поиске я нашел информацию по этому вопросу за 2016 год, подумал может допилили чтоб можно было индекс вложения самого [[CYCLE_INDEX]] в каких-нибудь скобках указать. Например так [[CYCLE_INDEX]][0], или так [[CYCLE_INDEX]] (0), или так [[CYCLE_INDEX]]{0} или еще как-нибудь... -
@senerg А зачем такой огород? Вы опять хотите минивен и рюшечки на лобовухе? А кто вам мешает самому их создавать? Кто? Это ангар. cycle_index вообще по началу не для вас был))
он считает УСПЕШНЫЕ выполнения ну в смысле то что смогло дойти до конца. А все вложенное никакого отношения к концу не относится -
@allive , Да как угодно можно. Если бы только была хоть какая-то документация, описывающая что можно, что нет. А так написал код за 10 минут, проверил на яваскрипте - работает. Потом в басе сидишь целый день и отгадываешь где скобочка нужна, где пробелов понаставить, где слэш не подошел...
Хотя в целом-то БАС работает, хорошая прога. -
@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. Можно поступить с переменными, как с функциями - добавить опцию, что бы генерировать длинные случайные названия переменных, заменяя используемые в функции при создании модуля