|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] умный поиск-сравнение и замена в списках |
|
|
Любой язык - [решено] умный поиск-сравнение и замена в списках
|
![]() Новый участник Сообщения: 23 |
Мои познания в программировании (78 год, вечерний факультет) ограничены словами "блок-схема", "Go to", "If" и "End". Поэтому с большим пиететом бродил по форуму, но понял, что из разных заготовок не смогу собрать решение для своей задачи. А задача, я думаю, актуальна для многих: как навести порядок среди музыкальных файлов и не потерять при этом плейлисты?, т.е. в первом приближении:
возможно ли в списке отделить имя файла от пути (попутно очистив от шелухи в виде цифр, +, _,-, и т.д.), затем найти достаточно точное соответствие этому имени в списке и выдать на гора свой список - "новый плейлист", в котором будут прописаны найденные соответствия уже с новыми путями? Решаются ли такие задачи? Может для этих целей есть уже готовые решения, и я стучусь в открытые двери? С уважением, Baranius. |
|
Отправлено: 02:00, 25-05-2012 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 07:36, 25-05-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать Мысли вслух - а что, если перед приведением файлов в порядок (переименование и сортировка), получить их хэши (MD5), соотнести с текущими именами файлов, построив этакий массив md5-имя, затем привести файлы в порядок, получить через For /R все отсортированные файлы, ещё раз получить md5 уже отсортированных файлов, и затем разбирать плейлисты, вытягивая из них старое имя, соотнося его с хэшем из массива, и затем подбирая нужный хэш из новых, отсортированных файлов, строя плейлист уже с новыми путями и именами?
|
Отправлено: 08:48, 25-05-2012 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Anonymоus:
|
|
Отправлено: 10:16, 25-05-2012 | #4 |
![]() Новый участник Сообщения: 23
|
Профиль | Отправить PM | Цитировать Как я вижу этот "умный поиск-сравнение" (вот тебе и блок-схема)
- во-первых определиться, что список "старый плейлист" - это набор строк из "полных путей к файлам *.mp3"; - обратиться к первой строке; - выделить имя файла из полного пути; - исключить из этого имени все ненужное: цифры, +, _,-, и т.д. - разделить имя на составляющие его слова (используя к примеру "пробел" как разделитель); - сравнить полученные составляющие со списком "упорядочненные файлы на диске - (Artist - Title)" вот это, думаю, самое трудное - почти что Гугл получается; - при совпадении всех слов (5-ти, 4-х, 3-х, 2-х - это будет степень точности) в одной строке списка "упорядочненные файлы на диске - (Artist - Title)", записать определенным способом (об этом позже) эту строку вместе с путем в список "новый плейлист"; - GoTo ко второй строке. Эдак, лихо, по дилетански. Делов то! Да! И насчет: ХУРСЕНКО ВЯЧЕСЛАВ-ТАТО ТАТО(+), а нельзя ли провести сначала поиск по одному слову - "ХУРСЕНКО", а затем в уже найденных совпадениях искать "ВЯЧЕСЛАВ", затем - "ТАТО", т.е. по очереди? |
|
Последний раз редактировалось Baranius, 25-05-2012 в 13:07. Отправлено: 13:00, 25-05-2012 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Baranius:
|
|
Отправлено: 15:10, 25-05-2012 | #6 |
![]() Новый участник Сообщения: 23
|
Профиль | Отправить PM | Цитировать Не хочется сдаваться.
Anonymоus подсказал хорошую идею насчет контрольной суммы (MD5). Есть в плейлисте уникальное значение - (длительность в мсек), которое можно использовать как аналог MD5. Вот вид строки плейлиста: 1|полный путь|исполнитель|альбом|жанр|назв. песни|длительность мсек|размер байт)|№ трэка|год|44100|битрейт|каналы Длительность в мсек получается как 6-ти значное число и совпадения будут очень редки. Задача сводится к поиску одинаковых значений поля "длительность в мсек" в двух списках: 1 - может содержать только |длительность мсек|, 2 - |длительность мсек|полный путь| Возможно ли это? |
Отправлено: 11:24, 29-05-2012 | #7 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать Baranius, имеющиеся утилиты (mp3info-win) не позволяют получить длительность в миллисекундах, только в секундах. Пример получения длительности:
Вот тут описан алгоритм рассчета длительности в миллисекундах, исходя из количества фреймов и битрейта, но как на мой взгляд, bat для реализации этого - не лучший выбор. Не забывайте, что подобный подсчет придется проводить для каждого файла. Можно бы было попробовать организовать поиск, используя кроме старого имени из плейлиста, еще и информацию из IDv3 тегов (если они у вашей музыкальной коллекциии были прописаны), но лично я не хочу браться за эту задачу, успех её мне видится весьма сомнительным, учитывая затраченное время, проще будет пересоздать плейлисты вручную, а ведь автоматизация процесса призвана именно уменьшить затраченное время, а не увеличивать его. |
Отправлено: 11:51, 29-05-2012 | #8 |
![]() Новый участник Сообщения: 23
|
Профиль | Отправить PM | Цитировать Уважаемый Anonymоus!
Плеер AIMP сам генерирует плейлисты такого вида как я выложил выше и длительность там записана в виде 6-ти значного числа - сек+мсек, поэтому я и подумал, что этот параметр может послужить заменой MD5. Вопрос не в том, как получить значение (длительности в данном случае), а как сравнить (соотнести) два списка с одинаковыми значениями в графе "длительность", но с разными значениями в графе "полный путь к файлу". |
Отправлено: 16:00, 29-05-2012 | #9 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать Baranius, хорошо, что вы уточнили, каким плеером был создан плейлист. AIMP сохраняет в .plc, кодировка файла UTF-16 LE. Сейчас посмотрю, как можно разобрать плейлист такого формата.
|
Отправлено: 16:07, 29-05-2012 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Поиск, остановка процесса, поиск и замена файла на разных дисках | Gawr33 | Скриптовые языки администрирования Windows | 11 | 23-04-2011 23:09 | |
CMD/BAT - [решено] Поиск, остановка процесса, поиск и замена файлов на разных дисках | 4zz | Скриптовые языки администрирования Windows | 2 | 21-02-2011 16:07 | |
CMD/BAT - Сравнение и замена в файлах .txt | Deep2007 | Скриптовые языки администрирования Windows | 4 | 19-11-2010 19:08 | |
CMD/BAT - [решено] Поиск с условием и сравнение | 63RW51 | Скриптовые языки администрирования Windows | 3 | 19-10-2010 07:25 |
|