Author Topic: include с переменным именем файла?  (Read 10917 times)

0 Members and 1 Guest are viewing this topic.

aheart82

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
include с переменным именем файла?
« 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)


и заодно вопрос, а если таких инклюдов у меня будет сотня, не зависнет ли программа?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: include с переменным именем файла?
« Reply #1 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

aden

  • Оплот сообщества
  • ****
  • Posts: 363
    • View Profile
Re: include с переменным именем файла?
« Reply #2 on: March 26, 2014, 08:21:41 PM »
Code: (clickermann) [Select]
$x=strconcat(RND(1,3),".cms")
#include $x
жалко что не работает изза обязательного наличия кавычек

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: include с переменным именем файла?
« Reply #3 on: March 26, 2014, 08:42:35 PM »
Code: (clickermann) [Select]
$x=strconcat(RND(1,3),".cms")
#include $x
жалко что не работает изза обязательного наличия кавычек

При запуске строки #include заменяются кодом из соответствующего файла. Ты что хочешь динамически менять код чтоли? Это никак работать не будет!

Atas

  • Активный участник
  • ***
  • Posts: 147
    • View Profile
Re: include с переменным именем файла?
« Reply #4 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

Очевидно, что если инклудов будет сотня и они будут большими, то потребуется много оперативной памяти. Надеюсь, что не так уж и много, чтобы зависла программа.
« Last Edit: March 28, 2014, 01:47:37 PM by Atas »

Крис Тинка

  • Активный участник
  • ***
  • Posts: 171
    • View Profile
Re: include с переменным именем файла?
« Reply #5 on: March 27, 2014, 08:18:56 AM »
Для чего сотня инклудов? Нельзя в одном скрипте написать сотню сабов и вызывать их в любой момент, используя 1 инклуд в начале?

aheart82

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
Re: include с переменным именем файла?
« Reply #6 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 сценариев- я отпишусь в этой ветке, как себя ведет комп

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: include с переменным именем файла?
« Reply #7 on: March 27, 2014, 09:14:45 AM »
Не представляю себе зачем это нужно. Ещё учти что если в коде по инклюду есть сабы, #include "1.cms" нельзя писать внутри любых конструкций, хоть IF, хоть CASE


Atas

  • Активный участник
  • ***
  • Posts: 147
    • View Profile
Re: include с переменным именем файла?
« Reply #8 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
« Last Edit: March 27, 2014, 10:54:12 AM by Atas »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: include с переменным именем файла?
« Reply #9 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

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: include с переменным именем файла?
« Reply #10 on: March 27, 2014, 11:19:27 AM »
Да, да с обычными работает. Проверял раньше на 4.9
С сабами нет, т.к. SUB должен быть в "корне" скрипта, а не в цикле или условии.


Zets

  • Освоившийся
  • **
  • Posts: 66
    • View Profile
    • vk.com
Re: include с переменным именем файла?
« Reply #11 on: March 27, 2014, 01:03:35 PM »
А так не получится?
Code: (clickermann) [Select]
$y=".cms"
$x=strconcat(RND(1,3),$y)
#include $x

aheart82

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
Re: include с переменным именем файла?
« Reply #12 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
только длинный получается в условии

Zets

  • Освоившийся
  • **
  • Posts: 66
    • View Profile
    • vk.com
Re: include с переменным именем файла?
« Reply #13 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 условий... =\

Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
Re: include с переменным именем файла?
« Reply #14 on: March 29, 2014, 07:01:02 AM »
если для работы тебе нужно сто сценариев \ сто условий, то я бы задумался об оптимальности выбранного решения