|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] умный поиск-сравнение и замена в списках |
|
|
Любой язык - [решено] умный поиск-сравнение и замена в списках
|
![]() Новый участник Сообщения: 23 |
Мои познания в программировании (78 год, вечерний факультет) ограничены словами "блок-схема", "Go to", "If" и "End". Поэтому с большим пиететом бродил по форуму, но понял, что из разных заготовок не смогу собрать решение для своей задачи. А задача, я думаю, актуальна для многих: как навести порядок среди музыкальных файлов и не потерять при этом плейлисты?, т.е. в первом приближении:
возможно ли в списке отделить имя файла от пути (попутно очистив от шелухи в виде цифр, +, _,-, и т.д.), затем найти достаточно точное соответствие этому имени в списке и выдать на гора свой список - "новый плейлист", в котором будут прописаны найденные соответствия уже с новыми путями? Решаются ли такие задачи? Может для этих целей есть уже готовые решения, и я стучусь в открытые двери? С уважением, Baranius. |
|
Отправлено: 02:00, 25-05-2012 |
![]() Новый участник Сообщения: 23
|
Профиль | Отправить PM | Цитировать Да, да. Оно вроде так стройненько и логично. И, думаю, это будет проще и надежнее (не будет проблемы с ...пустые поля "|||" на "|~|~|")
|
Отправлено: 00:01, 02-06-2012 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 415
|
Профиль | Отправить 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 |
![]() Новый участник Сообщения: 23
|
Профиль | Отправить PM | Цитировать Цитата:
...|"8<C@ >4@8357||| (у меня дальше этого значения не создавался csv файл). Но мне не терпится проверить Ваше творение, попробую приготовить тяжелый тест. Главное самому не запутаться, спасибо заранее. |
|
Отправлено: 13:39, 02-06-2012 | #23 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать Цитата Baranius:
|
|
Отправлено: 14:37, 02-06-2012 | #24 |
![]() Новый участник Сообщения: 23
|
Профиль | Отправить PM | Цитировать ...многоуважаемый 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 |
![]() Новый участник Сообщения: 23
|
Профиль | Отправить 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 |
![]() Новый участник Сообщения: 23
|
Профиль | Отправить PM | Цитировать Так, на всякий случай, может кто забредёт, да ответит на последний вопрос:
- позволяет ли алгоритм скрипта найти все совпадающие значения в списке "index.txt" (коих бывает и три, и четыре...) и записать их в вывод, или он построен так, что останавливает поиск на первом же найденном совпадении, считая, что задача выполнена? Что поделать, музыкант я. Откуда и вопросы. |
Отправлено: 21:58, 14-06-2012 | #27 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|