[[CYCLE_INDEX]] в двух циклах FOR вложенных друг в друга

Поддержка
  • @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 вложенных друг в друга:

    Так если вы хорошо знаете яваскрипт, зачем вам Бас?

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

    Так если с Басом такие сложности, то не лучше ли найти что то более удобное, понятное? На что написано много гайдов...

  • @senerg Как? эмпирически. Мы все и @Fox тоже то чем делимся то сами пробовали. А сначала это все узнали. Т.е. было много попыток и далеко не 20% удачные))

  • @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/я-плачу-весь

  • Интересно, что ответ так и не дали. Я решил проблему так - записываю CYCLE_INDEX в другую переменную, после этого задержка, и после вложенного цикла возвращаю номер обратно в CYCLE_INDEX .

  • @sten30 said in [[CYCLE_INDEX]] в двух циклах FOR вложенных друг в друга:

    Интересно, что ответ так и не дали.

    Я первым же сообщением дал корректный ответ

    90260a62-c4d4-4d4b-b3bf-794944c4ab41-изображение.png

    Я решил проблему так - записываю 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 модуля, превращая все переменные внутри функции модуля в случайные названия.

    Да, я вроде даже выкладывал скрипт для замены имён переменных в модуле, не помню только где именно.