Добрый день.
Хотел сделать
log find where .id>$i а оно не работает
log find where .id=$i а вот так работает
set $i ($i+1) если $i типа id тоже не работает.
Вопрос: как можно получить все логи с .id больше n?
Работа с данным типа id (internal ID)
-
- Сообщения: 4204
- Зарегистрирован: 25 фев 2018, 22:41
- Откуда: Москва
id и num - разные типы данных.
Предполагаю, что надо использовать :tonum
Ну и обратно :toid
Предполагаю, что надо использовать :tonum
Ну и обратно :toid
Telegram: @thexvo
-
- Сообщения: 159
- Зарегистрирован: 29 апр 2021, 10:45
не работает. данные пропадают, получается тип nilПредполагаю, что надо использовать :tonum
[@MikroTik] > global test *0
[@MikroTik] > put [typeof $test]
id
[@MikroTik] > set $test [tonum $test]
[@MikroTik] > put [typeof $test]
nil
-
- Сообщения: 4204
- Зарегистрирован: 25 фев 2018, 22:41
- Откуда: Москва
-
- Сообщения: 159
- Зарегистрирован: 29 апр 2021, 10:45
Не понял а что тут полезно для моего случая? там обсуждают работу с неизменными .id, а мне как раз менять надо.
либо получить выражиние >.id либо .id=.nextid
и да, в документации я нашёл .nextid, но воспользоваться не смог.
-
- Сообщения: 4204
- Зарегистрирован: 25 фев 2018, 22:41
- Откуда: Москва
Там алгоритм перевода id в num: отрезать звездочку, перевести hex в dec.
Telegram: @thexvo
-
- Сообщения: 159
- Зарегистрирован: 29 апр 2021, 10:45
Я не нашёл там алгоритма. Там предложение отрезать звездочку и самому написать алгоритм перевода hex в num.
Самому алгоритм перевода писать трудновато.
Самому алгоритм перевода писать трудновато.
-
- Сообщения: 4204
- Зарегистрирован: 25 фев 2018, 22:41
- Откуда: Москва
Ну так это и есть алгоритм.
Перевод hex в dec намного более общая задача и наверняка где-то можно найти готовую реализацию.
Перевод hex в dec намного более общая задача и наверняка где-то можно найти готовую реализацию.
Telegram: @thexvo
- podarok66
- Модератор
- Сообщения: 4360
- Зарегистрирован: 11 фев 2012, 18:49
- Откуда: МО
D = (an × pn-1) + (an-1 × pn-2) + (an-2 × pn-3) +…,
Где,
D – это число в десятичной форме, которое мы ищем;
n – количество символов в двоичном числе;
a – число в двоичной форме на n-й позиции (т.е. первый символ, второй, и т.п.);
p – коэффициент, равный 2,8 или 16 в степени n (в зависимости от системы счисления)
Вот алгоритм.... А вот как это алгоритм реализовать на Микротике, я затрудняюсь ответить. Всё это не настолько востребовано, чтобы легко искалось и было бы давно облизано. Слишком специфичная задачка. Я, во всяком случае, не встречал подобного для Микротика.
Где,
D – это число в десятичной форме, которое мы ищем;
n – количество символов в двоичном числе;
a – число в двоичной форме на n-й позиции (т.е. первый символ, второй, и т.п.);
p – коэффициент, равный 2,8 или 16 в степени n (в зависимости от системы счисления)
Вот алгоритм.... А вот как это алгоритм реализовать на Микротике, я затрудняюсь ответить. Всё это не настолько востребовано, чтобы легко искалось и было бы давно облизано. Слишком специфичная задачка. Я, во всяком случае, не встречал подобного для Микротика.
Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
-
- Сообщения: 4204
- Зарегистрирован: 25 фев 2018, 22:41
- Откуда: Москва
Отсюда, в виде функции: https://github.com/eworm-de/routeros-sc ... -functions
И если я все правильно понял, IDшник можно скармливать как есть - все, что не попадает в символы Hex (в данном случае *) оно просто проигнорирует.
Код: Выделить всё
# convert from hex (string) to num
:set HexToNum do={
:local Input [ :tostr $1 ];
:local Hex "0123456789abcdef0123456789ABCDEF";
:local Multi 1;
:local Return 0;
:for I from=([ :len $Input ] - 1) to=0 do={
:set Return ($Return + (([ :find $Hex [ :pick $Input $I ] ] % 16) * $Multi));
:set Multi ($Multi * 16);
}
:return $Return;
}
Telegram: @thexvo