Страница 2 из 2
Re: Работа с массивами или когда массив распадается на указатели
Добавлено: 18 июн 2020, 10:18
Sertik
Неважно что бета-версия. Зачем пользователю мучиться ? - скрипт должен ставиться в систему легко, автоматом.
Комментарии русские теряются при экспорте, но можно это обойти. Вот я делал, тут описано как
viewtopic.php?t=8058
Так получите текстовые файлы всех своих скриптов, потом переименуйте их в .rsc вот и всё. Их можно импортировать в любой роутер командой /import
комментарии сохранятся на русском языке
Если все вместе не превышают 4К, можно склеить в один файл .rsc
Re: Работа с массивами или когда массив распадается на указатели
Добавлено: 18 июн 2020, 11:14
pepelxl
Не много не понял о какой потере идёт речь по той ссылке. Можете разъяснить?. Потери русского при прямом копировании нет. Пример для винды:
Берёте копируете код с форума и вставляете его в notepad++. В блокноте он автоматом станет в кодировку utf. Теперь открываете winbox, открываете скрипт. УБЕЖДАЕТЕСЬ что раскладка клавиатуры в windows стоит в ОБОИХ окнах на ru. И просто делаете копировать-вставить. Работает без потерь в обе стороны.
А если надо удалить комменты или удалить только русские , то в notepad это делается одним действием. А вот если моим скриптом захочет воспользоваться человек который не знает по русски ничего, то ему эти записи как Филькина грамота, как не извлекай их из роутера. Как пример - переключи в настройках винды - используемую кодировку для программ не поддерживающих юникод
Re: Работа с массивами или когда массив распадается на указатели
Добавлено: 18 июн 2020, 22:30
Sertik
Согласен со всем. Так на кой нерусским Ваши скрипты давать. Не надо, пусть буржуи сами пишут ...
Наши скрипты только для нас.
Re: Работа с массивами или когда массив распадается на указатели
Добавлено: 19 июн 2020, 01:37
Sertik
Раз Вы хорошо знаете массивы, подскажите, как мне извлечь данные из многомерного массива, полученного /tool fetch в формате json вот тут:
viewtopic.php?f=14&t=11322&start=10
Re: Работа с массивами или когда массив распадается на указатели
Добавлено: 18 ноя 2022, 17:32
-13-
написал скрипт для массива
Код: Выделить всё
/ip dhcp-client
:foreach ISP in=[find ~""] do={
:set $interfaceISP [get $ISP interface]
:set $nameISP [get $ISP comment]
:set $statusISP ([get $ISP]->"status")
:if (!any $statusISP) do={
:set $statusISP ([/interface ethernet monitor $interfaceISP once as-value]->"status")
}
:set $ipISP [get $ISP address]
:if (any $ipISP) do={
:set $ipISP [:pick $ipISP 0 [:find $ipISP "/"]]
} else={
:set $ipISP $statusISP
}
:set ($listISP->$interfaceISP) {name=$nameISP; status=$ipISP; id=$ISP}
}
:return $listISP
Код: Выделить всё
/ip dhcp-client
:foreach ISP in=[find ~""] do={
:set $interfaceISP [get $ISP interface]
:set $nameISP [get $ISP comment]
:set $statusISP ([get $ISP]->"status")
:if (!any $statusISP) do={
:set $statusISP ([/interface ethernet monitor $interfaceISP once as-value]->"status")
}
:set $ipISP [get $ISP address]
:if (any $ipISP) do={
:set $ipISP [:pick $ipISP 0 [:find $ipISP "/"]]
} else={
:set $ipISP $statusISP
}
:set ($listISP->$ISP) {name=$nameISP; status=$ipISP}
}
:return $listISP
в чем проблема?
подскажите как сделать чтобы сам собрал и пронумеровал от 0 до конца
Re: Работа с массивами или когда массив распадается на указатели
Добавлено: 18 ноя 2022, 17:52
Sertik
А вот Вы наконец и наступили на грабли, связанные с Вашей привычкой не объявлять переменные !
Re: Работа с массивами или когда массив распадается на указатели
Добавлено: 18 ноя 2022, 19:07
-13-
Sertik писал(а): ↑18 ноя 2022, 17:52
А вот Вы наконец и наступили на грабли, связанные с Вашей привычкой не объявлять переменные !
А при чем тут грабли? Скрипт массив собирает, но ключем почему то не может быть id записи, которая по сути уже переменная.
Re: Работа с массивами или когда массив распадается на указатели
Добавлено: 19 ноя 2022, 15:58
Brook
-13- писал(а): ↑18 ноя 2022, 17:32
написал скрипт для массива
Код: Выделить всё
/ip dhcp-client
:foreach ISP in=[find ~""] do={
:set $interfaceISP [get $ISP interface]
:set $nameISP [get $ISP comment]
:set $statusISP ([get $ISP]->"status")
:if (!any $statusISP) do={
:set $statusISP ([/interface ethernet monitor $interfaceISP once as-value]->"status")
}
:set $ipISP [get $ISP address]
:if (any $ipISP) do={
:set $ipISP [:pick $ipISP 0 [:find $ipISP "/"]]
} else={
:set $ipISP $statusISP
}
:set ($listISP->$interfaceISP) {name=$nameISP; status=$ipISP; id=$ISP}
}
:return $listISP
Код: Выделить всё
/ip dhcp-client
:foreach ISP in=[find ~""] do={
:set $interfaceISP [get $ISP interface]
:set $nameISP [get $ISP comment]
:set $statusISP ([get $ISP]->"status")
:if (!any $statusISP) do={
:set $statusISP ([/interface ethernet monitor $interfaceISP once as-value]->"status")
}
:set $ipISP [get $ISP address]
:if (any $ipISP) do={
:set $ipISP [:pick $ipISP 0 [:find $ipISP "/"]]
} else={
:set $ipISP $statusISP
}
:set ($listISP->$ISP) {name=$nameISP; status=$ipISP}
}
:return $listISP
в чем проблема?
подскажите как сделать чтобы сам собрал и пронумеровал от 0 до конца
Если я правильно понимаю, то переменная
ISP не является числом, а представляет из себя
.id в виде
.id=*4. Поэтому оно не может быть ключом.
Как вариант, добавьте счетчик в цикл и используйте его как индекс.
Re: Работа с массивами или когда массив распадается на указатели
Добавлено: 19 ноя 2022, 20:00
-13-
В первом варианте $interfaceISP тоже не число, но как ключ работает.
Подкиньте идею, чтоб по-порядку в массив складывало, согласно .id, в моем варианте укладывает по алфавиту.
Re: Работа с массивами или когда массив распадается на указатели
Добавлено: 20 ноя 2022, 01:24
Brook
-13- писал(а): ↑19 ноя 2022, 20:00
В первом варианте $interfaceISP тоже не число, но как ключ работает.
Подкиньте идею, чтоб по-порядку в массив складывало, согласно .id, в моем варианте укладывает по алфавиту.
Так вроде в сообщении выше подкинул...
В первом варианте работает как строка. Имя интерфейса
$interfaceISP становится текстовым ключом, поэтому массив и сортируется.
Во втором варианте
$ISP не число - это тип
.id в виде .id=*4. Работать с ним в циклах можно, но
id не может быть индексом в массиве.
Индексом в массиве может быть только число.
Как вариант, добавьте счетчик в цикл и используйте его как индекс.
Код: Выделить всё
:local counter 0
/ip dhcp-client
:foreach ISP in=[find ~""] do={
:set $interfaceISP [get $ISP interface]
:set $nameISP [get $ISP comment]
:set $statusISP ([get $ISP]->"status")
:if (!any $statusISP) do={
:set $statusISP ([/interface ethernet monitor $interfaceISP once as-value]->"status")
}
:set $ipISP [get $ISP address]
:if (any $ipISP) do={
:set $ipISP [:pick $ipISP 0 [:find $ipISP "/"]]
} else={
:set $ipISP $statusISP
}
:set ($listISP->$counter) {name=$nameISP; status=$ipISP}
:set counter ($counter + 1)
}
:return $listISP