Форум программистов, компьютерный форум, киберфорум
Mikrotik
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/49: Рейтинг темы: голосов - 49, средняя оценка - 5.00
NoNaMe
Модератор
Эксперт по компьютерным сетям
1054 / 459 / 85
Регистрация: 10.06.2009
Сообщений: 1,956
Завершенные тесты: 1
1

Полезные приёмы при написании скриптов

25.01.2017, 17:01. Просмотров 9780. Ответов 12

Очень часто когда мы пишем скрипты нам необходима отладочная информация.
Иногда мы выполняем скрипт с консоли и хотим видеть что он выполнил. По этому кроме логирования очень хочется видеть и на консоле некоторые результаты. Для этого я сделал небольшой скриптик.
Если LogDisabled = 1 То грабим в консоль. Иначе вывод в лог.
Windows Batch file
1
2
3
4
5
6
7
:local LogDisabled 0;
:local ENDS "THE  END  IS  COMING!!!"
:if ( $LogDisabled = 1) do={
    :put $ENDS
} else={
    log info message="$ENDS"
}
Конструкции данного типа бывают очень полезны. Например у ISP падает сервер где-то далеко. Пинги есть а интернета нету. А ip его известен, то данная конструкция меня неоднократно спасала.
Windows Batch file
1
2
3
4
5
do {
    :resolve isp-h1.local
} on-error={
    log warning ("Error isp-h1.local not resolve")
}
Продолжим:
А что если переменная ещё не имеет значения.
Windows Batch file
1
2
3
4
5
:local glnothing;
:if ([:typeof $glnothing] = "nothing") do={
    :put message=[:typeof $glnothing]
    log info message=[:typeof $glnothing]
}
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#Как только мы применим значение, то наша переменная получит тип:
# str
:local glnothing ""
# num
:local glnothing 0
# array
:global glnothing [:toarray value=""]
 
# bool А тут всё интересней!!!
# Вернёт true
:global glnothing [:tobool value=yes]
# вернёт false
:global glnothing [:tobool value=no]
# вернёт nil
:global glnothing [:tobool value=0]
 
# А как нам удалить переменную glnothing
# Легко!
:global glnothing (a)
#Теперь мы можем создать непроинициализированную переменую снова
:global glnothing ;
# nothing Теперь наше значение проинициализировано снова, но неимеет значения и типа.
Есть ещё интересный момент с Результатом пинга.
Windows Batch file
1
:global PingResult [/ping 8.8.8.8 count=4]
Если все 4-е запроса вернулись, то в PingResult будет значение 4, если 3 то 3, если 2 то 2, и.т.д.
1
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2017, 17:01
Ответы с готовыми решениями:

HELP при написании скрипитов
Таблица, представляющая схему данных и небольшая легенда, в которой будет описаны данные, а также...

Приёмы работы с zexmlss
Нужно выводить отчёт из БД в таблицу, в которой есть объединённые ячейки, форматирование, перенос...

Приёмы адаптивной вёрстки
Здравствуйте! Мне необходимо изменить ширину сайта в зависимости от разрешения монитора. Много...

Ошибка при написании программы
Добрый день! у меня вопрос по поводу ошибки при написании программного кода. Опыта в написании...

12
NoNaMe
Модератор
Эксперт по компьютерным сетям
1054 / 459 / 85
Регистрация: 10.06.2009
Сообщений: 1,956
Завершенные тесты: 1
25.01.2017, 17:48  [ТС] 2
Отличный пример с чего начать. Написать Дефолтную конфигурацию на скриптах.
Ниже приведён дефолтный конфиг от 6.38.1 во волжении.
0
Вложения
Тип файла: zip RouterOS-def-config.rsc.zip (2.1 Кб, 10 просмотров)
NoNaMe
Модератор
Эксперт по компьютерным сетям
1054 / 459 / 85
Регистрация: 10.06.2009
Сообщений: 1,956
Завершенные тесты: 1
26.01.2017, 01:51  [ТС] 3
Создание файла в Mikrotik со своим расширением:
Windows Batch file
1
/tool fetch address=XX.XX.XX src-path=0.rsc user=admin mode=ftp password=admin dst-path=0.txt
Уведомления о Логоне пользователей на e-Mail.
Windows Batch file
1
2
3
4
5
/system logging action
set 0 memory-lines=100
set 3 email-start-tls=yes email-to=youre @mail.to target=email
/system logging
add topics=account action=remote
Скрипт проверки реального внешнего ip с сайта checkip.dyndns.org
Windows Batch file
1
2
3
4
5
6
7
8
9
# get the current IP address from the internet (in case of double-nat)
/tool fetch mode=http address="checkip.dyndns.org" src-path="/" dst-path="/dyndns.checkip.html"
:local result [/file get dyndns.checkip.html contents]
# parse the current IP result
:local resultLen [:len $result]
:local startLoc [:find $result ": " -1]
:set startLoc ($startLoc + 2)
:local endLoc [:find $result "</body>" -1]
:global currentIP [:pick $result $startLoc $endLoc]
Уведомляем об обновлениях RouterOS
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# Check Version is already update?
# Global Variable
:local channel bugfix
:local mail youre @mail.to
#:local phone "Youre Phone nomber with +"
:if ( [system package update get channel] != "channel" ) do {
    /system package update set channel=$channel
}
:if ( /system package update get status]  = "System is already up to date" )  do={
    quit
}
#"New version is available" ???
:if ( /system package update get status]  != "Downloaded, please reboot router to upgrade it" )  do={
    /system package update check-for-updates
    :delay 3
    # Local Variable
    :local newver [/system package update get latest-version]
    :local oldver [/system package update get installed-version]
    :if ( $oldver != $newver ) do={
        /system package update download
        :delay 20
        /tool fetch url=("http://download2.mikrotik.com/routeros/" . $newver . "/CHANGELOG") dst-path=($newver . ".change.log")
        /tool e-mail send to="$mail" subject=("New RouterOS version " . $newver . "is available!") body="" file=($newver . ".change.log")
        /tool sms send usb1 channel=2 "$phone" message=("New RouterOS version " . $newver . "is available!")
        :delay 5
        /file remove [find name~($newver . ".change.log")]  
    }
}
Формируем Адрес Листы по доменным именам:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# Check Version is already update?
# Global Variable
:local channel bugfix
:local mail youre @mail.to
:local phone "Youre Phone nomber with +"
:if ( [system package update get channel] != "channel" ) do {
    /system package update set channel=$channel
}
:if ( [/system package update get status]  = "System is already up to date" )  do={
    quit
}
#"New version is available" ???
:if ( [/system package update get status]  != "Downloaded, please reboot router to upgrade it" )  do={
    /system package update check-for-updates
    :delay 3
    # Local Variable
    :local newver [/system package update get latest-version]
    :local oldver [/system package update get installed-version]
    :if ( $oldver != $newver ) do={
        /system package update download
        :delay 20
        /tool fetch url=("http://download2.mikrotik.com/routeros/" . $newver . "/CHANGELOG") dst-path=($newver . ".change.log")
        :delay 5
        /tool e-mail send to="$mail" subject=("New RouterOS version " . $newver . "is available!") body="" file=($newver . ".change.log")
        /tool sms send usb1 channel=2 "$phone" message=("New RouterOS version " . $newver . "is available!")
        :delay 5
        /file remove [find name~($newver . ".change.log")]  
    }
}
Для начального этапа хватит с лихвой. Дальше больше! Пишем скрипты для: Радиуса, Авторизаций по MAC, ХотСпотов.
По данной тематике не так много статей можно найти. Но всё в ваших руках.

Если вы готовы работать дальше, то у вас возникает вопрос. А возможно-ли сграбить нажимаемую клавишу с терминала.
Естественно можно, и в некоторых случаях нужно!
В данном случае мы получаем код нажатой клавиши.
Windows Batch file
1
:local key ([:terminal inkey])
Что-бы сильно не напрягать вас могу сказать что клавиша 0=48 1=49 2=50 3=51 ... и.т.д.
По этому большинство программистов так любит цифры в выборе. Запись можно сократить.
Windows Batch file
1
:local key ([:terminal inkey] - 48)
2
NoNaMe
Модератор
Эксперт по компьютерным сетям
1054 / 459 / 85
Регистрация: 10.06.2009
Сообщений: 1,956
Завершенные тесты: 1
14.03.2017, 00:13  [ТС] 4
Формируем бекапы UserManager и отправляем их на почту.
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
:local mail youre @mail.to
:local identity [/system identity get name]
:local date [/system clock get date]
:local time [/system clock get time]
:local mouth {"jan"="01";"feb"="02";"mar"="03";"apr"="04";"may"="05";"jun"="06";"jul"="07";"aug"="08";"sep"="09";"oct"=10;"nov"="11";"dec"="12"}
:local FileName ([:pick $date 7 11] . ($mouth -> [:pick $date 0 3]) . [:pick $date 4 6] . "-" . [:pick $time 0 2] . [:pick $time 3 5])
:local sqldb ("$identity_" . "UserMan_db_" . "$FileName")
:local logsqldb ("$identity_" . "UserMan_dblog_" . "$FileName")
/tool user-manager database save name=(sqldb)
/tool user-manager database save-logs name=(logsqldb)
:delay 5
/tool e-mail send to="$mail" subject=BackupCopy body=$FileName file=($sqldb . ".umb")
/tool e-mail send to="$mail" subject=BackupCopy body=$FileName file=($logsqldb . ".umb")
:delay 5
/file remove [find name~$sqldb]
/file remove [find name~$logsqldb]
0
romsan
Эксперт по компьютерным сетям
2792 / 1522 / 326
Регистрация: 17.10.2015
Сообщений: 6,653
05.05.2017, 21:21 5
Цитата Сообщение от NoNaMe Посмотреть сообщение
Формируем Адрес Листы по доменным именам:
а хде код?
0
NoNaMe
Модератор
Эксперт по компьютерным сетям
1054 / 459 / 85
Регистрация: 10.06.2009
Сообщений: 1,956
Завершенные тесты: 1
26.08.2017, 18:03  [ТС] 6
Новые дефолтные конфиги от 6.40.2
Можем обратить внимание на более расширенный синтаксис.
0
Вложения
Тип файла: zip defconf.rsc.zip (433 байт, 6 просмотров)
Тип файла: zip defconf-caps.rsc.zip (1.1 Кб, 4 просмотров)
Тип файла: zip get-custom-defconf.rsc.zip (9.2 Кб, 7 просмотров)
NoNaMe
Модератор
Эксперт по компьютерным сетям
1054 / 459 / 85
Регистрация: 10.06.2009
Сообщений: 1,956
Завершенные тесты: 1
26.10.2017, 16:40  [ТС] 7
Готовый скрипт. Берёт из ната записи UPNP и маркирует эти соединения в Мангле по приложению. Для дальнейшей приоритезации.
1
Вложения
Тип файла: zip upnpmangle.zip (560 байт, 2 просмотров)
NoNaMe
Модератор
Эксперт по компьютерным сетям
1054 / 459 / 85
Регистрация: 10.06.2009
Сообщений: 1,956
Завершенные тесты: 1
26.10.2017, 17:24  [ТС] 8
Верхнее вложение содержит заранее подготовленные ошибки)
0
Вложения
Тип файла: zip upnpmangle.zip (599 байт, 2 просмотров)
NoNaMe
Модератор
Эксперт по компьютерным сетям
1054 / 459 / 85
Регистрация: 10.06.2009
Сообщений: 1,956
Завершенные тесты: 1
21.11.2017, 21:47  [ТС] 9
Скрипт проверки реального внешнего ip с сайта myip.ru
Bash
1
2
3
4
5
6
7
8
9
# get the current IP address from the internet (in case of double-nat)
/tool fetch mode=http address="myip.ru" src-path="/index_small.php" dst-path="/myip.html"
:local result [/file get myip.html contents]
# parse the current IP result
:local resultLen [:len $result]
:local startLoc [:find $result "<tr><td>"]
:set startLoc ($startLoc + 8)
:local endLoc [:find $result "</td></tr>\n"]
:global currentIP [:pick $result $startLoc $endLoc]
Добавлено через 5 часов 11 минут
Скрипт переподключения pppoe сессии при получении натираванного адреса.
Bash
1
2
3
4
5
6
:local interface ether1-pppoe
:local interfaceip [/ip address get value-name=address number=[find interface=$interface]]
:if ($interfaceip in 100.64.0.0/10) do={
/interface pppoe-client disable $interface
:delay 10
/interface pppoe-client enable $interface
Добавлено через 18 минут
UPD
Код
:local interface ether1-pppoe
:local SASip [:toarray "100.64.0.0/10, 10.0.0.0/8, 127.0.0.0/8, 192.168.0.0/16"]
:local interfaceip [/ip address get value-name=address number=[find interface=$interface]]
:foreach i in=$SASip do={
  :if ($interfaceip in $i) do={
    /interface pppoe-client disable $interface
    :delay 10
    /interface pppoe-client enable $interface
  }
}
0
NoNaMe
Модератор
Эксперт по компьютерным сетям
1054 / 459 / 85
Регистрация: 10.06.2009
Сообщений: 1,956
Завершенные тесты: 1
03.07.2018, 22:38  [ТС] 10
Скрипт форматирования ДатыВремени и дополнительных Строк внутри.
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# Usage: [$fdate "Today Year=" !!YY " Month=" !!MM  " Day=" !!DD]
# As example: [put [$fdate "Today Year=" !!YY " Month=" !!MM  " Day=" !!DD]]
global fdate do={
local argc {$1;$2;$3;$4;$5;$6;$7;$8;$9;$10;$11;$12;$13;$14;$15;$16;$17;$18;$19;$20}
local date [/system clock get date]
local time [/system clock get time]
local mouth {"jan"="01";"feb"="02";"mar"="03";"apr"="04";"may"="05";"jun"="06";"jul"="07";"aug"="08";"sep"="09";"oct"=10;"nov"="11";"dec"="12"}
local string
   for i from=0 to=[len $argc] do={
      if ([typeof (argc -> i)] != "nothing") do={
         if (($argc -> $i) = "!!YY") do={
         set string ($string . [pick $date 7 11])
         }
         if (($argc -> $i) = "!!MM") do={
            set string ($string . ($mouth -> [pick $date 0 3]))
         }
         if (($argc -> $i) = "!!DD") do={
            set string ($string . [pick $date 4 6])
         }
         if (($argc -> $i) = "!!hh") do={
            set string ($string . [pick $time 0 2])
         }
         if (($argc -> $i) = "!!mm") do={
            set string ($string . [pick $time 3 5])
         }
         if (($argc -> $i) = "!!ss") do={
            set string ($string . [pick $time 6 8])
         }
         if ([pick ($argc -> $i) 0 2] != "!!") do={
            set string ($string . ($argc -> $i))
         }
      } else={
         return $string;
      }
   }
}
Добавлено через 22 часа 49 минут
Доработал скрипт
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# Usage: [$fdate "Today Year=" !!YY " Month=" !!MM  " Day=" !!DD]
# As example: [put [$fdate "Today Year=" !!YY " Month=" !!MM  " Day=" !!DD]]
###TODO###
#Add day of the week?
global fdate do={
local argv {$1;$2;$3;$4;$5;$6;$7;$8;$9;$10;$11;$12;$13;$14;$15;$16;$17;$18;$19;$20;$21;$22;$23;$24;$25;$26;$27;$28;$29;$30;$31;$32;$33;$34;$35;$36;$37;$38;$39;$40;$41;$42;$43;$44;$45;$46;$47;$48;$49;$50;$51;$52;$53;$54;$55;$56;$57;$58;$59;$60;$61;$62;$63;$64;$65;$66;$67;$68;$69;$70;$71;$72;$73;$74;$75;$76;$77;$78;$79;$80;$81;$82;$83;$84;$85;$86;$87;$88;$89;$90;$91;$92;$93;$94;$95;$96;$97;$98;$99;$100;$101;$102;$103;$104;$105;$106;$107;$108;$109;$110;$111;$112;$113;$114;$115;$116;$117;$118;$119;$120;$121;$122;$123;$124;$125;$126;$127;$128}
local argc 0;
while ([typeof (argv -> argc)] != "nothing") do={
   set argc ($argc + 1)
}
local date [/system clock get date]
local time [/system clock get time]
local mouth {"jan"="01";"feb"="02";"mar"="03";"apr"="04";"may"="05";"jun"="06";"jul"="07";"aug"="08";"sep"="09";"oct"=10;"nov"="11";"dec"="12"}
local string ;
for i from=0 to=$argc do={
   if ([pick ($argv -> $i)] = "!") do={ 
      if (($argv -> $i) = "!Y") do={
         set string ($string . [pick $date 7 11])
      }
      if (($argv -> $i) = "!YY") do={
         set string ($string . [pick $date 9 11])
      }
      if (($argv -> $i) = "!M") do={
         set string ($string . ($mouth -> [pick $date 0 3]))
      }
      if (($argv -> $i) = "!MM") do={
         set string ($string . [pick $date 0 3])
      }
      if (($argv -> $i) = "!D") do={
         set string ($string . [pick $date 4 6])
      }
      if (($argv -> $i) = "!h") do={
         set string ($string . [pick $time 0 2])
      }
      if (($argv -> $i) = "!m") do={
         set string ($string . [pick $time 3 5])
      }
      if (($argv -> $i) = "!s") do={
         set string ($string . [pick $time 6 8])
      }
   } else={
      set string ($string . ($argv -> $i))
   }
}
return $string;
# fdate end
}
Доработал скрипт.

Добавлено через 38 минут
Калькулятор дней недели. Определяем дату N дней в будущем или прошлом.
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# Usage: [$datef 365]
# As example: [put [$datef -365]
###TODO###
#Add day manth and year calculation.
global datef do={
local date [/system clock get date]
local days $1
local mdays {31;28;31;30;31;30;31;31;30;31;30;31}
local months {"jan"=1;"feb"=2;"mar"=3;"apr"=4;"may"=5;"jun"=6;"jul"=7;"aug"=8;"sep"=9;"oct"=10;"nov"=11;"dec"=12}
local monthr {"jan";"feb";"mar";"apr";"may";"jun";"jul";"aug";"sep";"oct";"nov";"dec"}
local dd [tonum [pick $date 4 6]]
local yy [tonum [pick $date 7 11]]
local month [pick $date 0 3]
local mm ($months->$month)
set dd ($dd+$days)
local dm [pick $mdays ($mm-1)]
if ($mm=2 && $yy&3=0) do={ set dm 29 }
if ($dd<1) do={
   while ($dd<1) do={
      set dd ($dd+$dm)
      set mm ($mm-1)
      if ($mm<0) do={
         set mm 12
         set yy ($yy-1)
      }
      set dm [pick $mdays ($mm-1)]
      if ($mm=2 && $yy&3=0 ) do={ set dm 29 }
   }
} else={
   while ($dd>$dm) do={
   set dd ($dd-$dm)
   set mm ($mm+1)
   if ($mm>12) do={
   set mm 1
   set yy ($yy+1)
   }
   set dm [pick $mdays ($mm-1)]
   if ($mm=2 && $yy&3=0 ) do={ set dm 29 }
   }
}
local res "$[pick $monthr ($mm-1)]/"
if ($dd<10) do={ set res ($res."0") }
set $res "$res$dd/$yy"
return $res
}
Добавлено через 2 часа 29 минут
Удаляем сессии из UserManager старше 3-ех лет:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
# Usage: [$umros] // remove session 3 years old
###TODO###
#Stop bad judies
global umros do={
local year 3
local date [/system clock get date]
local yy [tonum [pick $date 7 11]]
local mm [pick $date 0 3]
set yy ($yy -year)
local var ($mm . "/../" . $yy)
/tool user-manager session remove [find till-time~($var)]
#end
}
Добавлено через 9 минут
Удаляем сессии которые меньше чем 3сек, что-бы не захламлять БД
Bash
1
/tool user-manager session remove [find uptime<=3]
1
NoNaMe
Модератор
Эксперт по компьютерным сетям
1054 / 459 / 85
Регистрация: 10.06.2009
Сообщений: 1,956
Завершенные тесты: 1
12.12.2018, 17:02  [ТС] 11
Будим компы по ip или hostname. Не ищем интерфейс и MAC, для пробуждения компьютера. Думаю добавить ещё проверку на нахождение интерфейса. Если не находим, то пробегаемся по всем.
Для этого в dhcp-server lease должны у машины которую будем будить статическая запись.
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
# Usage: [$wakeup <ip>] or [$wakeup <hostname>]
global wakeup do={
local mac ""
local interface ""
    if ([typeof [toip $1]]="nil") do={
        set mac [/ip dhcp-server lease get value-name=mac-addres [find host-name=$1]]
        set interface [/ip dhcp-server get value-name=interface [find name=[/ip dhcp-server lease get value-name=server  [find host-name=$1]]]]
    } else={
        set mac [/ip dhcp-server lease get value-name=mac [find address=$1]]
        set interface [/ip dhcp-server get value-name=interface [find name=[/ip dhcp-server lease get value-name=server  [find address=$1]]]]
    }
/tool wol mac=$mac interface=$interface
}
Добавлено через 33 минуты
С проверкой интерфейса:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# Usage: [$wakeup <ip>] or [$wakeup <hostname>]
global wakeup do={
local mac ""
local interface ""
    if ([typeof [toip $1]]="nil") do={
        set mac [/ip dhcp-server lease get value-name=mac-addres [find host-name=$1]]
        set interface [/ip dhcp-server get value-name=interface [find name=[/ip dhcp-server lease get value-name=server  [find host-name=$1]]]]
    } else={
        set mac [/ip dhcp-server lease get value-name=mac [find address=$1]]
        set interface [/ip dhcp-server get value-name=interface [find name=[/ip dhcp-server lease get value-name=server  [find address=$1]]]]
    }
    if ($interface="no such item") do={
        local i 0
        local ifn [/interface find]
        while ([typeof ($ifn->$i)] != "nothing") do={
            put [/interface get value-name=name ($ifn->$i)]
            set i ($i+1)
        }
    } else={
        /tool wol mac=$mac interface=$interface
    }
}
0
NoNaMe
Модератор
Эксперт по компьютерным сетям
1054 / 459 / 85
Регистрация: 10.06.2009
Сообщений: 1,956
Завершенные тесты: 1
21.03.2019, 21:51  [ТС] 12
Пишем алиаки для стандартных действий:
Bash
1
global tracert do={/tool traceroute $1}
0
NoNaMe
Модератор
Эксперт по компьютерным сетям
1054 / 459 / 85
Регистрация: 10.06.2009
Сообщений: 1,956
Завершенные тесты: 1
19.07.2019, 16:08  [ТС] 13
Передаём именованные переменные в скрипт.
Bash
1
2
3
4
5
6
global foo do={
global vara
global varb
put $vara
put $varb
}
Дальше с консоли:
Bash
1
$foo vara="stringa" varb="stringb"
0
19.07.2019, 16:08
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.07.2019, 16:08

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Трудности при написании программы
Здравствуйте. Разбирал циклы for, while и do while, принцип их работы я понял, но меня поставила в...

Ошибка при написании уравнения
Дано уравнение . Я его написал, но почему то ответ выдается такой y=Nan а при значении х=2...

Предупреждения при написании кода.
На каждой строке типа: comand.Parameters.Add(&quot;@Assmnt_ID&quot;, Assmnt_ID); студия пишет...

Какая разница при написании i и 1i
Добрый вечер! Вопрос такой, какая разница при написании i и 1i в MATLAB. Может какие-то отличия...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.