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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Сравнить два текстовых файла и вывести результат

Ответить
Настройки темы
Любой язык - [решено] Сравнить два текстовых файла и вывести результат

Ветеран


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

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


Здравствуйте. Может кто - нибудь поможет задачку решить? Есть два txt файла.

пример первого:
Код: Выделить весь код
tetris0001.avi
640x480 
0:13:20
196 MB
tetris0002.wmv
640x480 
0:19:17
282 MB
tetris0003.avi
640x480 
0:10:44
157 MB
tetris0004.mp4
320x240 
0:35:09
226 MB
tetris0005.mp4
640х480
0:13:20
196 MB
Пример второго:
Код: Выделить весь код
File Name.type:  0001google.wmv
Resolution:  640x480 
Duration:  00:10:40
Filesize:  196 MB
File Name.type:  0002google.wmv
Resolution:  640x480 
Duration:  00:14:05
Filesize:  157.45 MB
File Name.type:  0003google.wmv
Resolution:  640x480 
Duration:  00:14:43
Filesize:  282 MB
File Name.type:  0004google.wmv
Resolution:  640x480 
Duration:  00:12:21
Filesize:  226.61 MB
File Name.type:  0005google.wmv
Resolution:  640x480 
Duration:  00:19:17
Filesize:  196.45 MB
Это характеристики видео файлов (для каждого файла 4 строчки). Нужно найти файлы, схожие по размеру, и вывести информацию о них в отдельном тхт файле.
Выводимый файл формата "№ файла из 1ого тхт по порядку - № файлов из второго тхт, через запятую".
Похожие файлы ищутся по размеру, без учёта десятичных (только целое кол-во MB).

алгоритм такой: нужно брать каждый файл (по порядку) из 1ого тхт и искать все похожее по размеру во втором тхт, вывести, потом искать похожие для следующего файл и т.д, пока в первом тхт не достигнем конца списка..
Примечания:
номера файлов идут всегда по порядку (что в 1ом что во 2ом тхт), и они все четырехзначные.
нужно учитывать целое кол во MB, десятичные не нужно учитывать.
Если не найдено ничего похожего, то файл из 1ого тхт пропускается.
в тхт файлах будет примерно 1000 - 2000 файлов (на каждый файл по 4 строчки)

Если брать пример выше, то результирующий тхт должен быть таким:

Код: Выделить весь код
0001 - 0001, 0005
0002 - 0003
0003 - 0002
0004 - 0004
0005 - 0001, 0005

Отправлено: 21:24, 19-07-2022

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Powershell. Здесь предполагается, что нумерация файлов всегда начинается с единицы. Учтено.
Код: Выделить весь код
$txtFile1 = "C:\temp\1.txt"
$txtFile2 = "C:\temp\2.txt"
$resultFile = "C:\temp\result.txt"

function Get-ColNum {
param($txt,$marg)
[int]$c = (gc "$txt")[0] -replace '.+(\d{4}).+','$1'
    (gc "$txt") -match "$marg" -replace '[^\d\.]+' -replace '\..+' |% {
        $res += ,[pscustomobject]@{
            num = $c.tostring("0000")
            value = $_
        }
    $c++
    }
$res
}

$txt1 = Get-ColNum "$txtFile1" " MB$"
$txt2 = Get-ColNum "$txtFile2" "^Filesize"

$result = $txt1 |% {
    if ($match = $txt2 |? value -eq $_.value) {
        "$($_.num) - $($match.num -join ', ')"
    }
}

$result > "$resultFile"
v2 - исправлено некорректное сравнение размера
v3 - учтена возможность наличия цифр в расширении

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Последний раз редактировалось DJ Mogarych, 09-08-2022 в 21:31. Причина: v3

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:24, 19-07-2022 | #2



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

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


Ветеран


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

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


DJ Mogarych, Спасибо, сейчас буду разбираться с результирующим файлом, он большой получился.. но так и должно быть

Отправлено: 04:56, 20-07-2022 | #3


Ветеран


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

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


DJ Mogarych, Проверил, у меня так получается, что скрипт сравнивает не только размеры в строке Filesize, но еще и ищет эти числа в строке "File Name.type:", если находит, ставит файл как похожий.. а также если к примеру в 1ом тхт файл 196 MB, а во втором файле попадается 1963 MB, этот файл тоже записывается как похожий.

к примеру изменим тестируемые файлы на

1:
Код: Выделить весь код
tetris0001.avi
640x480 
0:13:20
3 MB
tetris0002.wmv
640x480 
0:19:17
282 MB
tetris0003.avi
640x480 
0:10:44
157 MB
tetris0004.mp4
320x240 
0:35:09
226 MB
tetris0005.mp4
640х480
0:13:20
196 MB
2:
Код: Выделить весь код
File Name.type:  0001google.wmv
Resolution:  640x480 
Duration:  00:10:40
Filesize:  3 MB
File Name.type:  0002google.wmv
Resolution:  640x480 
Duration:  00:14:05
Filesize:  157.45 MB
File Name.type:  0003google.wmv
Resolution:  640x480 
Duration:  00:14:43
Filesize:  282 MB
File Name.type:  0004google.wmv
Resolution:  640x480 
Duration:  00:12:21
Filesize:  236.61 MB
File Name.type:  0005google.wmv
Resolution:  640x480 
Duration:  00:19:17
Filesize:  196.45 MB
результат сейас такой получается:
Код: Выделить весь код
0001 - 0001, 0003, 0004
0002 - 0003
0003 - 0002
0005 - 0005
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:52, 20-07-2022 | #4


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Поправил выше, пробуйте.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:24, 20-07-2022 | #5


Ветеран


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

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


DJ Mogarych, спасбо, теперь как нужно ищет

Отправлено: 13:25, 20-07-2022 | #6


Ветеран


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

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


Здравствуйте. А можно ещё вариант скрипта, чтобы учитывался полный размер файла (с десятыми и сотыми), а не только целое число..

т.е. размер может быть вида к примеру:
145 MB
169.63 MB
123.6 MB

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

Отправлено: 20:47, 08-08-2022 | #7


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Уберите из функции в скрипте
Код: Выделить весь код
-replace '\..+'

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 09:03, 09-08-2022 | #8


Ветеран


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

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


DJ Mogarych, спасибо, все четко, есть маленький сбой у меня, но это происходит, только если первый файл в 1ом или втором (или в двух) тхт, с расширением mp4. скрипт подставляет к номеру четверку, а потом с этого номера стартует.
вот пример:


Код: Выделить весь код
tetris0001.mp4
640x480 
0:13:20
196.69 MB
tetris0002.mp4
640x480 
0:19:17
282 MB
tetris0003.mp4
640x480 
0:10:44
157 MB
tetris0004.mp4
320x240 
0:35:09
226 MB
tetris0005.mp4
640х480
0:13:20
196 MB
Код: Выделить весь код
File Name.type:  0001google.wmv
Resolution:  640x480 
Duration:  00:10:40
Filesize:  196 MB
File Name.type:  0002google.mp4
Resolution:  640x480 
Duration:  00:14:05
Filesize:  157.45 MB
File Name.type:  0003google.mp4
Resolution:  640x480 
Duration:  00:14:43
Filesize:  282 MB
File Name.type:  0004google.mp4
Resolution:  640x480 
Duration:  00:12:21
Filesize:  226.61 MB
File Name.type:  0005google.mp4
Resolution:  640x480 
Duration:  00:19:17
Filesize:  196.69 MB
результат:
Код: Выделить весь код
0014 - 0005
0015 - 0003
0018 - 0001
или наоборот, во 2ом тхт:
Код: Выделить весь код
tetris0001.avi
640x480 
0:13:20
196.69 MB
tetris0002.mp4
640x480 
0:19:17
282 MB
tetris0003.mp4
640x480 
0:10:44
157 MB
tetris0004.mp4
320x240 
0:35:09
226 MB
tetris0005.mp4
640х480
0:13:20
196 MB
Код: Выделить весь код
File Name.type:  0001google.mp4
Resolution:  640x480 
Duration:  00:10:40
Filesize:  196 MB
File Name.type:  0002google.mp4
Resolution:  640x480 
Duration:  00:14:05
Filesize:  157.45 MB
File Name.type:  0003google.mp4
Resolution:  640x480 
Duration:  00:14:43
Filesize:  282 MB
File Name.type:  0004google.mp4
Resolution:  640x480 
Duration:  00:12:21
Filesize:  226.61 MB
File Name.type:  0005google.mp4
Resolution:  640x480 
Duration:  00:19:17
Filesize:  196.69 MB
результат:
Код: Выделить весь код
0001 - 0018
0002 - 0016
0005 - 0014
Я так понял Всё зависит от первого файла, а остальные неважно С каким расширением.

Отправлено: 17:32, 09-08-2022 | #9


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Поправил скрипт выше, пробуйте.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:57, 09-08-2022 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Сравнить два текстовых файла и вывести результат

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - [решено] Сравнить два текстовых файла, с исключением повторяющихся строк KoRn0509 Скриптовые языки администрирования Windows 4 04-11-2020 11:12
CMD/BAT - Как сравнить разницу в двух текстовых документах и вывести разницу в новый текстовый mrusklon Скриптовые языки администрирования Windows 6 31-10-2019 17:05
CMD/BAT - [решено] Сравнить два текста и вывести результат shao Скриптовые языки администрирования Windows 2 12-09-2011 10:30
[решено] Как сравнить два текстовых файла и выявить изменения assch AutoIt 1 09-09-2010 23:25
как сравнить два звуковых файла alexra Видео и аудио: обработка и кодирование 8 31-07-2007 00:42




 
Переход