Страница 1 из 2
Работа с данным типа id (internal ID)
Добавлено: 28 июл 2021, 13:03
Lurker
Добрый день.
Хотел сделать
log find where .id>$i а оно не работает
log find where .id=$i а вот так работает
set $i ($i+1) если $i типа id тоже не работает.
Вопрос: как можно получить все логи с .id больше n?
Re: Работа с данным типа id (internal ID)
Добавлено: 28 июл 2021, 13:13
xvo
id и num - разные типы данных.
Предполагаю, что надо использовать :tonum
Ну и обратно :toid
Re: Работа с данным типа id (internal ID)
Добавлено: 28 июл 2021, 13:16
Lurker
Предполагаю, что надо использовать :tonum
не работает. данные пропадают, получается тип nil
[@MikroTik] > global test *0
[@MikroTik] > put [typeof $test]
id
[@MikroTik] > set $test [tonum $test]
[@MikroTik] > put [typeof $test]
nil
Re: Работа с данным типа id (internal ID)
Добавлено: 28 июл 2021, 13:19
xvo
Re: Работа с данным типа id (internal ID)
Добавлено: 28 июл 2021, 13:32
Lurker
Не понял а что тут полезно для моего случая? там обсуждают работу с неизменными .id, а мне как раз менять надо.
либо получить выражиние >.id либо .id=.nextid
и да, в документации я нашёл .nextid, но воспользоваться не смог.
Re: Работа с данным типа id (internal ID)
Добавлено: 28 июл 2021, 13:50
xvo
Там алгоритм перевода id в num: отрезать звездочку, перевести hex в dec.
Re: Работа с данным типа id (internal ID)
Добавлено: 28 июл 2021, 14:08
Lurker
Я не нашёл там алгоритма. Там предложение отрезать звездочку и самому написать алгоритм перевода hex в num.
Самому алгоритм перевода писать трудновато.
Re: Работа с данным типа id (internal ID)
Добавлено: 28 июл 2021, 14:55
xvo
Ну так это и есть алгоритм.
Перевод hex в dec намного более общая задача и наверняка где-то можно найти готовую реализацию.
Re: Работа с данным типа id (internal ID)
Добавлено: 28 июл 2021, 22:03
podarok66
D = (an × pn-1) + (an-1 × pn-2) + (an-2 × pn-3) +…,
Где,
D – это число в десятичной форме, которое мы ищем;
n – количество символов в двоичном числе;
a – число в двоичной форме на n-й позиции (т.е. первый символ, второй, и т.п.);
p – коэффициент, равный 2,8 или 16 в степени n (в зависимости от системы счисления)
Вот алгоритм.... А вот как это алгоритм реализовать на Микротике, я затрудняюсь ответить. Всё это не настолько востребовано, чтобы легко искалось и было бы давно облизано. Слишком специфичная задачка. Я, во всяком случае, не встречал подобного для Микротика.
Re: Работа с данным типа id (internal ID)
Добавлено: 29 июл 2021, 00:32
xvo
Отсюда, в виде функции:
https://github.com/eworm-de/routeros-sc ... -functions
Код: Выделить всё
# 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;
}
И если я все правильно понял, IDшник можно скармливать как есть - все, что не попадает в символы Hex (в данном случае *) оно просто проигнорирует.