Войти

Показать полную графическую версию : [решено] Удаление дубликатов строк из текстового файла со сравнением по две строки


Страниц : 1 [2] 3

Uragan66
24-08-2019, 18:00
DJ Mogarych, так не пойдёт для нескольких файлов, сам скрипт написан для обработки только одного файла. Нужно его изменить на multiple, только, увы, я не знаю как.

YuS_2
24-08-2019, 18:44
так не пойдёт для нескольких файлов »
оформите весь код в функцию и считывайте файлы по одному с вызовом функции...
function set-outfile {
process{
$file = 'out_'+$_.name
@(for($i, $arr = 0, (gc $_.fullname -Encoding utf8); $i -lt $arr.Length;) {
$a, $b = $arr[$i], $arr[$i + 1] # потенциальная пара
# критерий относительно которого формируется пара
if ($a.StartsWith('#EXTINF') -and $b -match ':\/\/') {
# выводим пару в окно хоста
"$a`n$b"
# переходим на две позиции вперед
$i += 2
} else {
# в противном случае переходим к следующему значению
++$i
continue
}
}) | Sort-Object -Unique | Out-File $file -Encoding utf8
}
}

dir .\каталог\* -inc *.m3u -file|set-outfile

Uragan66
24-08-2019, 21:09
YuS_2, спасибо большое. Это то, что нужно.

Alex2010god
02-08-2020, 13:18
Привет!Что то пошло не так,помогите пожалуйста понять,на скриншоте во вложении все видно.

Busla
02-08-2020, 13:49
Alex2010god, у вас старая версия PowerShell, скрипт использует новые возможности. Обновите PoSh до 5.1

Alex2010god
02-08-2020, 20:38
Установил 5.1 никаких изменений кроме того что пропал русский язык(как вернуть рус.яз на место?)

Iska
03-08-2020, 05:48
никаких изменений »
Напротив. Теперь совсем другая ошибка.

В том каталоге, откуда Вы пытаетесь исполнять код (на Вашем скриншоте это каталог профиля текущего пользователя), отсутствует каталог с именем «каталог».

Alex2010god
03-08-2020, 07:47
Благодарю!Далек от программирования - ничего не понял из Вашего ответа(что нужно сделать что бы каталог появился?)...

Как вернуть русский язык для PowerShell 5.1?

YuS_2
03-08-2020, 10:32
ничего не понял из Вашего ответа(что нужно сделать что бы каталог появился?)... »
необходимо вместо .\каталог указать правильный путь к существующему каталогу, в котором находятся файлы для обработки.

Как вернуть русский язык для PowerShell 5.1? »
Никак... ну или пожаловаться в ООН на микрософт, на ущемление прав русскоязычных пользователей :) ... шутка.

Alex2010god
04-08-2020, 09:25
В начале скрипта указан адрес:
$aContent = Get-Content -Path 'D:\1\FILMOTEKA.M.C+\F.m3u'
просто вписать вместо .\каталог
так .\D:\1\FILMOTEKA.M.C+\F.m3u
или еще как ни будь?

YuS_2
05-08-2020, 20:51
В начале скрипта указан адрес: »
Хмм... на кофейной гуще не гадаю. :)
Где это видно?
Покажите полностью, что Вы запускаете, какая при этом возникает ошибка и главное - что в итоге желаете получить.
А применительно к указанному выше скрипту:
function set-outfile {
process{
$file = 'out_'+$_.name
@(for($i, $arr = 0, (gc $_.fullname -Encoding utf8); $i -lt $arr.Length;) {
$a, $b = $arr[$i], $arr[$i + 1] # потенциальная пара
# критерий относительно которого формируется пара
if ($a.StartsWith('#EXTINF') -and $b -match ':\/\/') {
# выводим пару в окно хоста
"$a`n$b"
# переходим на две позиции вперед
$i += 2
} else {
# в противном случае переходим к следующему значению
++$i
continue
}
}) | Sort-Object -Unique | Out-File $file -Encoding utf8
}
}
$fld = 'D:\1\FILMOTEKA.M.C+\*'
dir $fld -inc *.m3u -file|set-outfile
путь можно указывать как относительный, так и абсолютный. Переменная $fld будет содержать тот путь, который Вы укажете и соответственно, от его правильности будет зависеть успешное выполнение скрипта.

Alex2010god
07-08-2020, 20:08
Так все же видно на скриншотах(опубликованных ранее в теме,ничего не менял кроме версии ПоверШелл).

YuS_2
07-08-2020, 20:36
Так все же видно на скриншотах »
1. Забудьте про эту гадость, в смысле про Powershell ISE, запускайте скрипты в консоли или используйте VS Code...
2. Скрипт лучше показывать в текстовом виде, а не скриншотами...
3. В начале скрипта указан адрес:
$aContent = Get-Content -Path 'D:\1\FILMOTEKA.M.C+\F.m3u' »
Это никакой не адрес, это считывание данных из файла и их запись в переменную... которая нигде более не используется.
4. и главное - что в итоге желаете получить. »
? На скриншоте никакого вопроса не видно :)

Foreigner
07-08-2020, 20:47
Если нужны уникальные пары строк, то лучше наверное:

Get-Content 1.m3u -ReadCount 2 | Sort-Object | Get-Unique

YuS_2
07-08-2020, 21:31
Если нужны уникальные пары строк, то лучше наверное: »
здесь не просто уникальные пары нужны были, тут учитываются ошибочно составленные плейлисты и код, предложенный greg zakharov выправляет их, он просто завернут в функцию, которая обрабатывает несколько файлов сразу из определенного каталога ... в общем, выше по топику всё есть.

Alex2010god
08-08-2020, 00:53
Для меня темный лес,ну попытался и не получилось(зря только версию на русском языке "ПоверШелл" сменил на английскую).
Цель была такова - обработать плейлист IPTV и выявить и удалить дубликаты.
Проще было бы батник скрипта сделать(положил в папку с плейлистом,нажал он сам все сделал и выдал готовый плейлист с тем же именем+цифра 01,последующий обработанный плейлист 02 и Т.Д.)
На просторах "паутины" нашел программу - без оболочки которая все это делает в один клик(искал неделю или две).

YuS_2
08-08-2020, 12:02
Цель была такова - обработать плейлист IPTV и выявить и удалить дубликаты. »
Создание скрипта, правильно решающего задачу, зависит от правильного составления условий той задачи...
Здесь существует несколько если:
Если плейлист составлен верно и в нем нет ошибок, описанных выше,
Если в плейлисте отсутствуют "лишние" строки, как-то, например маркер плейлиста (#EXTM3U) и т.п.,
Если цель - исключительно только удалить дублирующиеся ПАРЫ строк,
то для одного файла, достаточно запустить такой скрипт:
http://forum.oszone.net/post-2877089.html#post2877089

# Здесь в одинарных кавычках необходимо указать свои: путь к файлу и наименование файла
$file = gi 'd:\исходный каталог\исходный файл.m3u'
# Формируем имя выходного файла:
$out = $file.directoryname + $file.basename + '_out' + $file.extension
# Удаляем дубликаты пар строк с одновременной сортировкой:
gc $file -r 2|sort -uni|out-file $out -enc utf8

Но, если необходима обработка в определенном каталоге всех файлов, в которых, как правило, как минимум, в наличии маркер плейлиста, то:
function delete-marker {
process{
$file = $_.fullname
if (($a = gc $_.fullname -enc utf8)[0] -match '^#EXTM3U'){
$a[1..$a.length]|out-file $file -enc utf8
}
}
}

function set-outfile {
process{
$out = $_.directoryname + '\' + $_.basename + '_out' + $_.extension
# Удаляем дубликаты пар строк с одновременной сортировкой
gc $_.fullname -r 2 -enc utf8|sort -uni|out-file $out -enc utf8
}
}

# Путь к каталогу с исходными файлами (астериск * - указывать обязательно):
$fld = 'D:\1\FILMOTEKA.M.C+\*'

# Сначала удаляем маркеры плейлиста из файлов:
$arr = dir $fld -inc '*.m3u','*.m3u8' -file|delete-marker

# Далее, вызов функции обработки файлов:
$arr|set-outfile

- но надо учитывать, что плейлисты не всегда составлены верно, где помимо маркера плейлиста могут присутствовать ошибки описанные выше, а кроме того, могут присутствовать и дополнительные теги, например #PLAYLIST или #EXTGRP и т.п. - этот скрипт такие моменты не учитывает и отработает ошибочно на таких плейлистах.
В общем, это уже другая задача, под которую необходимо составить перечень условий, т.е. вычленить все возможные "лишние" теги, которые надо либо удалить, либо просто добавить в строку, например (#EXTINF:-1 group-title="Общие",Евроновости), которая изначально может быть представлена так:
#EXTINF:-1 ,Евроновости
#EXTGRP:Общие
http://evronovosti.mediacdn.ru/sr1/evronovosti/playlist.m3u8

- Нюансов там много и чтобы получить в итоге то, что хотелось бы, придется немного потрудиться и составить таки условия... а здесь Вам могут помочь решить задачу с определенными условиями, но не заниматься экстрасенсорикой в плане того, какие там ещё могут быть подводные течения в тех плейлистах... так что сорри, если что не так. :)

Проще было бы батник скрипта сделать »
Если Вам кажется, что это проще - сделайте, но боюсь, что при углублении в тему, Вы будете разочарованы в возможностях командной строки cmd при работе с текстом... :)

Fors1k
08-08-2020, 17:58
#EXTINF:0, 1+1
http://193.106.211.2:1234/udp/225.1.1.103:4001
#EXTINF:0, ICTV
http://193.106.211.2:1234/udp/225.1.1.104:4001
#EXTINF:0, 5 канал
http://193.106.211.2:1234/udp/225.1.1.105:4001
#EXTINF:0, СТБ
http://193.106.211.2:1234/udp/225.1.1.106:4001
#EXTINF:0, ТРК «Украина»
http://193.106.211.2:1234/udp/225.1.1.107:4001
#EXTINF:0, Сити
http://193.106.211.2:1234/udp/225.1.1.108:4001
#EXTINF:0, Тонис
http://193.106.211.2:1234/udp/225.1.1.111:4001
#EXTINF:0, ТЕТ
http://193.106.211.2:1234/udp/225.1.1.110:4001
#EXTINF:0, ТРК «Киев»
http://193.106.211.2:1234/udp/225.1.1.114:4001
#EXTINF:0, Тонис
http://193.106.211.2:1234/udp/225.1.1.111:4001
#EXTINF:0, Мега
http://193.106.211.2:1234/udp/225.1.1.112:4001
#EXTINF:0, М1
http://193.106.211.2:1234/udp/225.1.1.113:4001
#EXTINF:0, канал «Киев»
http://193.106.211.2:1234/udp/225.1.1.114:4001
#EXTINF:0, 2+2
http://193.106.211.2:1234/udp/225.1.1.115:4001
#EXTINF:0, ТРК «Украина»
http://190.106.210.2:1234/udp/225.1.1.107:4001 »
#EXTINF:-1 ,Первый канал
http://gorod.tv/s/live/1/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,Россия 1
http://gorod.tv/s/live/2/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,Матч ТВ
http://gorod.tv/s/live/3/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,НТВ
http://gorod.tv/s/live/4/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,Пятый канал
http://gorod.tv/s/live/5/46.252.219.59/1561632042766/0.m3u8
Здесь какая-то информация
http://gorod.tv/s/live/1/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,Пятый канал
#EXTINF:-1 ,Россия К
http://gorod.tv/s/live/6/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 , Москва 24
http://91.231.219.145:80/tv_moscow_24/video.m3u8
#EXTINF:-1 , Санкт-Петербург
http://91.231.219.145:80/tv_sankt_peterburg/video.m3u8
https://smarttvnews.ru/wp-content/uploads/2018/11/BT-2016-logo_color7890.png
https://smarttvnews.ru/wp-content/uploads/2018/11/BT-2016-logo_color7890.png
#EXTINF:-1 ,Discovery
http://hls-v3-spbtv.msk.spbtv.com/for_spb/msk/ipv3/154.m3u8
#EXTINF:-1 ,NASA TV
http://hls-v3-spbtv.msk.spbtv.com/for_spb/msk/ipv3/17.m3u8
#EXTINF:-1 ,Россия 24
http://gorod.tv/s/live/7/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,Карусель
http://gorod.tv/s/live/8/46.252.219.59/1561632042766/0.m3u8 »
Не особо вчитывался в чем тут у вас загвоздка, но вроде как все решается одной строкой.
Код на скорую руку. С задачей, как я понимаю, справляется.
param(
$pathIN = "C:\files\list.txt",
$pathOUT = "C:\files\list_new.txt"
)cls

$List=((gc $pathIN -raw)|sls "#E[^#]+?(?<=://.+)(?=(`r|$))" -a).Matches.Value|sort -u
$List|out-file $pathOUT
Результат:
#EXTINF:0, 1+1
http://193.106.211.2:1234/udp/225.1.1.103:4001
#EXTINF:0, 2+2
http://193.106.211.2:1234/udp/225.1.1.115:4001
#EXTINF:0, 5 канал
http://193.106.211.2:1234/udp/225.1.1.105:4001
#EXTINF:0, ICTV
http://193.106.211.2:1234/udp/225.1.1.104:4001
#EXTINF:0, канал «Киев»
http://193.106.211.2:1234/udp/225.1.1.114:4001
#EXTINF:0, М1
http://193.106.211.2:1234/udp/225.1.1.113:4001
#EXTINF:0, Мега
http://193.106.211.2:1234/udp/225.1.1.112:4001
#EXTINF:0, Сити
http://193.106.211.2:1234/udp/225.1.1.108:4001
#EXTINF:0, СТБ
http://193.106.211.2:1234/udp/225.1.1.106:4001
#EXTINF:0, ТЕТ
http://193.106.211.2:1234/udp/225.1.1.110:4001
#EXTINF:0, Тонис
http://193.106.211.2:1234/udp/225.1.1.111:4001
#EXTINF:0, ТРК «Киев»
http://193.106.211.2:1234/udp/225.1.1.114:4001
#EXTINF:0, ТРК «Украина»
http://190.106.210.2:1234/udp/225.1.1.107:4001
#EXTINF:0, ТРК «Украина»
http://193.106.211.2:1234/udp/225.1.1.107:4001
#EXTINF:-1 , Москва 24
http://91.231.219.145:80/tv_moscow_24/video.m3u8
#EXTINF:-1 , Санкт-Петербург
http://91.231.219.145:80/tv_sankt_peterburg/video.m3u8
#EXTINF:-1 ,Discovery
http://hls-v3-spbtv.msk.spbtv.com/for_spb/msk/ipv3/154.m3u8
#EXTINF:-1 ,NASA TV
http://hls-v3-spbtv.msk.spbtv.com/for_spb/msk/ipv3/17.m3u8
#EXTINF:-1 ,Карусель
http://gorod.tv/s/live/8/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,Матч ТВ
http://gorod.tv/s/live/3/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,НТВ
http://gorod.tv/s/live/4/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,Первый канал
http://gorod.tv/s/live/1/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,Пятый канал
http://gorod.tv/s/live/5/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,Россия 1
http://gorod.tv/s/live/2/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,Россия 24
http://gorod.tv/s/live/7/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,Россия К
http://gorod.tv/s/live/6/46.252.219.59/1561632042766/0.m3u8
Такой ведь нужен?

YuS_2
09-08-2020, 07:31
Не особо вчитывался в чем тут у вас загвоздка »
А зря... после такого подхода, весь интернет пестрит кривыми плейлистами IPTV и зачастую, тысяч по 20-50 парных строк в них... увы. :)
А если проверить ещё и названия каналов на соответствие того, что в ссылках... там вообще мрак...

С задачей, как я понимаю, справляется. »
#EXTM3U
#EXTINF:-1 ,0 - FREE-IPTV
/$USB_DIR/sda1/free_ip.m3u
#EXTINF:-1 ,Первый канал
#EXTGRP:Российские
http://gorod.tv/s/live/1/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,Россия 1
http://gorod.tv/s/live/2/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,Матч ТВ
http://gorod.tv/s/live/3/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,НТВ
http://gorod.tv/s/live/4/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,Пятый канал
http://gorod.tv/s/live/5/46.252.219.59/1561632042766/0.m3u8
Здесь какая-то информация
http://gorod.tv/s/live/1/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,Пятый канал
#EXTINF:-1 ,Россия К
#EXTGRP:Российские
http://gorod.tv/s/live/6/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,Москва 24
http://91.231.219.145:80/tv_moscow_24/video.m3u8
#EXTINF:-1 ,Санкт-Петербург
http://91.231.219.145:80/tv_sankt_peterburg/video.m3u8
https://smarttvnews.ru/wp-content/uploads/2018/11/BT-2016-logo_color7890.png
https://smarttvnews.ru/wp-content/uploads/2018/11/BT-2016-logo_color7890.png
#EXTINF:-1 ,Discovery
http://hls-v3-spbtv.msk.spbtv.com/for_spb/msk/ipv3/154.m3u8
#EXTINF:-1 ,NASA TV
http://hls-v3-spbtv.msk.spbtv.com/for_spb/msk/ipv3/17.m3u8
#EXTINF:-1 ,Россия 24
http://gorod.tv/s/live/7/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,Карусель
http://gorod.tv/s/live/8/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,Первый канал
#EXTGRP:Российские
http://gorod.tv/s/live/1/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,Россия 1
http://gorod.tv/s/live/2/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,Матч ТВ
http://gorod.tv/s/live/3/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,НТВ
http://gorod.tv/s/live/4/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,Пятый канал
http://gorod.tv/s/live/5/46.252.219.59/1561632042766/0.m3u8
Здесь какая-то информация
http://gorod.tv/s/live/1/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,Пятый канал
#EXTINF:-1 ,Россия К
#EXTGRP:Российские
http://gorod.tv/s/live/6/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,Москва 24
http://91.231.219.145:80/tv_moscow_24/video.m3u8
#EXTINF:-1 ,Санкт-Петербург
http://91.231.219.145:80/tv_sankt_peterburg/video.m3u8
https://smarttvnews.ru/wp-content/uploads/2018/11/BT-2016-logo_color7890.png
https://smarttvnews.ru/wp-content/uploads/2018/11/BT-2016-logo_color7890.png
#EXTINF:-1 ,Discovery
http://hls-v3-spbtv.msk.spbtv.com/for_spb/msk/ipv3/154.m3u8
#EXTINF:-1 ,NASA TV
http://hls-v3-spbtv.msk.spbtv.com/for_spb/msk/ipv3/17.m3u8
#EXTINF:-1 ,Россия 24
http://gorod.tv/s/live/7/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,Карусель
http://gorod.tv/s/live/8/46.252.219.59/1561632042766/0.m3u8

Должно получится примерно это:
#EXTINF:-1 ,0 - FREE-IPTV
/$USB_DIR/sda1/free_ip.m3u
#EXTINF:-1 ,Discovery
http://hls-v3-spbtv.msk.spbtv.com/for_spb/msk/ipv3/154.m3u8
#EXTINF:-1 ,NASA TV
http://hls-v3-spbtv.msk.spbtv.com/for_spb/msk/ipv3/17.m3u8
#EXTINF:-1 ,Карусель
http://gorod.tv/s/live/8/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,Матч ТВ
http://gorod.tv/s/live/3/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,Москва 24
http://91.231.219.145:80/tv_moscow_24/video.m3u8
#EXTINF:-1 ,НТВ
http://gorod.tv/s/live/4/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,Пятый канал
http://gorod.tv/s/live/5/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,Россия 1
http://gorod.tv/s/live/2/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,Россия 24
http://gorod.tv/s/live/7/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 ,Санкт-Петербург
http://91.231.219.145:80/tv_sankt_peterburg/video.m3u8
#EXTINF:-1 group-title="Российские",Первый канал
http://gorod.tv/s/live/1/46.252.219.59/1561632042766/0.m3u8
#EXTINF:-1 group-title="Российские",Россия К
http://gorod.tv/s/live/6/46.252.219.59/1561632042766/0.m3u8


param (
# Создаем три каталога для работы (в каждом будут находится плейлисты)
# Путь к каталогу с исходными файлами:
[string]$infolder = 'D:\in',
# Путь к каталогу с промежуточными файлами, т.е. исправленные плейлисты с возможными дубликатами:
[string]$workfolder = 'D:\work',
# Путь к каталогу с целевыми файлами без дубликатов:
[string]$outfolder = 'D:\out',
# Фильтр для отбора файлов:
[string[]]$filter = ('*.m3u','*.m3u8')
)
function set-groupchannel {
# Выправляем кривые плейлисты. Всё лишнее будет удалено, только группы #EXTGRP добавляются в строку #EXTINF
process{
$arr = new-object system.collections.generic.list[system.string]
$fout = $fldwrk.fullname + '\' + $_.name
gc $_.fullname -enc utf8|%{
if($_ -match '^#extgrp'){
$rep = $_ -replace '#extgrp:'
if ($arr.length -gt 0){
if ($arr[-1] -match '^#extinf' -and $arr[-1] -notmatch 'group-title'){
$arr[-1] = $arr[-1] -replace '(?<=#extinf:\s*-?\d+)([^,]*),'," group-title=`"$rep`"$1,"
}
}
} elseif ($_ -match '^#extinf') {
if ($arr.length -gt 0){
if($arr[-1] -match '^#extinf'){
$arr[-1] = $_
} else {$arr.add($_)}
} else {$arr.add($_)}
} elseif ($_ -notmatch '^#'){
if($arr.length -gt 0){
if($arr[-1] -match '^#extinf'){
$arr.add($_)
}
}
}
}
$arr|out-file $fout -enc utf8
}
}

function set-outfile {
# Удаляем дубликаты пар строк с одновременной сортировкой этих пар
process{
$out = $fldout.fullname + '\' + $_.name
gc $_.fullname -r 2 -enc utf8|sort -uni|out-file $out -enc utf8
}
}

if (!(test-path $workfolder)){md $workfolder}
if (!(test-path $outfolder)){md $outfolder}
$fldin = gi $infolder
$fldwrk = gi $workfolder
$fldout = gi $outfolder

# Исправляем плейлисты:
dir ($fldin.fullname + '\*') -inc $filter -file|set-groupchannel
# Удаляем дубликаты и сортируем:
dir ($fldwrk.fullname + '\*') -inc $filter -file|set-outfile

Fors1k
10-08-2020, 22:54
плейлистами IPTV »
Я, честно говоря, даже не знаю что это такое)
У всех интернет-провайдеров же цифровое тв практически бесплатно, так что не довелось столкнуться с iptv.
Минимально встречавшиеся кривости (далеко не все возможные, наверное) »
Тут тоже самое, только еще какой-то #EXTGRP появился. Можно и его наличие учесть:
param(
$pathIN = "C:\files\list.txt",
$pathOUT = "C:\files\list_new.txt"
)cls

$List=((Get-Content $pathIN -raw) -replace "(`r`n#EXTGRP:)((?<=#EXTGRP:)[^`r]+)" , ' ($2)'|
sls "#E[^#]+?(\.m3u.?|:\d{4})(?=`r|$)"-A).Matches.Value|sort {($_-split"`r`n")[1]} -u
$List|out-file $pathOUTТеперь работает для всех трех примеров.
В общем интересно было поискать уникальные пары, а в самих плейлистах не шарю)




© OSzone.net 2001-2012