Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] умный поиск-сравнение и замена в списках (http://forum.oszone.net/showthread.php?t=235327)

Baranius 25-05-2012 02:00 1922143

умный поиск-сравнение и замена в списках
 
Мои познания в программировании (78 год, вечерний факультет) ограничены словами "блок-схема", "Go to", "If" и "End". Поэтому с большим пиететом бродил по форуму, но понял, что из разных заготовок не смогу собрать решение для своей задачи. А задача, я думаю, актуальна для многих: как навести порядок среди музыкальных файлов и не потерять при этом плейлисты?, т.е. в первом приближении:
возможно ли в списке
старый плейлист
F:\_беспорядок\Гости\03Горовец_-_Ночным_Белградом.mp3
F:\_беспорядок\Гости\05-Gettin' In The Mood.mp3
F:\_беспорядок\Гости\06 - Маски Шоу - Догонялки (шляпки).mp3
F:\_беспорядок\Гости\012. Машина Времени - День Рождения.mp3
F:\_беспорядок\Гости\_ Катя Огонек - Воля - это жизнь.mp3
F:\_беспорядок\Гости\Bitch - Сука.mp3
F:\_беспорядок\Гости\Dan Balan&Брежнева - Лепестки Слез.mp3
F:\_беспорядок\Гости\Dj Slon feat Катя - Я Не Дам.mp3
F:\_беспорядок\Гости\Билан - Я Просто Люблю Тебя.mp3
F:\_беспорядок\Гости\Виктория - Винтаж.mp3
F:\_беспорядок\Гости\Елка - Прованс.mp3
F:\_беспорядок\Гости\Жанна Бичевская_-_Храни вас Бог!.mp3
F:\_беспорядок\Гости\ Катя Огонек - Белая тайга.mp3
F:\_беспорядок\Гости\Макаревич - Марионетки.mp3
F:\_беспорядок\Масленица\06 Весну звали (дети под народную).mp3
F:\_беспорядок\Масленица\07 Жавороночки, прилетите (нар).mp3
F:\_беспорядок\укр_ALL\+ХУРСЕНКО ВЯЧЕСЛАВ-ТАТО ТАТО(+).mp3
F:\_беспорядок\укр_ALL\04 - Гоп ца-ца (укр+) коса.mp3
F:\_беспорядок\укр_ALL\009 - ВЕСиЛЬНА ПОЛЬКА.mp3
F:\_беспорядок\укр_ALL\Горилку пью.mp3
F:\_беспорядок\укр_ALL\ДО СТОЛУ гей наливайте (обрезать).mp3
F:\_беспорядок\фирма\12 When The Hurt Is love.mp3
F:\_беспорядок\фирма\12-A change is gonna come.mp3
F:\_беспорядок\фирма\13 Give It Up To Love.mp3
F:\_беспорядок\фирма\_9,5 недель.mp3
F:\_беспорядок\фирма\Alexandra Stan - Mr Saxobeat.mp3
F:\_беспорядок\фирма\Alexandra Stan - Mr Saxobeat (RMX).mp3
F:\_беспорядок\фирма\Brian Setzer Orchestra - Don't Trust A Woman (In A Blac.mp3
F:\_беспорядок\фирма\Brian Setzer Orchestra - Don't Trust A Woman (RMX).mp3

отделить имя файла от пути (попутно очистив от шелухи в виде цифр, +, _,-, и т.д.), затем найти достаточно точное соответствие этому имени в списке
упорядочненные файлы на диске (Artist - Title)
E:\_порядок\work\Тамада\9,5 Недель - свад (ред).mp3
E:\_порядок\USA\abcdE\Alexandra Stan - Mr Saxobeat.mp3
E:\_порядок\USA\abcdE\Alexandra Stan - Mr Saxobeat (RMX).mp3
E:\_порядок\RU\# abc - xyz\Bitch - Сука.mp3
E:\_порядок\USA\abcdE\Brian Setzer - Don't Trust A Woman.mp3
E:\_порядок\USA\abcdE\Brian Setzer - Don't Trust A Woman (RMX).mp3
E:\_порядок\USA\abcdE\Brian Setzer - Gettin' In The Mood.mp3
E:\_порядок\RU\# abc - xyz\Dan Balan&Брежнева - Лепестки Слез.mp3
E:\_порядок\RU\# abc - xyz\Dj Slon&Катя - Я Не Дам.mp3
E:\_порядок\USA\klmnO\Lucky Peterson - A Change Is Gonna Come.mp3
E:\_порядок\USA\klmnO\Lucky Peterson - Compared To What.mp3
E:\_порядок\USA\klmnO\Mcclain Sam - When The Hurt Is Love.mp3
E:\_порядок\USA\pqrsT\Sam Mcclain - Give It Up To Love.mp3
E:\_порядок\USA\pqrsT\Stan - Mr Saxobeat.mp3
E:\_порядок\RU\абвгД\Билан - Я Просто Люблю Тебя.mp3
E:\_порядок\RU\абвгД\Билан - Я Так Люблю Тебя (М).mp3
E:\_порядок\RU\абвгД\Бичевская - Храни Вас Бог.mp3
E:\_порядок\RU\абвгД\Виктория - Винтаж.mp3
E:\_порядок\RU\абвгД\Гей Наливайте - До Столу.mp3
E:\_порядок\RU\абвгД\Горовец - Ночным Белградом.mp3
E:\_порядок\RU\ежзиК\Елка - Около Тебя.mp3
E:\_порядок\RU\ежзиК\Елка - Прованс.mp3
E:\_порядок\RU\лмноП\Макаревич - Марионетки.mp3
E:\_порядок\RU\лмноП\Маски Шоу - Догонялки.mp3
E:\_порядок\work\Национальные\Масленица\Масленица - Весну Звали.mp3
E:\_порядок\work\Национальные\Масленица\Масленица - Жавороночки.mp3
E:\_порядок\work\юбилей\Машина Времени - День Рождения.mp3
E:\_порядок\RU\лмноП\Огонек - Белая Тайга.mp3
E:\_порядок\RU\лмноП\Огонек - Воля-Это Жизнь.mp3
E:\_порядок\work\Национальные\UA\Укр - Весильна Полька.mp3
E:\_порядок\work\Национальные\UA\Укр - Гоп Ца-Ца.mp3
E:\_порядок\work\Национальные\UA\Укр - Горилку Пью.mp3
E:\_порядок\RU\хцчшщэюЯ\Хурсенко - Тато.mp3
E:\_порядок\RU\хцчшщэюЯ\Хурсенко - Ты простишь меня+.mp3

и выдать на гора свой список - "новый плейлист", в котором будут прописаны найденные соответствия уже с новыми путями?

Решаются ли такие задачи? Может для этих целей есть уже готовые решения, и я стучусь в открытые двери?

С уважением, Baranius.

Iska 25-05-2012 07:36 1922172

Цитата:

Цитата Baranius
Решаются ли такие задачи? »

Без:
Цитата:

Цитата Baranius
попутно очистив от шелухи в виде цифр, +, _,-, и т.д. »

— решаются. С ним — нет. Тем паче, что в реальности у Вас к «шелухе» относится много больше. И я слабо представляю себе, как можно автоматически сопоставить имя:
Код:

+ХУРСЕНКО ВЯЧЕСЛАВ-ТАТО ТАТО(+).mp3
имени:
Код:

Хурсенко - Тато.mp3
Или:
Код:

04 - Гоп ца-ца (укр+) коса.mp3
и:
Код:

Укр - Гоп Ца-Ца.mp3
2All…
SoundLike не предлагать, речь именно про автоматическое сопоставление.

Anonymоus 25-05-2012 08:48 1922191

Мысли вслух - а что, если перед приведением файлов в порядок (переименование и сортировка), получить их хэши (MD5), соотнести с текущими именами файлов, построив этакий массив md5-имя, затем привести файлы в порядок, получить через For /R все отсортированные файлы, ещё раз получить md5 уже отсортированных файлов, и затем разбирать плейлисты, вытягивая из них старое имя, соотнося его с хэшем из массива, и затем подбирая нужный хэш из новых, отсортированных файлов, строя плейлист уже с новыми путями и именами?

Iska 25-05-2012 10:16 1922231

Цитата:

Цитата Anonymоus
Мысли вслух - а что, если… »

Вполне гоже. Боюсь только, что мы уже имеем фактом, что «поезд уже уехал».

Baranius 25-05-2012 13:00 1922344

Как я вижу этот "умный поиск-сравнение" (вот тебе и блок-схема)

- во-первых определиться, что список "старый плейлист" - это набор строк из "полных путей к файлам *.mp3";
- обратиться к первой строке;
- выделить имя файла из полного пути;
- исключить из этого имени все ненужное: цифры, +, _,-, и т.д.
- разделить имя на составляющие его слова (используя к примеру "пробел" как разделитель);
- сравнить полученные составляющие со списком "упорядочненные файлы на диске - (Artist - Title)" вот это, думаю, самое трудное - почти что Гугл получается;
- при совпадении всех слов (5-ти, 4-х, 3-х, 2-х - это будет степень точности) в одной строке списка "упорядочненные файлы на диске - (Artist - Title)", записать определенным способом (об этом позже) эту строку вместе с путем в список "новый плейлист";
- GoTo ко второй строке.
Эдак, лихо, по дилетански. Делов то!

Да! И насчет: ХУРСЕНКО ВЯЧЕСЛАВ-ТАТО ТАТО(+), а нельзя ли провести сначала поиск по одному слову - "ХУРСЕНКО", а затем в уже найденных совпадениях искать "ВЯЧЕСЛАВ", затем - "ТАТО", т.е. по очереди?

Iska 25-05-2012 15:10 1922428

Цитата:

Цитата Baranius
- сравнить полученные составляющие со списком "упорядочненные файлы на диске - (Artist - Title)" вот это, думаю, самое трудное - почти что Гугл получается; »

Не трудное, а нереальное. Автоматизации точно не выйдет. Проще и быстрее создать плей-листы вручную заново.

Baranius 29-05-2012 11:24 1924354

Не хочется сдаваться.
Anonymоus подсказал хорошую идею насчет контрольной суммы (MD5). Есть в плейлисте уникальное значение - (длительность в мсек), которое можно использовать как аналог MD5. Вот вид строки плейлиста:

1|полный путь|исполнитель|альбом|жанр|назв. песни|длительность мсек|размер байт)|№ трэка|год|44100|битрейт|каналы

Длительность в мсек получается как 6-ти значное число и совпадения будут очень редки. Задача сводится к поиску одинаковых значений поля "длительность в мсек" в двух списках: 1 - может содержать только |длительность мсек|, 2 - |длительность мсек|полный путь| Возможно ли это?

Anonymоus 29-05-2012 11:51 1924374

Baranius, имеющиеся утилиты (mp3info-win) не позволяют получить длительность в миллисекундах, только в секундах. Пример получения длительности:
Код:

mp3info -p "%S" "QNTAL - Flamma.mp3"
Вот тут описан алгоритм рассчета длительности в миллисекундах, исходя из количества фреймов и битрейта, но как на мой взгляд, bat для реализации этого - не лучший выбор. Не забывайте, что подобный подсчет придется проводить для каждого файла.
Можно бы было попробовать организовать поиск, используя кроме старого имени из плейлиста, еще и информацию из IDv3 тегов (если они у вашей музыкальной коллекциии были прописаны), но лично я не хочу браться за эту задачу, успех её мне видится весьма сомнительным, учитывая затраченное время, проще будет пересоздать плейлисты вручную, а ведь автоматизация процесса призвана именно уменьшить затраченное время, а не увеличивать его.

Baranius 29-05-2012 16:00 1924524

Уважаемый Anonymоus!
Плеер AIMP сам генерирует плейлисты такого вида как я выложил выше и длительность там записана в виде 6-ти значного числа - сек+мсек, поэтому я и подумал, что этот параметр может послужить заменой MD5.
Вопрос не в том, как получить значение (длительности в данном случае), а как сравнить (соотнести) два списка с одинаковыми значениями в графе "длительность", но с разными значениями в графе "полный путь к файлу".

Anonymоus 29-05-2012 16:07 1924526

Baranius, хорошо, что вы уточнили, каким плеером был создан плейлист. AIMP сохраняет в .plc, кодировка файла UTF-16 LE. Сейчас посмотрю, как можно разобрать плейлист такого формата.

Anonymоus 29-05-2012 17:13 1924554

Для тестирования я использовал вот такой плейлист
Код:

<Test:-1>
1|D:\Downloads\Woodscream\2010 - Pentadrama [EP]\01 - Равновесие.mp3|Woodscream|Pentadrama [EP]|Folk Metal|Равновесие|210782|8432434|01/05|2010|44100|320|2
1|D:\Downloads\Woodscream\2010 - Pentadrama [EP]\02 - Аббат Джон.mp3|Woodscream|Pentadrama [EP]|Folk Metal|Аббат Джон|222249|8891144|02/05|2010|44100|320|2
1|D:\Downloads\Woodscream\2010 - Pentadrama [EP]\03 - Чёрная смерть.mp3|Woodscream|Pentadrama [EP]|Folk Metal|Чёрная смерть|180244|7210948|03/05|2010|44100|320|2
1|D:\Downloads\Woodscream\2010 - Pentadrama [EP]\04 - Баллада о реке Шэннон.mp3|Woodscream|Pentadrama [EP]|Folk Metal|Баллада о реке Шэннон|198765|7951781|04/05|2010|44100|320|2
1|D:\Downloads\Woodscream\2010 - Pentadrama [EP]\99 - Test.mp3|Woodscream|Pentadrama [EP]|Folk Metal|Test|999999|8606932|99/99|2010|44100|320|2
1|D:\Downloads\Woodscream\2010 - Pentadrama [EP]\05 - Аконит.mp3|Woodscream|Pentadrama [EP]|Folk Metal|Аконит|215144|8606932|05/05|2010|44100|320|2

и вот такой индекс-файл с новыми путями и длительностью, составление которого остается за вами - у меня нету консольных утилит под windows, умеющих выдавать длительность в милисекундах
Код:

D:\Music\Folk Metal\Woodscream\Pentadrama [2010]\Равновесие.mp3|[210782]
D:\Music\Folk Metal\Woodscream\Pentadrama [2010]\Аббат Джон.mp3|[222249]
D:\Music\Folk Metal\Woodscream\Pentadrama [2010]\Чёрная смерть.mp3|[180244]
D:\Music\Folk Metal\Woodscream\Pentadrama [2010]\Баллада о реке Шэннон.mp3|[198765]
D:\Music\Folk Metal\Woodscream\Pentadrama [2010]\Аконит.mp3|[215144]

Как видите, его формат прост - Путь|[Длительность, в мсек]
В плейлист специально внесена ошибка - трек, который отсутствует в индекс-файле. Обработка осуществляется следующим скриптом:
Код:

@Echo Off
SetLocal EnableDelayedExpansion

Set OldPList=test.plc
Set Output=new.plc
Set IndexFile=index.txt

rem Переписываем заголовок файла в новый плейлист
For /F "usebackq delims=" %%A In ("%OldPList%") Do (
    Echo %%A>"%Output%"
    GoTo Break
)
:Break

rem Разбираем строки старого плейлиста на составляющие
Echo Processing "%OldPList%"...
For /F "usebackq skip=1 tokens=1,2,3,4,5,6,7,8,9,10,11,12 delims=^|" %%A In ("%OldPList%") Do (
    Set NewFilePath=
rem Ищем строку с таким же временем в индекс-файле
    For /F "tokens=1 delims=^|" %%P In ('Type "%IndexFile%"^|Find "[%%G]"') Do (
        Set NewFilePath=%%P
    )
        Echo Search for %%C - %%F
rem Генерируем строку нового плейлиста или пишем старую с добавкой пометки
rem В случае успешного поиска совпадения меняем только путь, в случае ошибки
rem дописываем ERROR к отображаемому имени
    If Not "!NewFilePath!"=="" (
        Echo %%A^|!NewFilePath!^|%%C^|%%D^|%%E^|%%F^|%%G^|%%H^|%%J^|%%K^|%%L>>"%Output%"
    ) Else (
        Echo %%A^|%%B^|ERROR %%C^|%%D^|%%E^|ERROR %%F^|%%G^|%%H^|%%J^|%%K^|%%L>>"%Output%"
        Echo    ERROR: "%%G" not found in %IndexFile%
    )
)
Echo All done
Pause

Важно! И старый плейлист, и индекс-файл, и батник должны быть в одинаковой кодировке. У плейлистов .plc это UTF-16 LE, батник в такой кодировке недопустим, поэтому я выбрал UTF-8 без BOM и перевел все три файла в неё. После запуска батник генерирует новый плейлист, в точности повторяющий старый, только с исправленными путями. Там, где соответствия не найдено (помните умышленно внесённую в тестовый плейлист ошибку?) к имени и исполнителю дописывается ERROR, что четко видно при просмотре плейлиста аимпом. После этого не забудьте перевести свежесозданный плейлист в его оригинальную кодировку, иначе вас ждут проблемы с кириллическими именами файлов и путями.

Baranius 29-05-2012 17:54 1924599

Вы, что, живете здесь? Так быстро отвечаете!!
А я уже, собственно получил результат (спасибо Вашему форуму), правда кружным путем:
- нашел статью http://altblog.ru/quality-control-keywords/, скачал оттуда скрипт для Excel-я
- плейлисты перевёл в .csv файл (| - как разделитель)
- открыл и отредактировал их под скрипт
- получил результат, но... радости никакой - замучился с кодировками (не знал, что это так важно), замучил две программы (notepad ++, excel)

и вот только что наткнулся на этот топик http://forum.oszone.net/thread-211516.html - задача очень похожая. Ринулся проверять и ... осёкся.
Не знаю какое расширение присвоить этому коду и чем его запустить (PowerShell установлена или надо самому установить - ищу)

Ценю Ваше внимание.
(это я, расторопный такой, писал еще не видя сообщения выше. Ну и скорость, я думаю медленнее)

Anonymоus 29-05-2012 18:04 1924601

Цитата:

Цитата Baranius
Не знаю какое расширение присвоить этому коду и чем его запустить (PowerShell установлена или надо самому установить - ищу) »

Расширение - .ps1, сам PowerShell можно взять отсюда (для XP), а в семерке он вроде как по умолчанию установлен.

Baranius 29-05-2012 18:23 1924617

Цитата:

и вот такой индекс-файл с новыми путями и длительностью, составление которого остается за вами - у меня нету консольных утилит под windows, умеющих выдавать длительность в милисекундах
А никаких консольных утилит и не надо. Нужно просто создать новый плейлист из упорядоченных (к примеру: D:\Music\Folk Metal\Woodscream\Pentadrama - Равновесие.mp3) файлов и формат индекс-файла - это формат AIMP-го плейлиста

поэтому вопрос: Set IndexFile=index.txt можно ли заменить на index.plc, который я спокойно могу создать из упорядоченных файлов? Да, а у Вас, я так понял, расширение нужно присвоить .vbs?

(опять не успел) спасибо за ответ насчет PowerShell.

Anonymоus 29-05-2012 18:25 1924620

Цитата:

Цитата Baranius
и формат индекс-файла - это формат AIMP-го плейлиста »

Как-то не подумал о возможности использовать для этого сам AIMP.
Но вам придется убрать оттуда ненужные поля и заключить длительность в квадратные скобки. Что впрочем, совсем не трудно
Код:

If Exist index.txt Del index.txt
For /F "usebackq tokens=2,7 delims=^|" %%A In ("test.plc") Do (
        Echo %%A^|[%%B]>>index.txt
)

или использовать плейлист (в соответствующей кодировке, естественно) напрямую, подредактировав скрипт из 11 поста.

Baranius 29-05-2012 18:48 1924631

Цитата:

...напрямую, подредактировав скрипт из 11 поста
неужели я кажусь таким умным? Всё, что я могу - это положить два плейлиста и батник (все таки расширение не *.vbs, а *.bat - я правильно понял) в одну папку, если это нужно, и гордо нажать Enter на батнике
Попробую разобраться. Еще раз спасибо!

Baranius 29-05-2012 23:43 1924760

Ух, ты!!
Эта железяка отзывается на мои телодвижения!
Несколько кривовато, но я уже ничего не соображаю, чтобы это исправить. Чувствую - не удержусь от вопросов (на самом деле должно было звучать так - ни фига я сам не сделаю, придется опять кланяться).
Спасибо, Anonymоus!!!

Anonymоus 30-05-2012 00:03 1924769

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

Baranius 01-06-2012 23:43 1926465

А вот и поклоны.
Всё это время разбирался с батником
Код:

If Exist index.txt Del index.txt
For /F "usebackq tokens=2,7 delims=^|" %%A In ("index.plc") Do (
        Echo %%A^|[%%B]>>index.txt)

ведь синтаксиса не знаю, есть одна смекалка.
Два дня ушло, чтобы поменять "tokens=2,7" на "tokens=2,6" и ещё день, чтобы догадаться заполнить пустые поля "|||" на "|~|~|" в строках такого вида -
1|E:\_порядок\USA\pqrsT\Stan - Mr Saxobeat.mp3|||Other|Stan - Mr Saxobeat|194899|7796376|..., потому что вместо поля |длительность-194899| в index.txt записывалось поле |размер-7796376|.
И вот пару часов назад нашел фриварную программку CSVed, с помощью которой я очень просто подготовил файл "index.txt".
Это я к тому, что я вряд ли смогу переписать основной батник, зато легко теперь могу подогнать заготовки к одному виду (три поля):
1|полный путь|длительность - old.plc
1|полный путь|[длительность] - index.plc (или .txt)
(CSVed сохраняет в ANSI, нужно ли перекодировать?).
Дальше идёт нижайший поклон с просьбой подправить батник, под эти условия, пожалуйста!

Кстати, в Вашем решении есть отличный побочный результат - поиск одинаковых по длительности файлов. И большая вероятность того, что это действительно одинаковые песни, только по разному названы и лежащие в разных местах. Это ж сколько места на диске может освободиться! А в мировом масштабе?

Anonymоus 01-06-2012 23:49 1926473

Уточните пожалуйста, вы хотите и старый, и новый плейлисты перевести в формат "1|полный путь|длительность" с помощью CSVed, и нужно переписать основной батник именно под такой формат?

Baranius 02-06-2012 00:01 1926481

Да, да. Оно вроде так стройненько и логично. И, думаю, это будет проще и надежнее (не будет проблемы с ...пустые поля "|||" на "|~|~|")

Anonymоus 02-06-2012 05:49 1926520

Baranius, поправил скрипт.
Код:

@Echo Off
SetLocal EnableDelayedExpansion

Set OldPList=test.plc
Set Output=new.plc
Set IndexFile=index.txt

rem Переписываем заголовок файла в новый плейлист
For /F "usebackq delims=" %%A In ("%OldPList%") Do (
    Echo %%A>"%Output%"
    GoTo Break
)
:Break

rem Разбираем строки старого плейлиста на составляющие
Echo Processing "%OldPList%"...
For /F "usebackq skip=1 tokens=1,2,3 delims=^|" %%A In ("%OldPList%") Do (
    Set NewFilePath=
rem Ищем строку с таким же временем в индекс-файле
    For /F "tokens=2 delims=^|" %%P In ('Type "%IndexFile%"^|Find "%%C"') Do (
        Set NewFilePath=%%P
    )
        Echo Search for %%B
rem Генерируем строку нового плейлиста
    If Not "!NewFilePath!"=="" (
        Echo %%A^|!NewFilePath!^|%%C>>"%Output%"
    ) Else (
        Echo %%A^|%%B^|%%C^|%%D>>"Error.log"
        Echo    ERROR: "%%B" not found in %IndexFile%, write to error.log
    )
)
Echo All done
Pause

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

Baranius 02-06-2012 13:39 1926663

Цитата:

...он сам потом пересоздает недостающие поля
Я тоже об этом подумал: задача - проще, решение - надежнее. К тому же в тэгах попадаются записи типа
...|"8<C@ >4@8357||| (у меня дальше этого значения не создавался csv файл). Но мне не терпится проверить Ваше творение, попробую приготовить тяжелый тест. Главное самому не запутаться, спасибо заранее.

Anonymоus 02-06-2012 14:37 1926693

Цитата:

Цитата Baranius
в тэгах попадаются записи типа ...|"8<C@ >4@835 »

Это из-за неправильной кодировки. Как я уже упоминал, родной для таких плейлистов формат - UTF-16 LE

Baranius 02-06-2012 17:28 1926770

Вложений: 1
...многоуважаемый Anonymоus!!
Огромное Вам Спасибо! Я получаю кучу удовольствия от этого занятия.
Батник чудесно работает. Я приготовил всё к тесту в таком примерно виде:
Код:

OLD.plc    INDEX.plc      NEW.plc
  песня_1      песня_1      песня_1
              песня_1
              песня_1
  песня_2        нет        .log
  песня_3      песня_3      песня_3
  песня_3                  песня_3
  песня_4      песня_4      песня_4

хотел учесть все варианты, которые могут возникнуть после наведения порядка на диске. Песни с одинаковым номером - это действительно одинаковые, но по разному обозванные и лежащие в разных местах (Юрий Антонов, Антонов Юрий и просто Антонов)
И вот теперь мне интересно, почему батник, когда встречает три одинаковых файла (песня_1 (на рис. - Mr Saxobeat), не записывает их в результат (NEW.plc) - это было бы здорово, это тот отличный побочный результат (поиск дубликатов), который был бы очень полезен. Всё-таки нужен ещё один "if" в батнике, типа, если
значение из OLD.plc встречается в INDEX.plc два, три.., n-раз, мы все n строчек записываем в NEW.plc, заменив первое поле у них, с 1 на 0. И тогда в плейлисте эти строки будут отображаться как выключенные из проигрывания файлы (см. рис). Визуально - всё очень наглядно, а за счет второй строчки (настраиваемый вид) и информативно. Оценив файлы тут же, из плейлиста, дубликаты можно отправить в корзину.
И, если можно, оставьте старый вариант с ненайденным значением (песня_2 - на рис."Елка - Прованс") можно без ERRORa - просто перепишите его без изменений в NEW.plc (визуально в проигрывателе она будет обращать на себя внимание, и может это действительно нужная песня, которую в пылу борьбы за порядок на диске я удалил). Собственно и LOG хорошее решение, но в плане удобства первый вариант был нагляднее - все делать можно в окне плейлиста.
Уф, не быть мне программистом. Я только это сообщение писал часа два. А насчет моих хотелок.. так они хотелки и есть. Всё уже работает!!!

Baranius 08-06-2012 12:22 1930557

Обжегшись на работе скрипта из темы поиска дубликатов (http://forum.oszone.net/thread-235875-2.html), решил проверить работу Вашего скрипта на реальных данных (index.txt = 15 000 строк, test.txt = 50 строк), боясь, что и тут начнутся тормоза. Ничуть не бывало. За несколько секунд был выдан результат. Я очень рад, ведь дубликаты можно искать и сторонними программами, коих тьма, а аналога Вашему скрипту я нигде не видел.
Теперь последний вопрос и тему можно считать закрытой:
- - позволяет ли алгоритм Вашего скрипта найти все совпадающие значения в списке "index.txt" (коих бывает и три, и четыре...) и записать их в вывод, или он построен так, что останавливает поиск на первом же найденном совпадении, считая, что задача выполнена?
- - т.е., для поиска всех совпадений нужно применять другое решение или можно модифицировать Ваше?
С уважением, Baranius

Baranius 14-06-2012 21:58 1934378

Так, на всякий случай, может кто забредёт, да ответит на последний вопрос:
- позволяет ли алгоритм скрипта найти все совпадающие значения в списке "index.txt" (коих бывает и три, и четыре...) и записать их в вывод, или он построен так, что останавливает поиск на первом же найденном совпадении, считая, что задача выполнена?
Что поделать, музыкант я. Откуда и вопросы.


Время: 13:19.

Время: 13:19.
© OSzone.net 2001-