Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Необходимо найти все строки которые начинаются с "download:"https:" и заканчиваются

Ответить
Настройки темы
VBS/WSH/JS - [решено] Необходимо найти все строки которые начинаются с "download:"https:" и заканчиваются

Аватара для angel_lyucifer

Старожил


Сообщения: 175
Благодарности: 4


Конфигурация

Профиль | Отправить PM | Цитировать


Здравствуйте, нужна ваша помощь.
Есть текстовый файл сгенерированный программой, вид содержимого файла:
Код: Выделить весь код
{'title':'Эпизод 1', 'file':'[1080p]//de2.anilibria.tv/videos/ts/8374/0001-hd/playlist.m3u8,[720p]//de2.anilibria.tv/videos/ts/8374/0001/playlist.m3u8,[480p]//de2.anilibria.tv/videos/ts/8374/0001-sd/playlist.m3u8', download:"https://x.anilibria.tv/get/3BdXdlP0bs4wlKyjQcXZpA/1557795967/mp4/8374/0001.mp4?download=Hitoribocchi no Marumaru Seikatsu-1-sd.mp4", 'id': 's1'},
{'title':'Эпизод 2', 'file':'[1080p]//de2.anilibria.tv/videos/ts/8374/0002-hd/playlist.m3u8,[720p]//de2.anilibria.tv/videos/ts/8374/0002/playlist.m3u8,[480p]//de2.anilibria.tv/videos/ts/8374/0002-sd/playlist.m3u8', download:"https://x.anilibria.tv/get/ciP3toJ3rI3-x25Rqxxa0g/1557795967/mp4/8374/0002.mp4?download=Hitoribocchi no Marumaru Seikatsu-2-sd.mp4", 'id': 's2'},
{'title':'Эпизод 3', 'file':'[1080p]//de2.anilibria.tv/videos/ts/8374/0003-hd/playlist.m3u8,[720p]//de2.anilibria.tv/videos/ts/8374/0003/playlist.m3u8,[480p]//de2.anilibria.tv/videos/ts/8374/0003-sd/playlist.m3u8', download:"https://x.anilibria.tv/get/2xTCA5dY7tiA634RtlXrTw/1557795967/mp4/8374/0003.mp4?download=Hitoribocchi no Marumaru Seikatsu-3-sd.mp4", 'id': 's3'},
{'title':'Эпизод 4', 'file':'[1080p]//de2.anilibria.tv/videos/ts/8374/0004-hd/playlist.m3u8,[720p]//de2.anilibria.tv/videos/ts/8374/0004/playlist.m3u8,[480p]//de2.anilibria.tv/videos/ts/8374/0004-sd/playlist.m3u8', download:"https://x.anilibria.tv/get/Zgk0waIDnyzpgH4K3QM1hw/1557795967/mp4/8374/0004.mp4?download=Hitoribocchi no Marumaru Seikatsu-4-sd.mp4", 'id': 's4'},
{'title':'Эпизод 5', 'file':'[1080p]//de2.anilibria.tv/videos/ts/8374/0005-hd/playlist.m3u8,[720p]//de2.anilibria.tv/videos/ts/8374/0005/playlist.m3u8,[480p]//de2.anilibria.tv/videos/ts/8374/0005-sd/playlist.m3u8', Hitoribocchi no Marumaru Seikatsu-5-sd.mp4",
=Hitoribocchi no Marumaru Seikatsu-5-sd.mp4", 'id': 's5'}
Необходимо найти все строки которые начинаются с "download:"https:" и заканчиваются на ".mp4"," и удалить их.
Например чтобы были удалены только строки такого вида:
Код: Выделить весь код
download:"https://x.anilibria.tv/get/z0k5b2jejzcDn4Ul35wXTg/1557778143/mp4/8330/0006.mp4?download=Midara na Ao-chan wa Benkyou ga Dekinai-6-sd.mp4",
Количество строк каждый раз разные....

-------
Век живи, век учись! =)


Отправлено: 05:52, 12-05-2019

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


YuS_2, в принципе, не споря о деталях, с таким утверждением можно согласиться.

Отправлено: 22:50, 15-05-2019 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Цитата Iska:
Вопрос останется. Зачем переписывать много…байтный файл, в котором ничего не изменилось? »
по вашему совету надо дважды осуществить поиск по много…байтному файлу
это лишнее, достаточно сравнить результат работы Replace с исходными данными - у вас и так они в памяти и вы надеетесь, что её достаточно
(по идее, если замен не было, должна вернуться ссылка на ту же самую строку)

Цитата Iska:
выражусь иначе: я не вижу существенных отличий в парадигме программирования между WSH и PowerShell (за исключением конвеера). »
в таком русле можно сказать и так:
"не вижу существенных отличий в парадигме программирования между C и C++ (за исключением объектов)"

Ну и без смены парадигм у языков есть сложившиеся индивидульные подходы к решению одних и тех же задач.

Отправлено: 13:28, 16-05-2019 | #22


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Busla, не думаю, что данный способ:
Цитата Busla:
достаточно сравнить результат работы Replace с исходными данными - у вас и так они в памяти »
будет работать быстрее.

Цитата Busla:
в таком русле можно сказать и так:
"не вижу существенных отличий в парадигме программирования между C и C++ (за исключением объектов)" »
Можно.

Цитата Busla:
Ну и без смены парадигм у языков есть сложившиеся индивидульные подходы к решению одних и тех же задач. »
Так что — есть какие-то принципиальные отличия между:
Цитата Iska:
If .Test(…) Then … End If или If([RegEx]::IsMatch(…)) {…} »
? Какой тут может быть отличный сложившийся индивидуальный подход к решению одной и той же задачи?

Отправлено: 14:14, 16-05-2019 | #23


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата Iska:
Какой тут может быть отличный сложившийся индивидуальный подход к решению одной и той же задачи? »
Речь, видимо о том, что не обязательно заворачивать всё в условный блок. Считываем файл в переменную, результат замены сравниваем уже со значением этой переменной, а по результатам сравнения уже предпринимаем какие-либо действия.
типа:
Код: Выделить весь код
$a = '1 2 3 4 5'
# Есть замена
diff $a ($a -replace '3 ') -incl
# Нет изменений
diff $a ($a -replace '8 ') -incl

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 16-05-2019 в 15:08.


Отправлено: 15:02, 16-05-2019 | #24


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


YuS_2, спасибо, ясно. Ну, таким макаром и на WSH можно сравнивать. В чём же тут отличия?!

Другое дело, что сравнение оригинального и возможно изменённого содержимого на мой непросвещённый взгляд по времени будет никак не меньше, нежели поиск первого вхождения шаблона. Про наглядность я вообще молчу.

Отправлено: 15:37, 16-05-2019 | #25


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата Iska:
Ну, таким макаром и на WSH можно сравнивать. В чём же тут отличия?! »
боюсь, что на wsh это делается не так уж и тривиально...

Цитата Iska:
сравнение оригинального и возможно изменённого содержимого на мой непросвещённый взгляд по времени будет никак не меньше, нежели поиск первого вхождения шаблона. »
Можно ведь это дело замерить...
Создаем файл test.txt на 100000 строк, заполненный числами от 0 до 9, по 100 символов в строке...
Код: Выделить весь код
$cnt,$cntstr=100000,10
$arr = 0..9
$str = -join (1..$cntstr|%{-join $arr})
1..$cnt|%{$str}|sc test.txt -enc utf8
меняем, скажем, предпоследний символ на букву "a" и запускаем тест:
Код: Выделить весь код
'==Условный блок=='
(1..10|%{
	(measure-command{
		if(($a = gc test.txt -raw) -match 'a'){
			$a -replace 'a'|sc out1.txt -enc utf8
		}
	}).totalseconds
}|measure -aver).average
''
''
'==Сравнение данных=='
(1..10|%{
	(measure-command{
		diff ($a = gc test.txt -raw) ($a -replace 'a')|
		? SideIndicator -eq '=>'|select -exp inputobject|
		sc out2.txt -enc utf8
	}).totalseconds
}|measure -aver).average
1. файл читается как единая строка, т.е. не построчно, т.к. в рамках этого топика именно такая задача и стояла
2. для более корректного подсчета, каждый тест запускается по 10 раз и вычисляется среднее время...

В сухом остатке:
Получилось, что наоборот, сравнение данных более затратно по времени, в том числе, и в случае если совпадения не существует... хотя отличия вполне сопоставимы...

Цитата Iska:
Про наглядность я вообще молчу. »
Наглядность - вещь субъективная и сильно зависит от знания языка.

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 16-05-2019 в 18:41.


Отправлено: 18:27, 16-05-2019 | #26


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
боюсь, что на wsh это делается не так уж и тривиально... »
В смысле? If strSource = strResult Then … End If. Или If StrComp(…) = 0 Then … End If.

Цитата YuS_2:
и запускаем тест: »
Не включайте чтение из одного и того же файла в процесс замера.

По остальному пощупаю позже.

Отправлено: 20:14, 16-05-2019 | #27


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата Iska:
В смысле? If strSource = strResult Then … End If. Или If StrComp(…) = 0 Then … End If. »
В смысле это только направление, а нужен законченный код, который делает то же самое, что и код на powershell...

Цитата Iska:
Не включайте чтение из одного и того же файла в процесс замера. »
Вы можете разделить код на два скрипта и выполнять их в разных процессах... средние показания будут в тех же пределах. Проверьте.
Т.е. это не влияет на результат.

-------
scio me nihil scire. Ѫ


Отправлено: 20:55, 16-05-2019 | #28


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
В смысле это только направление, а нужен законченный код, который делает то же самое, что и код на powershell... »
Зачем? В смысле — зачем Compare-Object для сравнения на равенство двух строк:
Цитата YuS_2:
результат замены сравниваем уже со значением этой переменной, а по результатам сравнения уже предпринимаем какие-либо действия.
типа:
Код: Выделить весь код
$a = '1 2 3 4 5'
# Есть замена
diff $a ($a -replace '3 ') -incl
# Нет изменений
diff $a ($a -replace '8 ') -incl
»
?

Вот простая иллюстрация:
Код: Выделить весь код
$a = "12345"
$b = "3"

(Measure-Command {
    for($i = 0; $i -le 1000000; $i++) {
        [void](Compare-Object -ReferenceObject $a -DifferenceObject $b -IncludeEqual)
    }
}).TotalSeconds

(Measure-Command {
    for($i = 0; $i -le 1000000; $i++) {
        [void]($a -eq $b)
    }
}).TotalSeconds
64.6133665
2.0294291
Возможно, со строками другой длины и результат будет иной. Но так или иначе, Compare-Object вместо простого сравнения — не лучший выбор.

Отправлено: 22:11, 16-05-2019 | #29


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата Iska:
В смысле — зачем Compare-Object для сравнения на равенство двух строк »
А как будем выполнять действие без условного блока? compare-object - по сути, функция, результаты которой мы используем в конвейере, а простое сравнение в конвейер не передать (вернее передать-то можем, но это ничего не даст без того самого условного блока), т.е. в любом случае необходимо использовать оператор ветвления, хоть с -match, хоть с -eq.
Но да, если строка единственная, то никаких преимуществ использование diff не дает, согласен. Compare-object хорош при сравнении массивов, где прямое сравнение работать не будет... но в обсуждаемом случае, построчное чтение не эффективно, по затратам времени, да и фрагмент может ведь располагаться не на одной строке.

В общем, если есть какие-либо дополнения по поводу эффективности, хотелось бы увидеть пояснения на примерах, от автора слов:
Цитата Busla:
не надеяться на достаточный объём памяти, а работать построчно
тогда и вопрос перезаписи снимется »

-------
scio me nihil scire. Ѫ


Отправлено: 08:59, 17-05-2019 | #30



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Необходимо найти все строки которые начинаются с "download:"https:" и заканчиваются

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Как из строки в .txt вывести символы "которые там обновляются"в другой .txt Bombastig Скриптовые языки администрирования Windows 6 08-02-2014 04:54
Интерфейс - [решено] Нет "стеклянного" эффекта при наведении на "Свернуть все окна" aka_smile Microsoft Windows 7 5 21-09-2012 11:49
Не получается найти все выпуски "Хакер"+"спец"+"железо" verdix Хочу все знать 5 29-11-2008 15:19
Запретить/удалить пункт "Programs" ("Программы") из меню кнопки "Start" ("Пуск") submaster Microsoft Windows NT/2000/2003 5 13-09-2006 12:29




 
Переход