Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: winwebber on January 04, 2019, 08:05:17 PM

Title: Почистить все переменные.
Post by: winwebber on January 04, 2019, 08:05:17 PM
Как почистить все переменные при "рестарте" скрипта и спать спокойно?
Пример
Code: [Select]
$a=$a+1
print ($a)
Result
Quote
1
2
3
Как получить
Quote
1
1
1
Как и писал выше перебирать все переменные такое себе решение. Можно ли массово все потереть?
что-то типа
Code: [Select]
UNDEFINE(ALL)
$a=$a+1
print ($a)
Title: Re: Почистить все переменные.
Post by: winwebber on January 08, 2019, 08:42:15 AM
Мм ну в скрипте много include не самый удобный вариант.
Проще уже сразу чистить в будущем, есть ли варианты ещё, кроме как руками пройтись?
или
Quote
можно, внесите все используемые переменные в массив и очищайте его одной командой.
как-то можно реализовать кодом в родительском скрипте? Можно пример кода?
Title: Re: Почистить все переменные.
Post by: winwebber on February 01, 2019, 10:29:22 AM
Подниму тему, так и не получилось решить вопрос.
В идеале конечно найти решение близкое к UNDEFINEALL()
Но даже
можно, внесите все используемые переменные в массив и очищайте его одной командой.
Не понял как это работает, что имелось в виду, попробовал так, но
Code: [Select]
logclear
$a=1
$b=2
print("$a=",$a)
print("$b=",$b)
arrpush($c,$a)
arrpush($c,$b)
print("$c")
FOR($i=0,$i<arrsize($c))
 print("$c[",$i,"]=",$c[$i])
END_CYC
UNDEFINE($c)
print("$a=",$a)
print("$b=",$b)
print("$c")
FOR($i=0,$i<arrsize($c))
 print("$c[",$i,"]=",$c[$i])
END_CYC
halt
Code: [Select]
10:27:59 AM $a=1
10:27:59 AM $b=2
10:27:59 AM $c
10:27:59 AM $c[0]=1
10:27:59 AM $c[1]=2
10:27:59 AM $a=1
10:27:59 AM $b=2
10:27:59 AM $c
Title: Re: Почистить все переменные.
Post by: winwebber on February 01, 2019, 10:31:12 AM
arrpush вносит значение переменных, а не сами переменные, наверно в этом направлении копать надо, но не накопал
Title: Re: Почистить все переменные.
Post by: dramster on February 01, 2019, 11:18:02 AM
$c[0] = 1  //это твое переменная а
$c[1] = 32 //это твое переменная б
$c[2] =  3 //это твое переменная с
$c[3] = 66 //это твое переменная д
...... и так далее

//делаем все наши дела, и в конце обнуляем все их одним махом
UNDEFINE($c)

Вот это скорее всего имел ввиду кирил.


Еще как вариант, написать скрипт, который будет из всего текста кода фильтровать все переменные, и создаст соответствующие строки с обнулением их.
Title: Re: Почистить все переменные.
Post by: Космич on February 01, 2019, 11:37:45 AM
еще можно вот так

Code: (clickermann) [Select]
$a
$b
$c

FOR($count = 3, $count > 0, -1)
   SETVAR(STRCONCAT("$", CHAR(STRCONCAT("0x4", $count))), #TRUE)
END_CYC

PRINT("a = ", $a, ", b = ", $b, ", c = ", $c)

FOR($count = 3, $count > 0, -1)
   SETVAR(STRCONCAT("$", CHAR(STRCONCAT("0x4", $count))), #FALSE)
END_CYC

PRINT("a = ", $a, ", b = ", $b, ", c = ", $c)

HALT
Title: Re: Почистить все переменные.
Post by: winwebber on February 01, 2019, 01:10:52 PM
$c[0] = 1  //это твое переменная а
$c[1] = 32 //это твое переменная б
$c[2] =  3 //это твое переменная с
$c[3] = 66 //это твое переменная д
...... и так далее

//делаем все наши дела, и в конце обнуляем все их одним махом
UNDEFINE($c)

Вот это скорее всего имел ввиду кирил.
Вероятнее всего.
Но скрипт состоит из более 100 файлов, и не самых оптимизированны, т.е. кода много, боюсь подумать даже сколько переменных. Не все получается в SUB обернуть. Это как минимум нечитаемо будет и не отлаживаемо, если все переменные одним массивом представить.
Quote
Еще как вариант, написать скрипт, который будет из всего текста кода фильтровать все переменные, и создаст соответствующие строки с обнулением их.
Надо подумать.
Title: Re: Почистить все переменные.
Post by: Космич on February 01, 2019, 02:47:56 PM
Мой вариант чем не подходит?)

Вот еще один вариант через массив
Code: (clickermann) [Select]
$var534 = 1
$var758 = 1

SUB(SETVARLIST, $variable_names_list, $value)
   STRSEPARATE ($variable_names_list, ",", $arraylist)
   FOR($count = ARRSIZE($arraylist), $count > 0, -1)
      SETVAR(STRCONCAT("$", $arraylist[$count-1]), $value)
   END_CYC
   UNDEFINE($arraylist)
END_SUB


SETVARLIST("var534,var758", #FALSE)

PRINT("var534 = ", $var534, ", ", "var758 = ", $var758)

HALT
Title: Re: Почистить все переменные.
Post by: winwebber on February 01, 2019, 05:20:35 PM
Тестиру, что-то пока не получается когда добаляю переменную, но не хочу дергать по-пусту, где-то сам косячу вполне возможно. В процессе. Отпишу.
Title: Re: Почистить все переменные.
Post by: winwebber on February 01, 2019, 05:23:35 PM
Пока что первый что второй скрипт выдают
На примере второго скрипта.
Code: [Select]
logclear
$var534 = 1
$var758 = 1
$var111 = 1
 
SUB(SETVARLIST, $variable_names_list, $value)
   STRSEPARATE ($variable_names_list, ",", $arraylist)
   FOR($count = ARRSIZE($arraylist), $count > 0, -1)
      SETVAR(STRCONCAT("$", $arraylist[$count-1]), $value)
   END_CYC
   UNDEFINE($arraylist)
END_SUB
 
 
SETVARLIST("var534,var758", #FALSE)
 
PRINT("var534 = ", $var534, ", ", "var758 = ", $var758, " var111 = ", $var111)
 
HALT
Code: [Select]
5:22:39 PM var534 = 0, var758 = 0 var111 = 1
Я конечно понимаю, что писать чисто и всё такое.
Но разве это не логично UNDEFINEALL(). Чистит все переменные. Всё с нуля.
В вашем примере мне нужно вызвать подпрогрмму, в которой, перечистить названия переменных. Более 100 файлов, думаю в 5-30 переменных в каждом. Как мне их искать? Таким же успехом я могу сделать UNDEFINE(). С мысл в  тож что я душе не "люблю" сколько  у меня переменных и как они называются. Знаю что, "много". Надо все обнулить.
 Ну и соответственно
Code: [Select]
logclear
$a=1
$bb=2
$ccc=3
 
FOR($count = 3, $count > 0, -1)
   SETVAR(STRCONCAT("$", CHAR(STRCONCAT("0x4", $count))), #TRUE)
END_CYC
 
PRINT("a = ", $a, ", bb = ", $bb, ", ccc = ", $ccc)
 
FOR($count = 3, $count > 0, -1)
   SETVAR(STRCONCAT("$", CHAR(STRCONCAT("0x4", $count))), #FALSE)
END_CYC
 
PRINT("a = ", $a, ", bb = ", $bb, ", ccc = ", $ccc)
 
HALT
Code: [Select]
5:41:01 PM a = 1, bb = 2, ccc = 3
5:41:01 PM a = 0, bb = 2, ccc = 3