Страница 1 из 4

скриптинг (общее, вопросы 'обо' всем)

Добавлено: 31 авг 2014, 18:52
-user-
Подскажите пожалуйста, где почитать про команды, с которыми можно осуществить парсинг строки...

например:
на выходе этой "команды" /system clock get date получаются данные с знаками "/", а так как задача вставить дату в имя файла, то надо заменить "/", например, на это "."

зачитал до дыр мануал по скриптингу, не пойму, что от туда, мне нужно применить.... :-(




upd: нашел только одну "команду" , которой хоть как-то можно вывернуться - :pick <var> <start>[<end>] Что еще можно использовать?

Re: скриптинг, работа со строкой ?

Добавлено: 01 сен 2014, 08:39
podarok66
{:local filename ([:pick [/system clock get date] 4 6] . "." . [:pick [/system clock get date] 0 3] . "." . [:pick [/system clock get date] 7 11]);
:log info $filename; }
Вот так выглядит конструкция с точками, но учтите, это текстовая строка, а не дата. Для названий использовать можно, а вот далее в скриптинге в таком виде никак. Ну да Вам нужно именно для названия :-)

Re: скриптинг, работа со строкой ?

Добавлено: 01 сен 2014, 09:06
-user-
podarok66 писал(а):...
Ага, СПС :a_g_a:

А так вообще, всё, что нашел, чем можно работать со строкой, так только это:

Код: Выделить всё

:put [:len "length=8"]
:put [:pick "abcde" 1 3]
:put [:find "abc" "a" -1]

хоть и непривычно мало, но, в принципе, уже колдовать можно с разными степенями извращения :-)


Единственно вопрос мучает: количество символов в имени месяца (в дате), во всех случаях три, или бывает из 2 букв или может из 4-х? А то к МТ доступа пока нету, поколдовать с датами и просмотреть... сижу пока на http://demo2.mt.lv/webfig/# в терминале :-) ... а там дату не поменять, естественно, прав нету :ne_ne_ne:

Re: скриптинг, работа со строкой ?

Добавлено: 01 сен 2014, 09:40
vqd
Еще могу подсказку дать

Частенько когда писал скрипты то сталкивался с проблемой.
Например в условии надо сравнить ИП адрес
:if (10.0.0.1/24 = 10.0.0.1)

Часто в переменную писался именно адрес с маской и приходилось ее обрезать что бы получить именно ИП для условия.

Но как то раз когда я в очередной раз лазил по документации наткнулся на ~ )))
Теперь условия выглядят так
:if (10.0.0.1/24~ 10.0.0.1) и не надо маску обрезать )))

ПыСы: В микротике есть инструмент для работы с ИП адресами и масками и вышеприведенное просто пример для понимания

Re: скриптинг, работа со строкой ?

Добавлено: 01 сен 2014, 09:46
-user-
vqd писал(а):наткнулся на ~ )))
:if (10.0.0.1/24~ 10.0.0.1) и не надо маску обрезать )))


СПС, учту :a_g_a:

Re: скриптинг, работа со строкой ?

Добавлено: 01 сен 2014, 13:18
-user-
хммм...

немного странно выглядит осуществление:
:pick <var> <start>[<end>]


например:

Код: Выделить всё

put [:pick "01234" 1 4]  
123

:put [:pick "01234" 0 4]
0123

:put [:pick "01234" 0 5]
01234

учитывая, что символа в "строке" с позицией номер 5 - нету (отсчет начинается с 0 и последний символ в "строке" имеет место 4).., но для того чтобы вывести по последний знак в строке, нужно указать именно до символа с местом 5 :sh_ok: :-): которого просто не существует... Получается для позиции <start> используется одна логика для её определения, а для позиции <end> - другая :ne_vi_del:

Re: скриптинг, работа со строкой ?

Добавлено: 01 сен 2014, 13:38
-user-
что получилось:

Код: Выделить всё

{
:local BDOvarData
:local BDOvarTime

:local BDOvarNumDivider1
:local BDOvarNumDivider2

:local BDOvarNameFile
:local BDOvarInterimNameFile1
:local BDOvarInterimNameFile2
:local BDOvarLen

:set BDOvarData [/system clock get date]
:set BDOvarTime [/system clock get time]

:set BDOvarNumDivider1 [:find $BDOvarData "/" -1]
:set BDOvarNumDivider2 [:find $BDOvarData "/" $BDOvarNumDivider1]
:set BDOvarLen [len $BDOvarData]

:set BDOvarInterimNameFile1 ([:pick $BDOvarData 0 $BDOvarNumDivider1].".".[:pick $BDOvarData ($BDOvarNumDivider1+1) ($BDOvarNumDivider2)].".".[:pick $BDOvarData ($BDOvarNumDivider2+1) $BDOvarLen])

:set BDOvarInterimNameFile2 ([:pick $BDOvarTime 0 2].".".[:pick $BDOvarTime 3 5].".".[:pick $BDOvarTime 6 8])

:set BDOvarNameFile ($BDOvarInterimNameFile1."_".$BDOvarInterimNameFile2)

:put $BDOvarNameFile
}
sep.01.2014_13.24.40

или одной строкой:

Код: Выделить всё

[:local BDOvarData] [:local BDOvarTime] [:local BDOvarNumDivider1] [:local BDOvarNumDivider2] [:local BDOvarNameFile] [:local BDOvarInterimNameFile1] [:local BDOvarInterimNameFile2] [:local BDOvarLen] [:set BDOvarData [/system clock get date]] [:set BDOvarTime [/system clock get time]] [:set BDOvarNumDivider1 [:find $BDOvarData "/" -1]] [:set BDOvarNumDivider2 [:find $BDOvarData "/" $BDOvarNumDivider1]] [:set BDOvarLen [len $BDOvarData]] [:set BDOvarInterimNameFile1 ([:pick $BDOvarData 0 $BDOvarNumDivider1].".".[:pick $BDOvarData ($BDOvarNumDivider1+1) ($BDOvarNumDivider2)].".".[:pick $BDOvarData ($BDOvarNumDivider2+1) $BDOvarLen])] [:set BDOvarInterimNameFile2 ([:pick $BDOvarTime 0 2].".".[:pick $BDOvarTime 3 5].".".[:pick $BDOvarTime 6 8])] [:set BDOvarNameFile ($BDOvarInterimNameFile1."_".$BDOvarInterimNameFile2)] [put $BDOvarNameFile]


Всем спасибо за подсказки и наставления :a_g_a:

Re: скриптинг, работа со строкой ?

Добавлено: 01 сен 2014, 14:37
podarok66
Ну что же, поздравляю. Первый полноценный продукт :-):
Вы бы еще ; использовали на всякий случай. Это поможет, поверьте. Особенно когда станете разбирать код, который писали год назад...

Re: скриптинг, работа со строкой ?

Добавлено: 01 сен 2014, 14:44
Dragon_Knight
-user- писал(а):хммм...

немного странно выглядит осуществление:
:pick <var> <start>[<end>]


например:

Код: Выделить всё

put [:pick "01234" 1 4]  
123

:put [:pick "01234" 0 4]
0123

:put [:pick "01234" 0 5]
01234

учитывая, что символа в "строке" с позицией номер 5 - нету (отсчет начинается с 0 и последний символ в "строке" имеет место 4).., но для того чтобы вывести по последний знак в строке, нужно указать именно до символа с местом 5 :sh_ok: :-): которого просто не существует... Получается для позиции <start> используется одна логика для её определения, а для позиции <end> - другая :ne_vi_del:

Во всех языках программирования первое значение это номер символа, начиная от нуля, второе это кол-во символов, а отсчёт, согласно учебникам первого класса :-), начинается с единицы, так что всё правильно работает)

:put [:pick "01234" 0 5] - Выбрать пять знаков, начиная с элемента массива с индексом '0'.

Re: скриптинг, работа со строкой ?

Добавлено: 01 сен 2014, 15:05
-user-
Dragon_Knight писал(а)::put [:pick "01234" 0 5] - Выбрать пять знаков, начиная с элемента массива с индексом '0'.
:-):
Тоже была такая мысль, но это было бы верно, если бы это:

Код: Выделить всё

put [:pick "01234" 1 4]  
123
дало бы результатом: 1234, но результат то получается: 123, значит все таки не количество знаков подразумевается, а именно позиция, только немного в другой интерпритации (т.е. до этой позиции - не_включительно).... я не спорю и не переубеждаю.. просто, мне как нубу не привычно видеть такой "вариант" :du_ma_et:


podarok66 писал(а):Ну что же, поздравляю. Первый полноценный продукт :-):
Вы бы еще ; использовали на всякий случай. Это поможет, поверьте. Особенно когда станете разбирать код, который писали год назад...
благодАр :a_g_a: :smu:sche_nie: :-) Просто пока тренируюсь в настройке, приходиться часто делать бэкапы МТ, после каждой удачной настройки, и задолбался вручную набивать имена к бэкапам... хочу сделать, чтобы один тык в скрипт сохранял на флэшку сразу и бэкап и экспорт и экспорт по подразделам отдельно.... ....
Если честно, пока не понимаю, даже для чего ставятся : и ; , в мануале, написано, тоже, "нужно ставить", но с тем же двоеточием и без него работает как и в начале строки, так и в квадратных скобках.... по этому пока вообще не пойму, на что они влияют, буду стараться исправляться :hi_hi_hi:
хотелось бы увидеть пример, в котором без точек или точкиЗапятой, не сработает скрипт... (видать просто сложных еще не видел скриптов, где это может и правда имеет значение :smu:sche_nie: )