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

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

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

Аватара для Baranius

Новый участник


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

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


Мои познания в программировании (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.

Отправлено: 02:00, 25-05-2012

 

Аватара для Baranius

Новый участник


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

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


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

Отправлено: 00:01, 02-06-2012 | #21



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

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


Старожил


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

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


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
Такие урезанные до трех полей плейлисты в аимпе работают замечательно, он сам потом пересоздает недостающие поля.
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:49, 02-06-2012 | #22


Аватара для Baranius

Новый участник


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

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


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

Отправлено: 13:39, 02-06-2012 | #23


Старожил


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

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


Цитата Baranius:
в тэгах попадаются записи типа ...|"8<C@ >4@835 »
Это из-за неправильной кодировки. Как я уже упоминал, родной для таких плейлистов формат - UTF-16 LE
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:37, 02-06-2012 | #24


Аватара для Baranius

Новый участник


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

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


Изображения
Тип файла: jpg отключенные дубликаты (хотелка).jpg
(84.9 Kb, 9 просмотров)

...многоуважаемый 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, 04-06-2012 в 03:53.


Отправлено: 17:28, 02-06-2012 | #25


Аватара для Baranius

Новый участник


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

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


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

Отправлено: 12:22, 08-06-2012 | #26


Аватара для Baranius

Новый участник


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

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


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

Отправлено: 21:58, 14-06-2012 | #27



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход