С Новым годом! Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
1 / 1 / 0
Регистрация: 29.05.2019
Сообщений: 55
1

Предыдущий элемент массива или найти значение

30.05.2019, 16:17. Показов 2041. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, уважаемые!
В продолжение моей последней темы Автоматизация IPerf
Возникла необходимость заносить в журнал только результаты тестов с низким значением скорости подключения.
У меня есть массив $Array содержащий:
------------------------------------------------------------
Client connecting to 192.168.22.201, TCP port 12344
TCP window size: 32.0 KByte
------------------------------------------------------------
[196] local 10.77.0.219 port 25027 connected with 192.168.22.201 port 12344
[ ID] Interval Transfer Bandwidth
[196] 0.0-10.0 sec 113 MBytes 94.3 Mbits/sec
Из него нужно взять значение 94.3 Mbits/sec сравнить его с эталоном и если не совпадает внести запить в лог.
Сейчас имею вот такой код, проблема в том, что при изменении адреса с 10.77.1.29 на 192.168.22.201, добавляется еще 1 символ, что приводит к сдвигу строк после команды $iPerfRes=$Array.Split(" "). Ну и соответственно в лог пишется 0
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
$ipList=@('10.77.1.29')#,'192.168.22.201','192.168.51.254')
$iPerf="C:\iperf\iperf2.exe" #создаем переменную
$ipList | %{
$Param="-c $_ -p 12344 -t 10 -w 32768" #создаем переменную с параметрами запуска iPerf
$Param = $Param.Split(" ") # не знаю, что это значит. где подсмотрел
$Array= & "$iPerf" $Param # создаем переменную, запускаем iPerf с параметрами, загружаем результат в переменную(массив строк)
$iPerfRes=$Array.Split(" ") #разбиваем массив на строки
$Speed=[int32]$iPerfRes[47] #преобразуем 47 строку в число
if ($Speed -lt "100") { # если число < 100 то записываем в лог
$datetime=Get-Date -UFormat "%d/%m/%Y %H:%M " 
Out-File -FilePath C:\iperf\test.log -InputObject `n$datetime, 'IP ',$_,' Speed ',$Speed -append -NoNewline #Дописываем в лог файл $date и строки массива.
}
}
Как мне выдернуть цифры перед Mbits/sec? Я пробовал через for, через foreach, через where. Найти Mbits/sec получается, а как указать предыдущий элемент массива в случае нахождения Mbits/sec не могу понять.
Такой способ вообще выдает ошибку, что не может сконвертировать
Cannot convert the "System.Object[]" value of type "System.Object[]" to type "System.Int32"
PowerShell
1
for ($i=0, $iPerfRes[$i] -eq "Mbits/sec", $i++) {$iPerfRes[$i-1]}
Научите, пожалуйста!

Добавлено через 32 минуты
Я попробовал через работу со строкой, но получил ту же самую проблему.
PowerShell
1
2
3
4
5
6
7
$str=$Array[6] # передаем строку из массива в обычную строку
$idexStr=$str.IndexOf("Mbits/sec") # находим индекс, номер позиции 
$idxA=$idexStr-5 # выставляем значение первого символа
$idxB=$idexStr-2 # выставляем значение последнего символа
$Speed=[system.String]::Join("", $str[$idxA..$idxB]) #убираем пробелы между символами 
$Speed=[int32]$Speed #преобразуем в инт 
$Speed #ура у нас есть цифра которую можно сравнивать с эталоном (100)
В итоге, если Mbits/sec сдвинулся, то все расчеты тоже двигаются.

Добавлено через 3 минуты
С другой стороны, это результат выдает программа а отсчет идет от искомой фразы, не должно там ничего сдвинуться

Но ведь должны быть более изящные решения!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.05.2019, 16:17
Ответы с готовыми решениями:

Найти серию наибольшей длины, в которой предыдущий элемент меньше или равен последующего
Дан массив вещественных чисел A, содержащий N элементов. Найти серию наибольшей длины, в которой...

Найти серию наибольшей длины, в которой предыдущий элемент меньше или равен последующего
Дан массив вещественных чисел A, содержащий N элементов. Найти серию наибольшей длины, в которой...

Найти максимальный элемент и показать предыдущий элемент в матрице
Дана матрица, нужно найти макс. елемент и и показать предыдущий елемент. как ето реализовать...

Удалить предыдущий элемент массива
Всем привет уже битых полтора часа не могу реализовать удаление предыдущего элемента массива. Суть...

4
419 / 179 / 27
Регистрация: 11.03.2018
Сообщений: 765
30.05.2019, 19:07 2
Цитата Сообщение от Asshaker Посмотреть сообщение
Но ведь должны быть более изящные решения!
Если не обращать внимание на существование https://docs.microsoft.com/en-... s-pal-tool, то нужен собственный полноценный разбор строк и сохранение результата разбора в собственном об'екте, точнее, в массиве об'ектов.
0
210 / 59 / 26
Регистрация: 16.06.2016
Сообщений: 193
30.05.2019, 20:33 3
Лучший ответ Сообщение было отмечено Asshaker как решение

Решение

Asshaker, Регуляркой можно вытянуть.

PowerShell
1
[regex]::matches($Array[6],"(\d+\.\d+)\sMbits/sec$").groups[1].value
Удачи!
1
1 / 1 / 0
Регистрация: 29.05.2019
Сообщений: 55
31.05.2019, 09:10  [ТС] 4
Цитата Сообщение от AAT666 Посмотреть сообщение
Asshaker, Регуляркой можно вытянуть.

Удачи!
А не могли бы вы объяснить, что тут происходит?

PowerShell
1
$speed=[regex]::matches($Array[6],"(\d+\.\d+)\sMbits/sec$").groups[1].value
Я так понял, [regex]::matches это и есть регулярка, которая ищет совпадение в Array видимо целое число, точку, целое число, пробел, Mbits/sec, а вот что происходит дальше с символа $?
Я нашел материал по регуляркам там используется только форма
PowerShell
1
Get-Process | where {$_.name -match "sy[ns]"}
0
210 / 59 / 26
Регистрация: 16.06.2016
Сообщений: 193
31.05.2019, 10:53 5
Asshaker,

[regex] это конструкция из .NET

Примеров в сети много. Например, здесь ---> Регулярные выражения в Windows PowerShell

По самим регулярным выражениям, тоже все есть в сети.

Цитата Сообщение от Asshaker Посмотреть сообщение
которая ищет совпадение в Array видимо целое число, точку, целое число, пробел, Mbits/sec, а вот что происходит дальше с символа $?
Да, так и есть. А дальше [regex]::matches возвращает объект в котором есть Groups[] и у него value.

Если так интересно, то можно просто в PS запустить:

PowerShell
1
[regex]::matches("[196] 0.0-10.0 sec 113 MBytes 94.3 Mbits/sec","(\d+\.\d+)\sMbits/sec$")
И будет видно, что возвращается и изучать.
1
31.05.2019, 10:53
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.05.2019, 10:53
Помогаю со студенческими работами здесь

Проверить, больше ли каждый последующий элемент массива, чем предыдущий
Подскажите пожалуйста, уперлась в проблему понимания массивов. Точнее что такое массив я, вроде...

Найти среднее значение элементов массива, разделить каждый элемент на это значение
Вводится произвольный квадратный массив. Нужно найти среднее значение элементов этого массива,...

Как сделать чтобы при повторном нажатии на элемент из массива его предыдущий цвет возвращался?
Добрый день. Мне нужно повторно поменять цвет эллипса. Как сделать .чтобы при повторном нажатие...

В элемент Lebel или Edit записывается значение из массива слов
Есть массив слов(предложений) из него в эллемент label (edit) записывается значение


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­­­­­­­­­­­­­х­р­о­н­­н­­­ы­­й счётчик с управляющим сигналом зад
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru