![]() |
Правильно распарсить лог FFprobe
Добрый день всем!
Возникла небольшая проблема с рег. выражением. По ссылкам посредством FFprobe получаю данные о видеопотоках. Лог такого содержания: Код:
ffprobe started on 2019-11-16 at 21:38:15 Написал код: Код:
(Get-Content .\log\ffprobe-20191116-213815.log -Encoding utf8 ` Подскажите, пожалуйста, где ошибка в моём коде ? Или может по-другому можно решить эту задачу ? |
Код:
$log = (gc .\log\ffprobe-20191116-213815.log -Encoding utf8 | |
DJ Mogarych, спасибо большое!
Ваш код с моим примером работает. Но в примере привёл только часть лога, в реальности значений "from" и "service_name" значительно больше, до 255 По Вашему коду берутся только первые значения. Нужно как-то цикл организовать, но как, не пойму... |
Uragan66, а откуда бы он мог понять, сколько там у Вас этих значений «в реальности»? Регулярные выражения вообще очень критичны к конкретному содержанию.
Можете упаковать весь лог в архив, каковой приложить к сообщению, або выложить на вменяемый обменник/облако. |
Вложений: 1
Iska, да, моя вина, как-то не подумал об этом
прикрепил логи, alllog.log - реальный выход ffprobe log_ffprobe.log - немного изменённый для удобства парсинга. |
Код:
(gc .\log\alllog.log -enc utf8 |Select-String "from|service_name") -replace "^.*from '|':$|^.*:\s" |
DJ Mogarych, ещё раз моя большая благодарность!
Код работает отлично. А не подскажете почему простые рег. выражения не работают с этим логом ? В дальнейшем взятые значения нужно поменять местами и добавить к значению "service_name" подстроку. Простой Regex в цикле не работает Код:
ForEach {$_ -replace "(.*)`n(.*)","#EXTINF:-1,`$2`n`$1"} |
Потому что после get-content получается массив и со строки на строку перескочить не получится.
Можно попробовать импортировать файл с флагом -raw, тогда он будет одним куском. Вариант с выгрузкой в CSV: Код:
((gc .\log\alllog.log -enc utf8 |Select-String "service_name|from") -replace "^.*from '|':$|^.*:\s") ` |
Время: 00:31. |
Время: 00:31.
© OSzone.net 2001-