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

Ответить
Аватара пользователя
Alexander_88

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

Сообщение Alexander_88 »

Здравствуйте, решение нужно на BAT или на powershell.Есть два списка ссылок в txt файлах old.txt и new.txt (каждая ссылка с новой строки). Необходимо создать файл result.txt, в котором будут сопоставлены ссылки из этих двух текстовых файлов. Сопоставлять нужно по имени файла, игнорируя расширение, в конце каждой ссылки (если имя файла (игнорируя расширение) совпадает, то ссылка сопоставляется). Сопоставлять нужно через символ " | " ( до и после этого символа пробел ). result.txt должен получиться такого формата:

ссылка из old.txt | ссылка new.txt, совпадающая по имени файла (игнорируя расширение) c ссылкой old.txt



Если ссылки из old.txt нету в new.txt, то ее должно не быть в результирующем файле.

В old.txt может быть несколько ссылок с одним и тем же именем файла, каждой из них нужно сопоставить соответствующую ссылку из файла new.txt (если она есть). В new.txt, совпадающих ссылок по имени файла точно нет. Расширение в имени файла нужно игнорировать, т.е. сопоставление идет только по имени файла без расширения.. к примеру ссылка с именем файла "111re.avi" сопоставится с ссылкой с именем файла "111re.mp4"

Пример:

файл old.txt



Код:

Код: Выделить всё

https://k2s.cc/file/uufyfidu/0498start.avi
https://k2s.cc/file/wwwww/0382start.wmv
https://k2s.cc/file/qqqqqqq/0606start.mp4
https://k2s.cc/file/sssssssss/0330tun.mp4
https://k2s.cc/file/yyyyyyy1/0330tun.flv
https://k2s.cc/file/aaaaaaaa/classic0372.mp4
https://k2s.cc/file/22222222/omgty0997.mp4
https://k2s.cc/file/11111111/0332yyx.avi
https://k2s.cc/file/7777e665/omgty0997.mp4
https://k2s.cc/file/11111111/77743yyx.mpg
https://k2s.cc/file/11111111/5572eyyx.mp4

файл new.txt



Код:

Код: Выделить всё

https://k2s.cc/file/dfgksdfdf/start765.mp4
https://k2s.cc/file/ksdjghfgjk/0382start.mp4
https://k2s.cc/file/sdfdsffdfdf/avvo1123.mp4
https://k2s.cc/file/sdfsdfsd/0330tun.mp4
https://k2s.cc/file/dfgsfgsf/classic0372.mp4
https://k2s.cc/file/fsdgsdfeefq/omgty0997.mp4
https://k2s.cc/file/sgfdhgew/0332yyx.mp4
https://k2s.cc/file/jgmgjyh/0498start.mp4
https://k2s.cc/file/1112222/0364start.mp4
https://k2s.cc/file/bcnndgd/0606start.mp4
https://k2s.cc/file/sdfgsfgsdgh/0783yye.mp4
https://k2s.cc/file/fjgjuhkku/classictr43.mp4
https://k2s.cc/file/werwerwes/54tyi.mp4
https://k2s.cc/file/dfgfdhdghgf/uwrt463.mp4

Результирующий файл получится такой:



Код:

Код: Выделить всё

https://k2s.cc/file/uufyfidu/0498start.avi | https://k2s.cc/file/jgmgjyh/0498start.mp4
https://k2s.cc/file/wwwww/0382start.mp4 | https://k2s.cc/file/ksdjghfgjk/0382start.mp4
https://k2s.cc/file/qqqqqqq/0606start.mp4 | https://k2s.cc/file/bcnndgd/0606start.mp4
https://k2s.cc/file/sssssssss/0330tun.flv | https://k2s.cc/file/sdfsdfsd/0330tun.mp4
https://k2s.cc/file/yyyyyyy1/0330tun.flv | https://k2s.cc/file/sdfsdfsd/0330tun.mp4
https://k2s.cc/file/aaaaaaaa/classic0372.mp4 | https://k2s.cc/file/dfgsfgsf/classic0372.mp4
https://k2s.cc/file/22222222/omgty0997.mp4 | https://k2s.cc/file/fsdgsdfeefq/omgty0997.mp4
https://k2s.cc/file/11111111/0332yyx.avi | https://k2s.cc/file/sgfdhgew/0332yyx.mp4
https://k2s.cc/file/7777e665/omgty0997.mp4 | https://k2s.cc/file/fsdgsdfeefq/omgty0997.mp4
Аватара пользователя
Iska

Re: Любой язык - Сопоставить ссылки рядом, между ними установить символ.

Сообщение Iska »

Цитата Alexander_88:



В new.txt, совпадающих ссылок по имени файла точно нет.
Любой язык - Сопоставить ссылки рядом, между ними установить символ.




Поверим Вам на слово и никак не будем сие проверять Изображение.




Цитата Alexander_88:



Результирующий файл получится такой:
Любой язык - Сопоставить ссылки рядом, между ними установить символ.




Не получится. Не получится из:



Код:

Код: Выделить всё

https://k2s.cc/file/uufyfidu/0498start.avi
https://k2s.cc/file/wwwww/0382start.wmv
https://k2s.cc/file/qqqqqqq/0606start.mp4
https://k2s.cc/file/sssssssss/0330tun.mp4
https://k2s.cc/file/yyyyyyy1/0330tun.flv
https://k2s.cc/file/aaaaaaaa/classic0372.mp4
https://k2s.cc/file/22222222/omgty0997.mp4
https://k2s.cc/file/11111111/0332yyx.avi
https://k2s.cc/file/7777e665/omgty0997.mp4
https://k2s.cc/file/11111111/77743yyx.mpg
https://k2s.cc/file/11111111/5572eyyx.mp4

файла:



Код:

Код: Выделить всё

https://k2s.cc/file/uufyfidu/0498start.avi | https://k2s.cc/file/jgmgjyh/0498start.mp4
https://k2s.cc/file/wwwww/0382start.mp4 | https://k2s.cc/file/ksdjghfgjk/0382start.mp4
https://k2s.cc/file/qqqqqqq/0606start.mp4 | https://k2s.cc/file/bcnndgd/0606start.mp4
https://k2s.cc/file/sssssssss/0330tun.flv | https://k2s.cc/file/sdfsdfsd/0330tun.mp4
https://k2s.cc/file/yyyyyyy1/0330tun.flv | https://k2s.cc/file/sdfsdfsd/0330tun.mp4
https://k2s.cc/file/aaaaaaaa/classic0372.mp4 | https://k2s.cc/file/dfgsfgsf/classic0372.mp4
https://k2s.cc/file/22222222/omgty0997.mp4 | https://k2s.cc/file/fsdgsdfeefq/omgty0997.mp4
https://k2s.cc/file/11111111/0332yyx.avi | https://k2s.cc/file/sgfdhgew/0332yyx.mp4
https://k2s.cc/file/7777e665/omgty0997.mp4 | https://k2s.cc/file/fsdgsdfeefq/omgty0997.mp4

Никак не может такового получиться.



А так — пробуйте:



Скрытый текст

[spoiler]Код:
[/spoiler]

Код: Выделить всё

$sOldFile    = 'C:\Мои проекты\0241\old.txt'
$sNewFile    = 'C:\Мои проекты\0241\new.txt'
$sResultFile = 'C:\Мои проекты\0241\result.txt'
Get-Content -Path $sNewFile | ForEach-Object -Begin {
        $hNewTable = @{}
    } -Process {
        $hNewTable.Add([IO.Path]::GetFileNameWithoutExtension($_), $_)
    }
Get-Content -Path $sOldFile | ForEach-Object -Process {
    $sOldName = [IO.Path]::GetFileNameWithoutExtension($_)
    if($hNewTable.ContainsKey($sOldName)) {
        "$($_) | $($hNewTable[$sOldName])"
    }
} | Set-Content -Path $sResultFile
Аватара пользователя
Alexander_88

Re: Любой язык - Сопоставить ссылки рядом, между ними установить символ.

Сообщение Alexander_88 »

Спасибо, работает. Да, скрипта не было, результирующий файл руками составлял и ошибся Изображение
Аватара пользователя
Alexander_88

Re: Любой язык - Сопоставить ссылки рядом, между ними установить символ.

Сообщение Alexander_88 »

Этот вариант скрипта основной, еще нужно дополнительный, все точно также, только нужно, чтобы при сопоставлении, в имени файла игнорировался символ земли _

Такие символы встречаются только в old.txt.

Пример:

old.txt



Код:

Код: Выделить всё

https://k2s.cc/file/uufyfidu/0498_start.avi

new.txt



Код:

Код: Выделить всё

https://k2s.cc/file/3434w/0498start.mp4

результирующий:



Код:

Код: Выделить всё

https://k2s.cc/file/uufyfidu/0498_start.avi | https://k2s.cc/file/3434w/0498start.mp4

Может быть нужно под второе задание новую тему создать?
Аватара пользователя
Iska

Re: Любой язык - Сопоставить ссылки рядом, между ними установить символ.

Сообщение Iska »

Цитата Alexander_88:



нужно, чтобы при сопоставлении, в имени файла игнорировался символ земли _

Такие символы встречаются только в old.txt.
Любой язык - Сопоставить ссылки рядом, между ними установить символ.




Пробуйте:



Скрытый текст

[spoiler]Код:
[/spoiler]

Код: Выделить всё

$sOldFile    = 'C:\Мои проекты\0241\old.txt'
$sNewFile    = 'C:\Мои проекты\0241\new.txt'
$sResultFile = 'C:\Мои проекты\0241\result.txt'
Get-Content -Path $sNewFile | ForEach-Object -Begin {
        $hNewTable = @{}
    } -Process {
        $hNewTable.Add([IO.Path]::GetFileNameWithoutExtension($_), $_)
    }
Get-Content -Path $sOldFile | ForEach-Object -Process {
    $sOldName = ([IO.Path]::GetFileNameWithoutExtension($_)).Replace('_', '')
    if($hNewTable.ContainsKey($sOldName)) {
        "$($_) | $($hNewTable[$sOldName])"
    }
} | Set-Content -Path $sResultFile










Цитата Alexander_88:



Может быть нужно под второе задание новую тему создать?
Любой язык - Сопоставить ссылки рядом, между ними установить символ.




Нет, не нужно.
Аватара пользователя
Alexander_88

Re: Любой язык - Сопоставить ссылки рядом, между ними установить символ.

Сообщение Alexander_88 »

Iska, спасибо, работает все и быстро обрабатывает много ссылок Изображение
Аватара пользователя
Alexander_88

Re: Любой язык - Сопоставить ссылки рядом, между ними установить символ.

Сообщение Alexander_88 »

Здравствуйте, спустя 4 года потребовалось обновление скрипта Изображение может кто нибудь сможет помочь исправить?

Теперь файлов типа new txt много (old.txt так и остался один). А также при сопоставлении, игнорировать знак земли _ в имени файла нужно как в old.txt как и в new.txt.

Во всех файлах типа new.txt не будет ссылок с повторяющимися именами файлов.. (не то, что в каждом, а прям во всех.. если склеить все эти файлы, не будет одинаковых имён в ссылках).

Пример:

old.txt



Код:

Код: Выделить всё

https://k2s.cc/file/uufuhfdsidu/0498_start.mp4
https://k2s.cc/file/uuf5656du/0499start.avi
https://google.com/file/uufyfidu/0498start_m.jpg

new1.txt



Код:

Код: Выделить всё

https://k2s.cc/file/uu11111du/0498start.mp4
https://k2s.cc/file/53685656du/0499start.mp4

new2.txt



Код:

Код: Выделить всё

https://yandex.ru/file/uu7654443u/0498start_m.jpg

result.txt



Код:

Код: Выделить всё

https://k2s.cc/file/uufuhfdsidu/0498_start.mp4  | https://k2s.cc/file/uu11111du/0498start.mp4
https://k2s.cc/file/uuf5656du/0499start.avi | https://k2s.cc/file/53685656du/0499start.mp4
https://google.com/file/uufyfidu/0498start_m.jpg | https://yandex.ru/file/uu7654443u/0498start_m.jpg
Ответить

Вернуться в «Скриптовые языки администрирования Windows»