Author Topic: Почистить все переменные.  (Read 2352 times)

0 Members and 1 Guest are viewing this topic.

winwebber

  • Освоившийся
  • **
  • Posts: 46
    • View Profile
Почистить все переменные.
« 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)
« Last Edit: January 04, 2019, 08:07:13 PM by winwebber »

winwebber

  • Освоившийся
  • **
  • Posts: 46
    • View Profile
Re: Почистить все переменные.
« Reply #1 on: January 08, 2019, 08:42:15 AM »
Мм ну в скрипте много include не самый удобный вариант.
Проще уже сразу чистить в будущем, есть ли варианты ещё, кроме как руками пройтись?
или
Quote
можно, внесите все используемые переменные в массив и очищайте его одной командой.
как-то можно реализовать кодом в родительском скрипте? Можно пример кода?

winwebber

  • Освоившийся
  • **
  • Posts: 46
    • View Profile
Re: Почистить все переменные.
« Reply #2 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

winwebber

  • Освоившийся
  • **
  • Posts: 46
    • View Profile
Re: Почистить все переменные.
« Reply #3 on: February 01, 2019, 10:31:12 AM »
arrpush вносит значение переменных, а не сами переменные, наверно в этом направлении копать надо, но не накопал
« Last Edit: February 01, 2019, 10:40:13 AM by winwebber »

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Почистить все переменные.
« Reply #4 on: February 01, 2019, 11:18:02 AM »
$c[0] = 1  //это твое переменная а
$c[1] = 32 //это твое переменная б
$c[2] =  3 //это твое переменная с
$c[3] = 66 //это твое переменная д
...... и так далее

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

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


Еще как вариант, написать скрипт, который будет из всего текста кода фильтровать все переменные, и создаст соответствующие строки с обнулением их.

Космич

  • Активный участник
  • ***
  • Posts: 265
    • View Profile
Re: Почистить все переменные.
« Reply #5 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
« Last Edit: February 01, 2019, 12:25:55 PM by Космич »
«Иногда ты ваяешь до тех пор, пока до тебя не дойдёт, что именно ты делаешь.»

winwebber

  • Освоившийся
  • **
  • Posts: 46
    • View Profile
Re: Почистить все переменные.
« Reply #6 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
Еще как вариант, написать скрипт, который будет из всего текста кода фильтровать все переменные, и создаст соответствующие строки с обнулением их.
Надо подумать.

Космич

  • Активный участник
  • ***
  • Posts: 265
    • View Profile
Re: Почистить все переменные.
« Reply #7 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
«Иногда ты ваяешь до тех пор, пока до тебя не дойдёт, что именно ты делаешь.»

winwebber

  • Освоившийся
  • **
  • Posts: 46
    • View Profile
Re: Почистить все переменные.
« Reply #8 on: February 01, 2019, 05:20:35 PM »
Тестиру, что-то пока не получается когда добаляю переменную, но не хочу дергать по-пусту, где-то сам косячу вполне возможно. В процессе. Отпишу.

winwebber

  • Освоившийся
  • **
  • Posts: 46
    • View Profile
Re: Почистить все переменные.
« Reply #9 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
« Last Edit: February 01, 2019, 05:41:48 PM by winwebber »