Автор Тема: извлечь нужную строку и последующую строку  (Прочитано 255 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Эта тема содержит сообщение, помеченное как лучший ответ. Кликните здесь для перехода к этому сообщению.

Оффлайн alex2887 [?]

  • Новичок
  • *
  • Сообщений: 46
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Всем привет, имеется плейлист для IpTV. Так как листы часто обновляются, то приходится его перекачивать и вручную удалять ненужные мне каналы, а там строк больше двух тысяч, что не очень удобно...
Хочу, чтобы скрипт по заданному мной критерию (Названию канала) искал нужный канал в плейлисте и когда найдет, то копировал заголовок и последующую за ним строку (ссылка на само вещание) и записывал в новый текстовый документ с расширением *.m3u. Заранее благодарен.
Вот как выглядит сам лист:

Русское сообщество AutoIt

извлечь нужную строку и последующую строку
« Отправлен: Март 09, 2019, 16:30:28 »

Оффлайн Tempo [?]

  • Продвинутый
  • ***
  • Сообщений: 417
  • Репутация: 98
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Код: AutoIt [Выделить]
#include <FileConstants.au3>
#include <StringConstants.au3>
FileChangeDir(@ScriptDir)

_OnlyForExample()

Local $sIn = FileRead("In.m3u")
Local $aNames = FileReadToArray("Names.txt"), $aRegExp, $sOut
If Not @error Then
    For $i = 0 To @extended - 1
        $aRegExp = StringRegExp($sIn, "(#EXTINF:.*" & $aNames[$i] & ".*\R.*)", $STR_REGEXPARRAYMATCH)
        If Not @error Then $sOut &= $aRegExp[0] & @CRLF
    Next
EndIf
Local $hOut = FileOpen("Out.m3u", $FO_OVERWRITE)
FileWrite($hOut, "#EXTM3U" & @CRLF & $sOut)
FileClose($hOut)

Func _OnlyForExample()
    Local $hIn = FileOpen("In.m3u", $FO_OVERWRITE)
    FileWrite($hIn, "#EXTM3U" & @CRLF & _
            "#EXTINF:-1,Сказки Зайки (Детские)" & @CRLF & _
            "http://127.0.0.1:6878/ace/getstream?id=068ed0c085e948f712d88ae9ce3b3b5354c4f611&.mp4" & @CRLF & _
            "#EXTINF:-1,Советские мультфильмы (Детские)" & @CRLF & _
            "http://127.0.0.1:6878/ace/getstream?id=08ba52866dfa1607a3d9f53b78f01cd04abf58f6&.mp4" & @CRLF & _
            "#EXTINF:-1,Тлум HD (Детские)" & @CRLF & _
            "http://127.0.0.1:6878/ace/getstream?id=501947daa65b2ba709d41b071fe7dbe306416891&.mp4" & @CRLF & _
            "#EXTINF:-1,100AutoMoto TV (Мужские)" & @CRLF & _
            "http://127.0.0.1:6878/ace/getstream?id=951215e2f072fffe7939e813e7091d79ea72b8ca&.mp4" & @CRLF & _
            "#EXTINF:-1,CBS Reality (Мужские)" & @CRLF & _
            "http://127.0.0.1:6878/ace/getstream?id=b6e0db1e2c7c25960393da221d6704108379c1ce&.mp4" & @CRLF & _
            "#EXTINF:-1,Canal Motor HD (Мужские)" & @CRLF & _
            "http://127.0.0.1:6878/ace/getstream?id=1bc3cf4befb0443e1303ad0be0d51faa522a000f&.mp4" & @CRLF & _
            "#EXTINF:-1,Fitness M (Мужские)" & @CRLF & _
            "http://127.0.0.1:6878/ace/getstream?id=37bec8a0c8fdd4b1d24f73393ef1fba91bbb399f&.mp4" & @CRLF & _
            "#EXTINF:-1,Hunt Channel (Мужские)" & @CRLF & _
            "http://127.0.0.1:6878/ace/getstream?id=9203e13571ae51e41659ce00c6147f9bf43072c2&.mp4" & @CRLF & _
            "#EXTINF:-1,Outdoor Channel (Мужские)" & @CRLF & _
            "http://127.0.0.1:6878/ace/getstream?id=8ff5473b10f2955d1b4ef57e0a0b478d504c2f5a&.mp4")
    FileClose($hIn)
    Local $hNames = FileOpen("Names.txt", $FO_OVERWRITE)
    FileWrite($hNames, "Hunt Channel" & @CRLF & _
            "CBS Reality" & @CRLF & _
            "Outdoor Channel")
    FileClose($hNames)
EndFunc   ;==>_OnlyForExample
 

« Последнее редактирование: Март 09, 2019, 17:07:38 от Tempo »

Оффлайн alex2887 [?]

  • Новичок
  • *
  • Сообщений: 46

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
А можно сделать так, чтобы он из файла m3u вытащил определенный канал с заголовком и ссылку на него и отправил в новый текстовый документ? Например мне нужен только Канал "Сказки зайки". Если вам не сложно, закомментируйте ваш скрипт, а то я  не могу никак с ним разобраться

Оффлайн Tempo [?]

  • Продвинутый
  • ***
  • Сообщений: 417
  • Репутация: 98
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Код: AutoIt [Выделить]
#include <FileConstants.au3>
#include <StringConstants.au3>
FileChangeDir(@ScriptDir)

Local $sFileIn = "In.m3u" ;Укажите путь к файлу со списком всех каналов
Local $sFileNames = "Names.txt" ;Укажите путь к файлу в котором построчно указаны имена нужных каналов
Local $sFileOut = "Out.m3u" ;Укажите путь к файлу в который будут записаны нужные каналы + ссылка на вещание

Local $sIn = FileRead($sFileIn), $aNames = FileReadToArray($sFileNames), $aRegExp, $sOut
If Not @error Then
    For $i = 0 To @extended - 1
        $aRegExp = StringRegExp($sIn, "(#EXTINF:.*" & $aNames[$i] & ".*\R.*)", $STR_REGEXPARRAYMATCH)
        If Not @error Then $sOut &= $aRegExp[0] & @CRLF
    Next
EndIf
Local $hOut = FileOpen($sFileOut, $FO_OVERWRITE)
FileWrite($hOut, "#EXTM3U" & @CRLF & $sOut)
FileClose($hOut)


Русское сообщество AutoIt

Re: извлечь нужную строку и последующую строку
« Ответ #3 Отправлен: Март 09, 2019, 21:03:12 »

Оффлайн alex2887 [?]

  • Новичок
  • *
  • Сообщений: 46

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Tempo, можно Вас попросить изменить регулярное выражение? Почему-то у меня не работает последний скрипт, записывает только самую верхнюю строчку в файл Out.m3u #EXTM3U и больше ничего.... Заранее извиняюсь, файл плейлиста и того, что для меня нужно прикрепляю... Ошибка моя была в том, что я сам Вас ввел в заблуждение, не предоставив файлы, в том виде, в каком они должны быть, чтобы у них была работоспособность.


Внимание: Для просмотра прикреплённых файлов необходимо Войти или Зарегистрироваться

Помечен как лучший ответ пользователем alex2887 Отправлен Март 21, 2019, 17:22:37

Оффлайн Tempo [?]

  • Продвинутый
  • ***
  • Сообщений: 417
  • Репутация: 98
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Скрипт был рассчитан на то что вы будете указывать только название канала в файле Names.txt, а не всю строку "#EXTINF..."

Исправил
Код: AutoIt [Выделить]
#include <FileConstants.au3>
#include <StringConstants.au3>
FileChangeDir(@ScriptDir)

Local $sFileIn = "In.m3u.txt" ;Укажите путь к файлу со списком всех каналов
Local $sFileNames = "Names.txt" ;Укажите путь к файлу в котором построчно указаны имена нужных каналов
Local $sFileOut = "Out.m3u" ;Укажите путь к файлу в который будут записаны нужные каналы + ссылка на вещание

Local $sIn = FileRead($sFileIn), $aNames = FileReadToArray($sFileNames), $aRegExp, $sOut
If Not @error Then
    For $i = 0 To @extended - 1
        $aRegExp = StringRegExp($sIn, "(.*\Q" & $aNames[$i] & "\E.*\R.*)", $STR_REGEXPARRAYMATCH)
        If Not @error Then $sOut &= $aRegExp[0] & @CRLF
    Next
EndIf
Local $hOut = FileOpen($sFileOut, $FO_OVERWRITE)
FileWrite($hOut, "#EXTM3U" & @CRLF & $sOut)
FileClose($hOut)
 


Русское сообщество AutoIt

Re: извлечь нужную строку и последующую строку
« Ответ #5 Отправлен: Март 14, 2019, 21:38:37 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
7 Ответов
10420 Просмотров
Последний ответ Ноябрь 26, 2011, 19:27:03
от madmasles
7 Ответов
5635 Просмотров
Последний ответ Сентябрь 23, 2013, 01:35:15
от Zaramot
5 Ответов
2254 Просмотров
Последний ответ Май 22, 2015, 16:37:18
от uritalex
0 Ответов
652 Просмотров
Последний ответ Октябрь 13, 2014, 21:34:38
от madmasles
0 Ответов
731 Просмотров
Последний ответ Ноябрь 17, 2014, 09:23:20
от madmasles
4 Ответов
1242 Просмотров
Последний ответ Сентябрь 05, 2015, 14:58:55
от Medic84
5 Ответов
1203 Просмотров
Последний ответ Март 04, 2017, 08:02:15
от reset86
3 Ответов
388 Просмотров
Последний ответ Апрель 24, 2018, 20:00:26
от Tempo
2 Ответов
107 Просмотров
Последний ответ Март 18, 2019, 02:02:24
от ЭйчЭйч
4 Ответов
97 Просмотров
Последний ответ Март 19, 2019, 01:25:18
от CreatoR