Выполнить код из переменной

Поддержка
  • @LCFSCS учите JavaScript и все у вас заработает, либо не используйте такие костыли.

  • @UserTrue
    Значит Вы признаёте свою неправоту, ибо ответы с посылом учить язык, строить гараж, растить детей и т.д. являются съездом с темы.

    Сами попробуйте написать любой код в переменную программы, а потом вызвать выполнение этого кода в действии Выполнить Код. Если сработает - кидайте ваш код. Я вот пол дня извращался (вплоть до 1 + 1) - результат нулевой (это я три варианта для примера привёл - а так я наверное все варианты перебрал)...

  • @GaG
    А дайте лучше ссылку на то, как код из переменной программы вставить в эту функцию (да в любую функцию)...

  • @LCFSCS said in Выполнить код из переменной:

    @UserTrue
    Значит Вы признаёте свою неправоту, ибо ответы с посылом учить язык, строить гараж, растить детей и т.д. являются съездом с темы.

    Сами попробуйте написать любой код в переменную программы, а потом вызвать выполнение этого кода в действии Выполнить Код. Если сработает - кидайте ваш код. Я вот пол дня извращался (вплоть до 1 + 1) - результат нулевой (это я три варианта для примера привёл - а так я наверное все варианты перебрал)...

    Он как раз и скинул сверху вариант. Вам нужно учить не полностью язык, а только конкатенацию строк, что бы eval() сработал правильно. Действие "Шаблон" может преобразовать ваш код в строку для eval(), но вы используете переменные для записи результата, значит какие то переменные не нужно преобразовывать.

    Вам проще будет использовать функцию вместо eval():

    [[FUNC]] = function(){
    
    if(typeof([[GIGAPETA]]) == "undefined") [[GIGAPETA]] = "";
    if(typeof([[KOD_RESULT3]]) == "undefined") [[KOD_RESULT3]] = "";
    if(typeof([[TURBO]]) == "undefined") [[TURBO]] = "";
    if(typeof([[K2S]]) == "undefined") [[K2S]] = "";
    if(typeof([[HITFILE]]) == "undefined") [[HITFILE]] = "";
    
    if ([[GIGAPETA]]){
        [[KOD_RESULT3]] += [[GIGAPETA]];
        if ([[TURBO]] || [[K2S]]){
            [[KOD_RESULT3]] += "\r\n\r\n";
        }
    }
    
    if ([[TURBO]]){
        [[KOD_RESULT3]] += [[TURBO]]+"\r\n\r\n"+[[HITFILE]];
        if ([[K2S]]){
         [[KOD_RESULT3]] += "\r\n\r\n";
        }
    }
    }
    

    Вызов [[FUNC]]() с типом данных expression

  • Проблема в том, что вы лезете под капот не зная языка, а потом ругаетесь, что у вас не получается. Причём виноват почему то BAS, а не javascript... Попробуйте использовать переменные js вместо переменных BAS и у вас тоже ни чего не получится.

    Самым простым способом было бы создание этой простой конструкции условий кубиками BAS. А что бы это всё занимало меньше места, можно кубик свернуть. Либо поместить все кубики в функцию и вызывать уже её.

  • @LCFSCS said in Выполнить код из переменной:

    Утверждение: Я всё больше прихожу в недоумение от подхода к созданию программы - очень нужные и простые в реализации вещи игнорируются, в то время как усилия направляются на реализацию модных "свистоперделок"...
    Для реализации выполнения кода из переменной нужно всего три действия - добавить "галку" (код из переменной) (либо "синтксис" типа ??[[KOD]]??), проверку этого дела и вставку текста из переменной - всё - дальше всё работает как обычно.

    Выполнение кода из переменной является дурным тоном (читай говнокод) и программисты javascript настоятельно рекомендуют не использовать eval() из за возможных проблем с безопасностью и отладкой.

    Однако BAS позволяет реализовать и использовать любой модуль, в том числе и замену стандартных. То есть вы можете сами реализовать функцию BAS, которая бы получала код из строки, экранировала нужные переменные и выполняла результат. Затем эту функцию вы бы могли экспортировать в модуль и использовать одним новым действием BAS

  • @Fox

    Спасибо, Fox.

    Про создать свою функцию - это замечательно, только этому нужно научиться. Только я неделю BAS пользую и две недели как начал JS изучать (из-за BAS'а в основном).
    Прикрутить бы к стандартному модулю (если это возможно) Выполнить Код возможность взятия кода из переменной (тупо "копировать-вставить")...
    Что и вызывает недоумение - что настолько удобное и простое в реализации действие не сделано, ведь практически во всех модулях реализован этот принцип ("копировать-вставить" - взять из переменной).
    Исходя из данного принципа у меня сформировался подход к работе с программой и отступление от данного приципа в конкретной ситуации (хотя логически и в этой ситуации он просто необходим) меня и огорчило.

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

    Набиваю проверочные переменные (*_TEST) и просто выполняю один код не из переменной.

    if ([[GIGAPETA]] && [[GIGAPETA_TEST]]){
        [[KOD_RESULT3]] += [[GIGAPETA]];
        if ([[TURBO]] && [[TURBO_TEST]] || [[K2S]] && [[K2S_TEST]]){
            [[KOD_RESULT3]] += "\r\n\r\n";
        }
    }
    
    if ([[TURBO]] && [[TURBO_TEST]]){
        [[KOD_RESULT3]] += [[TURBO]]+"\r\n\r\n"+[[HITFILE]];
        if ([[K2S]] && [[K2S_TEST]]){
         [[KOD_RESULT3]] += "\r\n\r\n";
        }
    }
    }
    

    Просто думал, что можно проще (типа копирать-вставить) - я фанат простоты и оптимизации

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

    Ещё раз спасибо.

  • @LCFSCS said in Выполнить код из переменной:

    @Fox

    Спасибо, Fox.

    Про создать свою функцию - это замечательно, только этому нужно научиться. Только я неделю BAS пользую и две недели как начал JS изучать (из-за BAS'а в основном).

    Можете начать изучение с просмотра роликов с официального ютуб канала https://www.youtube.com/@browserautomationstudio3109/videos

    Прикрутить бы к стандартному модулю (если это возможно) Выполнить Код возможность взятия кода из переменной (тупо "копировать-вставить")...

    Как понять "взятия кода из переменной" ?

    Что и вызывает недоумение - что настолько удобное и простое в реализации действие не сделано, ведь практически во всех модулях реализован этот принцип ("копировать-вставить" - взять из переменной).
    Исходя из данного принципа у меня сформировался подход к работе с программой и отступление от данного приципа в конкретной ситуации (хотя логически и в этой ситуации он просто необходим) меня и огорчило.

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

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

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

    Набиваю проверочные переменные (*_TEST) и просто выполняю один код не из переменной.

    if ([[GIGAPETA]] && [[GIGAPETA_TEST]]){
        [[KOD_RESULT3]] += [[GIGAPETA]];
        if ([[TURBO]] && [[TURBO_TEST]] || [[K2S]] && [[K2S_TEST]]){
            [[KOD_RESULT3]] += "\r\n\r\n";
        }
    }
    
    if ([[TURBO]] && [[TURBO_TEST]]){
        [[KOD_RESULT3]] += [[TURBO]]+"\r\n\r\n"+[[HITFILE]];
        if ([[K2S]] && [[K2S_TEST]]){
         [[KOD_RESULT3]] += "\r\n\r\n";
        }
    }
    }
    

    Если вам так удобнее - флаг вам в руки. Создайте свой враппер над BAS, который бы брал код из других мест и выполнялся. Но я очень сильно сомневаюсь, что это ускорит разработку и отладку итогового скрипта

    Просто думал, что можно проще (типа копирать-вставить) - я фанат простоты и оптимизации

    Создавать скрипт кубиками не залезая под капот в js - вот простота и оптимизация

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

    Всё генерировать на лету? Вы вкурсе, что eval() не выполнит методы api BAS? То есть полноценно написать шаблон действий отдельно от BAS не получится.


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

  • @LCFSCS Извиняйте, но тут не кто и не нанимался Учить кого то и Раскрывать свои Фишки.
    Скок тот же Фокс говорил, что здесь помогают чисто кому не в падел мо и своё свободное Время.

    А Усер то он Реал Умный а вы зря его не слушаете.
    Они меня и Фокс считай и научили не задавать Глупых Вопросов :)))
    А уметь и самому находить что я и делаю какой год и Норм всё.

    Нах венить кого то и думать что вам все и вся Должны и Обязаны.
    Это Сообщество а не Поддержка!