|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] умный поиск-сравнение и замена в списках |
|
Любой язык - [решено] умный поиск-сравнение и замена в списках
|
![]() Новый участник Сообщения: 23 |
Мои познания в программировании (78 год, вечерний факультет) ограничены словами "блок-схема", "Go to", "If" и "End". Поэтому с большим пиететом бродил по форуму, но понял, что из разных заготовок не смогу собрать решение для своей задачи. А задача, я думаю, актуальна для многих: как навести порядок среди музыкальных файлов и не потерять при этом плейлисты?, т.е. в первом приближении:
возможно ли в списке отделить имя файла от пути (попутно очистив от шелухи в виде цифр, +, _,-, и т.д.), затем найти достаточно точное соответствие этому имени в списке и выдать на гора свой список - "новый плейлист", в котором будут прописаны найденные соответствия уже с новыми путями? Решаются ли такие задачи? Может для этих целей есть уже готовые решения, и я стучусь в открытые двери? С уважением, Baranius. |
|
Отправлено: 02:00, 25-05-2012 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать Для тестирования я использовал вот такой плейлист
<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 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 |
Последний раз редактировалось Anonymоus, 29-05-2012 в 17:22. Отправлено: 17:13, 29-05-2012 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() Новый участник Сообщения: 23
|
Профиль | Отправить PM | Цитировать Вы, что, живете здесь? Так быстро отвечаете!!
А я уже, собственно получил результат (спасибо Вашему форуму), правда кружным путем: - нашел статью http://altblog.ru/quality-control-keywords/, скачал оттуда скрипт для Excel-я - плейлисты перевёл в .csv файл (| - как разделитель) - открыл и отредактировал их под скрипт - получил результат, но... радости никакой - замучился с кодировками (не знал, что это так важно), замучил две программы (notepad ++, excel) и вот только что наткнулся на этот топик http://forum.oszone.net/thread-211516.html - задача очень похожая. Ринулся проверять и ... осёкся. Не знаю какое расширение присвоить этому коду и чем его запустить (PowerShell установлена или надо самому установить - ищу) Ценю Ваше внимание. (это я, расторопный такой, писал еще не видя сообщения выше. Ну и скорость, я думаю медленнее) |
Отправлено: 17:54, 29-05-2012 | #12 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать |
Отправлено: 18:04, 29-05-2012 | #13 |
![]() Новый участник Сообщения: 23
|
Профиль | Отправить PM | Цитировать Цитата:
поэтому вопрос: (опять не успел) спасибо за ответ насчет PowerShell. |
|
Последний раз редактировалось Baranius, 29-05-2012 в 18:35. Отправлено: 18:23, 29-05-2012 | #14 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать Цитата Baranius:
Но вам придется убрать оттуда ненужные поля и заключить длительность в квадратные скобки. Что впрочем, совсем не трудно или использовать плейлист (в соответствующей кодировке, естественно) напрямую, подредактировав скрипт из 11 поста. |
|
Последний раз редактировалось Anonymоus, 29-05-2012 в 18:31. Отправлено: 18:25, 29-05-2012 | #15 |
![]() Новый участник Сообщения: 23
|
Профиль | Отправить PM | Цитировать Цитата:
Попробую разобраться. Еще раз спасибо! |
|
Отправлено: 18:48, 29-05-2012 | #16 |
![]() Новый участник Сообщения: 23
|
Профиль | Отправить PM | Цитировать Ух, ты!!
Эта железяка отзывается на мои телодвижения! Несколько кривовато, но я уже ничего не соображаю, чтобы это исправить. Чувствую - не удержусь от вопросов (на самом деле должно было звучать так - ни фига я сам не сделаю, придется опять кланяться). Спасибо, Anonymоus!!! |
Отправлено: 23:43, 29-05-2012 | #17 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать Не за что, мне же не трудно, тем более, похожую проблему (сравнение списков) я уже как-то решал. На вопросы отвечу конечно, если они будут.
|
Отправлено: 00:03, 30-05-2012 | #18 |
![]() Новый участник Сообщения: 23
|
Профиль | Отправить PM | Цитировать А вот и поклоны.
Всё это время разбирался с батником 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, нужно ли перекодировать?). Дальше идёт нижайший поклон с просьбой подправить батник, под эти условия, пожалуйста! Кстати, в Вашем решении есть отличный побочный результат - поиск одинаковых по длительности файлов. И большая вероятность того, что это действительно одинаковые песни, только по разному названы и лежащие в разных местах. Это ж сколько места на диске может освободиться! А в мировом масштабе? |
Отправлено: 23:43, 01-06-2012 | #19 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать Уточните пожалуйста, вы хотите и старый, и новый плейлисты перевести в формат "1|полный путь|длительность" с помощью CSVed, и нужно переписать основной батник именно под такой формат?
|
Отправлено: 23:49, 01-06-2012 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|