Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • Changelogs
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Настройка
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    RouterOS
    Многомерные массивы

    Многомерные массивы

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Многомерные массивы, RouterOS
     
    skyhawk
    Guest
    #1
    0
    19.03.2016 17:29:00
    Интересно, можно ли создать простой многомерный фиксированный массив и обращаться к нему удобным способом… Что-то вроде этого:  
    local WANStatus (1,1,0; 1,2,0; 1,3,0; 1,4,0; 2,1,0; 2,2,0; 2,3,0; 2,4,0)  
    :put $WANStatus[1,1]
    :set {$WANStatus[1,1] → 3}

    Я как-то не очень понимаю, как RouterOS работает с массивами, а документация в этом плане довольно скудная. (Или мой кодовый скилл слишком слаб, чтобы нормально разобраться с тем, что там есть — тоже вероятно)  

    Если кто-то сможет привести синтаксически правильный пример того, что я хочу, буду очень признателен.
     
     
     
    PackElend
    Guest
    #2
    0
    08.05.2022 07:46:00
    Может ли find работать с матрицей? :put [ :find $a 9 -1 ] возвращает пустой результат.
     
     
     
    msatter
    Guest
    #3
    0
    08.05.2022 08:12:00
    Итак, какой урок из этого можно извлечь? Массив — это не строка. Тогда сделайте из него строку: :put [ :find [:tostr $a] 9 -1 ]
     
     
     
    PackElend
    Guest
    #4
    0
    08.05.2022 11:51:00
    https://wiki.mikrotik.com/wiki/Manual:Scripting говорит, что можно искать по массивам, спасибо за это, это поможет в «простых» случаях.

    :global UserDatabase [:toarray ""];

    # Ключом массива является имя пользователя.
    # Структура каждой записи пользователя следующая:
    # пароль | email | телефон | последний IP | что-то | что-то ещё |
    :set ($UserDatabase->"username1") {"supersecret";"username1@example.com";"+123456789";"0.0.0.0";0;0};
    :set ($UserDatabase->"username2") {"megasecret";"username2@example.com";"+987654321";"0.0.0.0";0;0};

    # Вывод конкретного свойства (столбца) данных для конкретного пользователя:
    :put ($UserDatabase->"username1"->0);

    Теперь хочу: найти индекс массива username2, извлечь этот массив username2 из массива UserDatabase по индексу. Сейчас я могу воспользоваться твоим подходом — проверить, существует ли массив username2, а если да, вызвать его по имени (именованный массив).
     
     
     
    rextended
    Guest
    #5
    0
    08.05.2022 12:35:00
    Помните, что каждый раз, когда вы добавляете элемент или создаёте массив, основные ключи сортируются...  
    :global UserDatabase [:toarray ""];
    :set ($UserDatabase->"username4") {"megasecret";"username4@example.com";"+987654321";"0.0.0.0";0;0};  
    :set ($UserDatabase->"username5") {"megasecret";"username5@example.com";"+987654321";"0.0.0.0";0;0};  
    :set ($UserDatabase->"username9") {"megasecret";"username9@example.com";"+987654321";"0.0.0.0";0;0};  
    :set ($UserDatabase->"username3") {"megasecret";"username3@example.com";"+987654321";"0.0.0.0";0;0};  
    :set ($UserDatabase->"username2") {"megasecret";"username2@example.com";"+987654321";"0.0.0.0";0;0};  
    :set ($UserDatabase->"username1") {"supersecret";"username1@example.com";"+123456789";"0.0.0.0";0;0};  

    :put $UserDatabase username1=supersecret; username1@example.com; +123456789; 0.0.0.0; 0; 0; username2=megasecret; username2@example.com; +987654321; 0.0.0.0; 0; 0; username3=megasecret; username3@example.com; +987654321; 0.0.0.0; 0; 0; username4=megasecret; username4@example.com; +987654321; 0.0.0.0; 0; 0; username5=megasecret; username5@example.com; +987654321; 0.0.0.0; 0; 0; username9=megasecret; username9@example.com; +987654321; 0.0.0.0; 0; 0  

    Я использую эту «особенность», чтобы сортировать списки...  

    А насчёт индекса... имя самого пользователя — это и есть индекс, числового значения нет.  

    :foreach index,content in=$UserDatabase do={ :put $index; :put $content }  

    username1  
    supersecret; username1@example.com; +123456789; 0.0.0.0; 0; 0  

    username2  
    megasecret; username2@example.com; +987654321; 0.0.0.0; 0; 0  

    username3  
    megasecret; username3@example.com; +987654321; 0.0.0.0; 0; 0  

    username4  
    megasecret; username4@example.com; +987654321; 0.0.0.0; 0; 0  

    username5  
    megasecret; username5@example.com; +987654321; 0.0.0.0; 0; 0  

    username9  
    megasecret; username9@example.com; +987654321; 0.0.0.0; 0; 0  

    Для поиска внутри массива (по части с username):  
    :global searcthis "username1"  
    :put [:typeof ($UserDatabase->$searcthis)] array

    :global searcthis "username30"  
    :put [:typeof ($UserDatabase->$searcthis)] nothing

    Если получилось nothing — значит такого индекса нет.  
    Если array (или любой другой тип переменной, хранящийся в массиве) — индекс существует (пусть даже и пустой).
     
     
     
    PackElend
    Guest
    #6
    0
    08.05.2022 13:17:00
    Большое спасибо!
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2025 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры