Всем привет, я пытаюсь адаптировать скрипт одного из пользователей этого форума () под новую версию. У меня RouterOS v6.38.5 на Winbox v3.11 на роутере hEX. Поэтому я пытаюсь использовать tx-bytes и rx-bytes, но в ответ получаю значение с пробелами из RouterOS. Я не могу использовать это значение: когда хочу их сложить, получается 41 045 997;41 045 997. Вот код, который хочу использовать:
:local counterrx [/interface ethernet get eth2-master rx-bytes]
:put "counterrx:"
:put $counterrx
:local countertx [/interface ethernet get eth2-master tx-bytes]
:put "countertx:"
:put $countertx
:tonum $counterrx
:tonum $countertx
set $counter ( $counterrx + $countertx )
:put "counter:"
:put $counter
Мой вывод:
counterrx: 41 278 785
countertx: 391 157 213
counter: 41 278 785;391 157 213
Я ожидаю получить числа (целые) вроде 41278785 (без пробелов) и 391157213 для rx-bytes ($counterrx) и tx-bytes ($countertx).
Я пытался отладить так:
‘tonum’ не меняет значение. Я написал скрипт для удаления пробелов, но скрипт не находит пробелов в числах $counterrx и $countertx. Также показывает, что длина числа равна 1???
Вот мой скрипт:
:local counterrx [/interface ethernet get eth2-master rx-bytes]
:put "counterrx:"
:put $counterrx
:local Replacechar do={
:for i from=0 to=([:len $1] - 1) do={
:local char [:pick $1 $i]
:if ($char = $2) do={
:set $char $3
}
:set $output ($output . $char)
}
:return $output
}
:local counterrx2 [ $Replacechar $counterrx " " "" ]
:put $counterrx2
:put "counterrx length:"
:put [ len $counterrx ]
:local blub "blubblub"
:put "blubblub length:"
:put [ len $blub ]
Вывод:
counterrx: 41 946 248 41 946 248
counterrx length: 1
blubblub length: 8
В конце я проверил, не является ли $counterrx массивом, и посчитал элементы:
:local counterrx [/interface ethernet get eth2-master rx-bytes]
:foreach nr,xxx in={$counterrx} do={
:put ("$nr=$xxx")
}
Вывод:
0=42 147 960
Только первое число учитывается?
Я пробовал найти пробелы и удалить их вот так:
:local posspace [ :find $counterrx " " -1]
:put $posspace
:local counterrx2 [:pick $counterrx 0 $posspace]
:put $counterrx2
Но это тоже не сработало. posspace пустой, и counterrx2 не изменяется вообще. Я также пытался искать запятую, поведение то же.
Выяснил, что значение на самом деле правильное (смотрел статистику в списке интерфейсов в Winbox).
Кто-нибудь может помочь? Большое спасибо, Maikel
P.S. Я почти полностью переписал пост, чтобы было понятнее, надеюсь, это поможет понять ситуацию и увидеть, что я старался. Также скажу, что уже четыре часа изучаю язык программирования RouterOS (C?).
:local counterrx [/interface ethernet get eth2-master rx-bytes]
:put "counterrx:"
:put $counterrx
:local countertx [/interface ethernet get eth2-master tx-bytes]
:put "countertx:"
:put $countertx
:tonum $counterrx
:tonum $countertx
set $counter ( $counterrx + $countertx )
:put "counter:"
:put $counter
Мой вывод:
counterrx: 41 278 785
countertx: 391 157 213
counter: 41 278 785;391 157 213
Я ожидаю получить числа (целые) вроде 41278785 (без пробелов) и 391157213 для rx-bytes ($counterrx) и tx-bytes ($countertx).
Я пытался отладить так:
‘tonum’ не меняет значение. Я написал скрипт для удаления пробелов, но скрипт не находит пробелов в числах $counterrx и $countertx. Также показывает, что длина числа равна 1???
Вот мой скрипт:
:local counterrx [/interface ethernet get eth2-master rx-bytes]
:put "counterrx:"
:put $counterrx
:local Replacechar do={
:for i from=0 to=([:len $1] - 1) do={
:local char [:pick $1 $i]
:if ($char = $2) do={
:set $char $3
}
:set $output ($output . $char)
}
:return $output
}
:local counterrx2 [ $Replacechar $counterrx " " "" ]
:put $counterrx2
:put "counterrx length:"
:put [ len $counterrx ]
:local blub "blubblub"
:put "blubblub length:"
:put [ len $blub ]
Вывод:
counterrx: 41 946 248 41 946 248
counterrx length: 1
blubblub length: 8
В конце я проверил, не является ли $counterrx массивом, и посчитал элементы:
:local counterrx [/interface ethernet get eth2-master rx-bytes]
:foreach nr,xxx in={$counterrx} do={
:put ("$nr=$xxx")
}
Вывод:
0=42 147 960
Только первое число учитывается?
Я пробовал найти пробелы и удалить их вот так:
:local posspace [ :find $counterrx " " -1]
:put $posspace
:local counterrx2 [:pick $counterrx 0 $posspace]
:put $counterrx2
Но это тоже не сработало. posspace пустой, и counterrx2 не изменяется вообще. Я также пытался искать запятую, поведение то же.
Выяснил, что значение на самом деле правильное (смотрел статистику в списке интерфейсов в Winbox).
Кто-нибудь может помочь? Большое спасибо, Maikel
P.S. Я почти полностью переписал пост, чтобы было понятнее, надеюсь, это поможет понять ситуацию и увидеть, что я старался. Также скажу, что уже четыре часа изучаю язык программирования RouterOS (C?).
