Показать полную графическую версию : [решено] Сравнить два текстовых файла и вывести результат
Alexander_88
19-07-2022, 21:24
Здравствуйте. Может кто - нибудь поможет задачку решить? Есть два 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
:)
DJ Mogarych
19-07-2022, 22:24
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 - учтена возможность наличия цифр в расширении
Alexander_88
20-07-2022, 04:56
DJ Mogarych, Спасибо, сейчас буду разбираться с результирующим файлом, он большой получился.. но так и должно быть :)
Alexander_88
20-07-2022, 09:52
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
DJ Mogarych
20-07-2022, 10:24
Поправил выше, пробуйте.
Alexander_88
20-07-2022, 13:25
DJ Mogarych, спасбо, теперь как нужно ищет :)
Alexander_88
08-08-2022, 20:47
Здравствуйте. А можно ещё вариант скрипта, чтобы учитывался полный размер файла (с десятыми и сотыми), а не только целое число..
т.е. размер может быть вида к примеру:
145 MB
169.63 MB
123.6 MB
Похожими файлы будут считаться только если размер полностью совпадает..
DJ Mogarych
09-08-2022, 09:03
Уберите из функции в скрипте
-replace '\..+'
Alexander_88
09-08-2022, 17:32
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
Я так понял Всё зависит от первого файла, а остальные неважно С каким расширением.
DJ Mogarych
09-08-2022, 17:57
Поправил скрипт выше, пробуйте.
Alexander_88
10-10-2022, 05:57
DJ Mogarych, спасибо, работает, только проверил :)
Alexander_88
11-10-2022, 21:47
Здравствуйте еще раз, пока применял скрипт на деле, возникла надобность еще одного варианта, сравнение не по размеру файла, а по длительности, можно ли такое сравнение реализовать?
на примере выглядит так:
tetris0001.avi
640x480
00:13:20
196.69 MB
tetris0002.mp4
640x480
00:19:17
282 MB
tetris0003.mp4
640x480
00:10:44
157 MB
tetris0004.mp4
320x240
00:35:09
226 MB
tetris0005.mp4
640х480
00: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:13:20
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
а результат уже такой:
0002 - 0005
0005 - 0002
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.