Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Добавить название серий в плейлист (http://forum.oszone.net/showthread.php?t=352615)

Uragan66 17-12-2022 20:15 2999118

Добавить название серий в плейлист
 
Доброго времени суток всем! Ребята, нужна небольшая помощь. Сам давно с powershell не работал, подзабыл всё...
Есть плейлисты такого типа:
Код:

#EXTINF:0 group-title="Аниме",Академия ведьмочек
https://hls.kinoprofi.vip/hls/akademija-vedmochek_01/playlist.m3u8
https://bk2-hls.kinoprofi.vip/hls/akademija-vedmochek_02/playlist.m3u8
https://hls.kinoprofi.vip/hls/akademija-vedmochek_03/playlist.m3u8
https://bk2-hls.kinoprofi.vip/hls/akademija-vedmochek_04/playlist.m3u8
https://hls.kinoprofi.vip/hls/akademija-vedmochek_05/playlist.m3u8
https://hls.kinoprofi.vip/hls/akademija-vedmochek_06/playlist.m3u8
https://hls.kinoprofi.vip/hls/akademija-vedmochek_07/playlist.m3u8
#EXTINF:0 group-title="Аниме",Дитя погоды
https://hls.kinoprofi.vip/hls/Lic.Ditya.Pogodi.2019.BDRip.Deadmauvlad.1.46.GB/playlist.m3u8
#EXTINF:0 group-title="Аниме",Загадочная история Коноханы
https://hls.kinoprofi.vip/hls/Istoriya_Konohany.AniDub1/playlist.m3u8
https://hls.kinoprofi.vip/hls/Istoriya_Konohany.AniDub2/playlist.m3u8
https://hls.kinoprofi.vip/hls/Istoriya_Konohany.AniDub3/playlist.m3u8
https://hls.kinoprofi.vip/hls/Istoriya_Konohany.AniDub4/playlist.m3u8
https://hls.kinoprofi.vip/hls/Istoriya_Konohany.AniDub5/playlist.m3u8
https://hls.kinoprofi.vip/hls/Istoriya_Konohany.AniDub6/playlist.m3u8
https://hls.kinoprofi.vip/hls/Istoriya_Konohany.AniDub7/playlist.m3u8
https://hls.kinoprofi.vip/hls/Istoriya_Konohany.AniDub8/playlist.m3u8
https://hls.kinoprofi.vip/hls/Istoriya_Konohany.AniDub9/playlist.m3u8
https://hls.kinoprofi.vip/hls/Istoriya_Konohany.AniDub10/playlist.m3u8
https://hls.kinoprofi.vip/hls/Istoriya_Konohany.AniDub11/playlist.m3u8
https://hls.kinoprofi.vip/hls/Istoriya_Konohany.AniDub12/playlist.m3u8
#EXTINF:0 group-title="Аниме",Вкусы молодости
https://hls.kinoprofi.vip/hls/Flavors.of.Youth.2018.HDRip/playlist.m3u8
#EXTINF:0 group-title="Аниме",Batman.Ninja
https://hls.kinoprofi.vip/hls/Batman.Ninja.2018.HDRip/playlist.m3u8
#EXTINF:0 group-title="Аниме",Игра короля
https://hls.kinoprofi.vip/hls/Ousama_Game_01_AniMedia.TV/playlist.m3u8
https://hls.kinoprofi.vip/hls/Ousama_Game_02_AniMedia.TV/playlist.m3u8
https://hls.kinoprofi.vip/hls/Ousama_Game_03_AniMedia.TV/playlist.m3u8
https://hls.kinoprofi.vip/hls/Ousama_Game_04_AniMedia.TV/playlist.m3u8
https://hls.kinoprofi.vip/hls/Ousama_Game_05_AniMedia.TV/playlist.m3u8
https://hls.kinoprofi.vip/hls/Ousama_Game_05_AniMedia.TV/playlist.m3u8
https://hls.kinoprofi.vip/hls/Ousama_Game_07_AniMedia.TV/playlist.m3u8
https://hls.kinoprofi.vip/hls/Ousama_Game_08_AniMedia.TV/playlist.m3u8
#EXTINF:0 group-title="Аниме",Проза бродячих псов. Фильм
https://hls.kinoprofi.vip/hls/ProZa.2O18.D.HDRip/playlist.m3u8

и т.д.

Пары строк, где название фильма >> ссылка, должны остаться исходные. А строки, где название фильма >> несколько ссылок на серии (ссылок может быть неопределённое количество), нужно преобразовать к такому виду, пример:

Код:

#EXTINF:0 group-title="Аниме",Игра короля - серия1
https://hls.kinoprofi.vip/hls/Ousama_Game_01_AniMedia.TV/playlist.m3u8
#EXTINF:0 group-title="Аниме",Игра короля - серия2
https://hls.kinoprofi.vip/hls/Ousama_Game_02_AniMedia.TV/playlist.m3u8
#EXTINF:0 group-title="Аниме",Игра короля - серия3
https://hls.kinoprofi.vip/hls/Ousama_Game_03_AniMedia.TV/playlist.m3u8

и т.д.

Можно это как-то сделать средствами powershell ?
Заранее благодарен за помощь и советы!

Foreigner 18-12-2022 03:42 2999134

Как-то так, если правильно понял

Код:

$content = Get-Content file.txt

$pls = New-Object 'array[]' ($f = ($content | sls '^#').Count)
$cnt = 0

foreach ($line in $content)
{
    if ($line -match '^#')
    {
        $c = $cnt
        $pls[$c] = @()
        $pls[$c] += $line
        $cnt++
    }

    else
    {
        $pls[$c] += $line
    }
}

for ($i = 0; $i -lt $f; $i++)
{
    if ($pls[$i].Count -eq 2) { $pls[$i] }
    else
    {
        $title = $pls[$i][0].Split('=')[1]
        for ($j = 1; $j -lt $pls[$i].Count; $j++)
        {
            "`#EXTINF:0 group-title=$title - серия$j"
            $pls[$i][$j]
        }
    }
}


YuS_2 18-12-2022 14:11 2999151

Foreigner, одно немаловажное уточнение... если уж резать заголовочную строку, в целях получения title, то надо по запятой и лучше (ближе к стандарту) это делать примерно так:
Код:

# Допустимая строка (по стандарту):
$a = '#EXTINF:0 group-title="Аниме, Фэнтази" audio-track="rus, ukr, eng",Загадочная история Коноханы, Ведьма'
$flg,$qcnt = $true,0
$a -split {
        param($s,$p)
        if($flg){
                if($_ -eq '"'){
                        $script:qcnt++
                }
                if($_ -eq ',' -and $script:qcnt%2 -eq 0){
                        $_ -eq ','
                        $script:flg=$false
                }
        }
}

PS А в данном, частном случае, строку можно вообще целиком выдергивать, с добавлением в конец информации о серии и резать её необходимости нет...

Foreigner 18-12-2022 14:44 2999152

Я, честно говоря, не знаю стандартов, исходил из того, что дали. На счет того, что можно и не резать, я как-то не учел это.

YuS_2 18-12-2022 15:12 2999153

Цитата:

Цитата Foreigner
честно говоря, не знаю стандартов »

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

Цитата:

Цитата Foreigner
На счет того, что можно и не резать, я как-то не учел это. »

если бы в начало title надо было добавлять инфу, тогда только резать, а здесь просто в конец строки добавляем, потому и ...

Uragan66 18-12-2022 21:50 2999199

Foreigner, спасибо большое!!! То что нужно!
Первый вариант тоже работал, но немного некорректно отрабатывало регулярное выражение:
Код:

.+\D(\d+)[/_].+
На некоторых ссылка были ложные срабатывания, другие, наоборот, пропускало... Какие будут ссылки невозможно предугадать...
Сейчас отлично!

Foreigner 18-12-2022 21:56 2999200

Цитата:

Цитата Uragan66
Первый вариант тоже работал »

Я его сделал ночью, с тяжелой головой )) Поэтому с утра переписал.


Время: 23:45.

Время: 23:45.
© OSzone.net 2001-