Страница 2 из 13
Re: Телеграмма для Mikrotik...
Добавлено: 28 июл 2022, 08:51
Sertik
Да, я читал этот пост. Там сохраняется в поле Regexp, но речь только о переменных.
Кстати, массив хранится в переменной не так, как объявляется.
Да, массив хранится в виде строки, но при восстановлении разворачивается снова в массив
Многомерные массивы не пробовал
Писать надо в файл. Там таких ограничений нет.
Но часто писать в файл вредно для flash-памяти роутера
Кстати, хочу поделиться одним наблюдением. Как известно, ограничение на длину переменной в
Микротик 4096 байт. Но на глобальные переменные, это ограничение не действует.
За это наблюдение спасибо ! Но это в принципе очевидно, ведь функции, объявляемые как глобальные переменные, могут иметь весьма длинный код, вот разрабы Микротиковцы и сняли ограничение на длину для глобальных ...
Да, нужен сайт для Вашего проекта по боту для Телеграмм. Надо кинуть клич, наверняка ведь, тут на форуме есть web-дизайнеры и программисты пишущие сайты ... Может podarok66 поможет ? Он, как модератор, знает подноготную многих пользователей форума.
Re: Телеграмма для Mikrotik...
Добавлено: 29 июл 2022, 07:28
pepelxl
Brook писал(а): ↑27 июл 2022, 20:06
.
UPD: Писать надо в файл. Там таких ограничений нет.
Они есть но другие, примерно 64 Кб. получилось сохранить в один файл из массива.
А если сохранять скрипты командой
Export в один файл, то ограничений по размеру не увидел.
Вот так можно писать файлы любой длинны. Естественно лучше это делать на подключённую флешку.
viewtopic.php?f=14&t=13440&p=83960#p83960
Re: Телеграмма для Mikrotik...
Добавлено: 29 июл 2022, 14:30
Brook
Отличный метод, спасибо за информацию. Протестировал сейчас на 150 000 записей. Всё сохранилось. Однозначно буду использовать.
Код: Выделить всё
:local test ":global testArray [:toarray \"\"]; :for key from=0 to=150000 do={:set (\$testArray->\$key) [:tostr (\"str=\".\$key)]}; :put (\$testArray) "; execute script=$test file="array.txt"
Re: Телеграмма для Mikrotik...
Добавлено: 29 июл 2022, 18:55
Brook
В процессе тестирования этого метода, открыл для себя еще одну возможность. Век живи - век учись.
Он хорош еще и тем, что команда :execute запускает выполнение кода в отельном процессе и не ждет возврата, как это происходит с функциями и командой :parse.
Если запускать функцию командой :execute, то код после нее будет продолжать выполняться, а не ждать, когда эта функция отработает. Этот факт открывает путь к многопоточности.
Спасибо еще раз Ув. pepelxl!
Re: Телеграмма для Mikrotik...
Добавлено: 29 июл 2022, 20:00
Brook
Еще в копилку про размер скриптов и файлов.
Ув.
pepelxl уже писал, что на скрипт приходится примерно
40Кб и больше туда не запихнешь, как и в Regexp.
Так и есть.
Но можно разворачивать функции и скрипты прямо из файла, командой
import. А в файл можно записать очень много кода.

Re: Телеграмма для Mikrotik...
Добавлено: 29 июл 2022, 21:19
pepelxl
Напомню, может ещё вы не сталкивались., Советую разобраться в вариантах объявления и инициализации массивов, есть нюансы. А так же итерации по многомерным массивам, и когда они начинают рассыпаться в указатели и теряться. Я с этим столкнулся когда уже была написана основная часть кода и потерял около месяца, при вылавливании блох. Темы эти несколько раз поднимались на форуме.
Re: Телеграмма для Mikrotik...
Добавлено: 29 июл 2022, 21:38
Brook
pepelxl писал(а): ↑29 июл 2022, 21:19
Напомню, может ещё вы не сталкивались., Советую разобраться в вариантах объявления и инициализации массивов, есть нюансы. А так же итерации по многомерным массивам, и когда они начинают рассыпаться в указатели и теряться. Я с этим столкнулся когда уже была написана основная часть кода и потерял около месяца, при вылавливании блох. Темы эти несколько раз поднимались на форуме.
С массивами пришлось столкнуться очень плотно. В том числе учитывая и ту информацию, о которой Вы говорите. Она помогла не наступить на те же грабли, за что отдельная благодарность сообществу.
О массивах тоже можно долго говорить.По сути это единственная структура данных доступная в Микротик скрипт. Но благодаря многомерности из него можно построить и другие структуры.
Одномерный индексированный - это несортированный список.
Одномерный k=v - это сортированный по ключу список.
Двумерный - это hashTable
Многомерный - это сортированное дерево.
А массив в памяти, т.е. развернутый в глобальную переменную, это доступная для записи и чтения, оперативная память, содержимое которой можно сохранять на диск.
Re: Телеграмма для Mikrotik...
Добавлено: 29 июл 2022, 21:50
Brook
Brook писал(а): ↑29 июл 2022, 18:55
Если запускать функцию командой
:execute, то код после нее будет продолжать выполняться, а не ждать, когда эта функция отработает. Этот факт открывает путь к многопоточности.
Спасибо еще раз Ув.
pepelxl!
А теперь ещё и многопоточность! Уже протестировал вариант с
execute. Время реакции на нажатие кнопки сократилась в разы.
До этого, при использовании команды
:parse, было:
3 секунды, если отправлять ответ на нажатие.
2 секунды, если не отправлять.
Теперь это
одна секунда в любом варианте.
Re: Телеграмма для Mikrotik...
Добавлено: 04 авг 2022, 18:08
Brook
Еще немного про массивы.
Многие в курсе, но и многие не знают...
Массив
не стоит копировать обычным "присваиванием", типа такого
:local array1 $array2, т.к. он передается по ссылке.
Если после такого "присваивания" менять значения элементов первого массива, то они изменятся и во втором, т.к. первый массив содержит ссылку на второй.
Ниже пример такого поведения.
Код: Выделить всё
:local array1 "empty"
:local array2 [:toarray "4,5,6"]
:put "-----------"
:put $array1;
:put $array2
:set array1 $array2
:set ($array1->0) 10
:put "-----------"
:put $array1;
:put $array2
Код: Выделить всё
Вывод в консоль
-----------
empty
4;5;6
-----------
10;5;6
10;5;6
Но, если после таких манипуляций обнулить второй массив
:set array2 [ ], то его элементы останутся в первом.
Re: Телеграмма для Mikrotik...
Добавлено: 05 авг 2022, 10:12
Sertik
Спасибо, интересно и нужно. А если обнулить первый массив что будет ?
