|
1 / 1 / 0
Регистрация: 02.06.2012
Сообщений: 32
|
|
поиск дубликатов в списке04.06.2012, 18:32. Показов 6556. Ответов 24
Метки нет (Все метки)
Доброго здоровьица.
У меня такой вопрос, можно ли в списке (текстовый файл, ANSI) из 10-20 000 строк, вида 1|P|L (,где поле "1" - неизменно, поле "P" - это путь к файлу и поле "L" - это 6-7значные числа), найти все дубликаты в поле "L" и вывести результат таким же списком (1|P|L) в "duplicate.txt"? Буду рад любой информации
0
|
|
| 04.06.2012, 18:32 | |
|
Ответы с готовыми решениями:
24
Поиск дубликатов Поиск дубликатов |
|
|
||||||||||||||||
| 05.06.2012, 16:49 | ||||||||||||||||
|
Итак, сделал на VBA (Excel + ADO).
В файле - тестовый режим (исходные данные уже забиты на листе № 1): перед запуском пропишите правильно путь к файлам-получателям в строках:
1
|
||||||||||||||||
|
1 / 1 / 0
Регистрация: 02.06.2012
Сообщений: 32
|
|
| 05.06.2012, 23:36 [ТС] | |
|
Diskretor, с большим нетерпением ждал Вашего ответа, спасибо за внимание к моему вопросу. Теперь осталось установить Excel, узнать что такое ADO и я возьмусь за тестирование Вашего решения. Спасибо и за ответ в ветке по CMD/BAT файлам Поиск совпадений в списке (таблице), меня именно и интересовал этот вопрос: применение простых решений к файлам с большим объемом данных (я догадывался, что могут быть тормоза, хотя, честно, я за простые решения).
Для всех остальных скажу, что это решение я хочу применить к решению не новой задачи поиска дубликатов mp3 файлов, с использованием уникальных свойств плейлистов AIMPа (кому интересно - стучитесь). Надеюсь получится. Diskretor (и тут мелкими буквами - я от Вас не отстану), спасибо!
0
|
|
|
|
|||
| 06.06.2012, 00:09 | |||
|
DedJ, так если это не совсем закрытый проект, давайте в ЛС тот большой файл я хотя бы скорость проверю, если что подкручу.
А то раньше с большими базами никогда не работал (хоть это и не база). Не по теме: Чувствую придется в первую очередь наседать на продолжение изучения курса баз данных. ADO - это вспомогательна библиотека (ядро), которое позволяет обрабатывать большие массивы данных (БД) с помощью специальных SQL-запросов. Позволяет в секунды делать различные выборки, сортировки, удаление/добавление записей в базу данных.
0
|
|||
|
1 / 1 / 0
Регистрация: 02.06.2012
Сообщений: 32
|
|
| 07.06.2012, 01:40 [ТС] | |
|
Diskretor, проект простой: нужно упорядочить муз. файлы на диске и не потерять при этом родные, привычные плейлисты (я до сих пор поигрываю). С них-то все и началось. Строка п/листа AIMPa имеет вид: 1|полный путь|исполнитель|альбом|жанр|title|287660|9205923|№трека|год|44100|256|2. Всего 13 полей, но два из них уникальны - это длительность песни в мсек (L=287660) и размер в байтах (W=9205923). По этим полям (L и W) я собираюсь, на упорядочненном уже диске, найти новое поле "P" - полный путь к файлу, т.е. одним кликом обновить ПЛ. Батничек (правда сыроватый) уже имеется.
Также хотелось бы прибраться и удалить дубликаты с диска, используя поля (L и W), как основу для сравнения строк плейлиста (читай - файлов). Мне подумалось, что со списком, даже большим, машине будет легче работать, ан, нет. Батник ты отверг сразу, предложив связку Excel + ADO. Но теперь я не в теме и не могу судить о преимуществах твоего решения. Поэтому, действительно, я вышлю тебе тестовый файл, даже два: ~ 15 000 строк плейлиста на 4 и 3 (упрощ. - без размера) поля. Кстати, ты оказался прав - батник считал эти 15 000 строк полтора часа. Посмотрим, что выйдет у тебя? Удачи.
0
|
|
|
|
|
| 07.06.2012, 10:49 | |
|
Скажем, недостаток простого решения теперь ясен.
А вот недостаток связки офиса, БД в том, что 1) нужен сам офис 2) это будет уже не исполняемый файл EXE. Но если делать для себя, то можно назначить автоматический запуск макросов и при открытии этого документа он автоматически будет запускать Макрос, отрабатывать и сам закрываться.
0
|
|
|
|
|
| 07.06.2012, 12:45 | |
|
Итак, протестировал.
Файл all 3.plc. Кол-во записей (без заголовка): 14477, сортированных L: 6799. Время: 10,7 сек. Файл all 4.plc. Кол-во записей (без заголовка): 14477, сортированных L: 6799, L+W: 458. Время: 5,8 сек. PC: Intel E5700 2-Core 3 Ghz, средняя нагрузка 90%. Подредактировал код, добавил: 1) пропуск первой строки (<all:17>) при чтении исходного файла в БД. 2) Галочка для выбора возможности автозапуска макроса и автозакрытия Excel с сохранением изменений. 3) Таймер затраченного времени, инфо о количестве записей. 4) Путь к файлам задается на первом листе Эксель. 5) Кнопка очистки исходных и результирующих данных с листа Эксель. 6) Баг с незаполнением 4 столбца, нормальное отображение пустой строки вместо "#Н/Д". 7) Теперь результирующий файл не создается, если фильтр дубликатов выдал 0 записей. Результаты выборок присоединил.
1
|
|
|
1 / 1 / 0
Регистрация: 02.06.2012
Сообщений: 32
|
|
| 07.06.2012, 12:58 [ТС] | |
|
Diskretor, что представляет из себя ADO? EXEшник, DLLка? Может это - "ADO Component Suite, 2.6"? Не терпится закачать и испробовать макрос.
0
|
|
|
|
|
| 07.06.2012, 13:09 | |
|
С точки зрения файловой системы - это компонент MS Office, DLL-библиотека, которая постоянно подключена к книге (в редакторе макросов -> Tools-Preferences > Microsoft ActiveX Data Objects).
Работает на любом компьютере, где установлен офис, ничего дополнительно устанавливать или настраивать не нужно.
1
|
|
|
1 / 1 / 0
Регистрация: 02.06.2012
Сообщений: 32
|
|
| 07.06.2012, 21:29 [ТС] | |
|
Проследовал Вашим инструкциям, запустил первый вариант макроса и о, чудо - секунды вместо полутора часов обработки.
Отличный результат! Спасибо и Вам, и вашим консультантам (как же, читал, дошел до слова "конкатенация"... и вернулся в свой топик). Следует признать, что ставка на уникальность длит-ти песни в мсек (поле "L") не оправдалась и я рад, что вы сделали обработку по двум полям (L+W), хотя и в этом случае есть неожиданности - оказывается попадаются разные песни, но с одинаковой длительностью и весом (зеленеькие на скриншоте), видно и двух полей для сравнения мало. Как видите, я подстроил под себя вид плейлиста AIMPa и сейчас мне очень удобно чистить диск. Особенно удобно убирать дубли мелких файлов (фанфары, туши, заставочки - по 10-20 сек). Огромное спасибо. ("Я от Вас не отстану" видно надо поставить в подпись )
0
|
|
|
1 / 1 / 0
Регистрация: 02.06.2012
Сообщений: 32
|
|
| 08.06.2012, 13:34 [ТС] | |
|
Итак, дубли убраны, песенки культурно рассортированы и тут встает вопрос: как восстановить работоспособность старого плейлиста? Осилит ли связка Excel+ADO задачу синхронизации двух списков:
- в списке "index.plc" (полный список упорядоченных файлов на диске) построчно найти все совпадающие значения с полями L и W из списка "old.plc" (старый плейлист), ну, и вывести все совпадения в результат "new.plc"? Призыв: все, хоть раз столкнувшиеся с такой проблемой, давайте с низким поклоном попросим знатоков о помощи! Так и не разогнувшись, отправляю этот крик ![]() (может это уже отдельная тема?)
0
|
|
|
1 / 1 / 0
Регистрация: 02.06.2012
Сообщений: 32
|
||
| 09.06.2012, 00:48 [ТС] | ||
|
0
|
||
|
|
|
| 09.06.2012, 03:01 | |
|
Итак, вникнув в суть дела, просмотрев Ваш пост №10, проект мне понравился: решил добавить функционал:
1. Изменил оформление 2. Добавил отдельное отображение имен файлов 3. Если книга лежит рядом с файлом-источником, полный путь к нему можно не указывать (это касается и других путей). 4. Файлы можно физически удалять двойным кликом по колонке E с подтверждением (или правой без, если выбрана такая настройка). 5. Функция проверки всех записей об их физическом существовании на диске и выделение цветом. 6. Функция удаления с листа записей, которых реально нет на диске. 7. После удаления файлов и записей плейлисты выборок, а также полный плейлист (под новым именем All.plc) можно перезаписать - кнопка "перезаписать плейлисты"). Думаю, дальше сами разберетесь. Баги (надеюсь нет, немного протестил), предложения ... пожалуйста. Возможности VBA безграничны ![]() P.S. Если будет неприемлимо долго работать функция выделения записей о несуществующих файлов, теоретически можно оптимизировать на 30% (т.к. сейчас оно проверяет отдельно для каждого листа, вместо выделения уже проверенных). Да, и не путать "Лист" (Лист Excel) и "Плейлист" - разные вещи.
1
|
|
|
1 / 1 / 0
Регистрация: 02.06.2012
Сообщений: 32
|
|
| 09.06.2012, 19:41 [ТС] | |
|
... ну, Вы даёте! (три раза). Потестил последний вариант макроса - отлично, класс, но...
- у нас машины разные (у меня старенькая AMD: 1,8 Мгц + 1 Гб памяти), поэтому 18,19 сек на экране торчит курсор в виде песочных часов, затем меняется на обыкновенный, успеваю заметить, что "only_L.plc" и "L+W.plc" появляются на диске Е и... машина виснет (я так думал). Через три минуты оживает и я вижу окно: (см. screen_1). "All.plc" (кстати, идентичен ли он вкладке "my_Source"?) на диске Е так и не появляется, но, самое интересное, что ни "All.plc", ни вкладка "my_Source" мне не нужны, ведь я ищу только дубли, а они родимые уже лежат в двух файлах ("only_L.plc" и "L+W.plc") на диске Е. Вывод: нужно оставлять на листе только две вкладки - "L_result" и "LW_Result", которые нужны для анализа, тогда может и тормозов не будет при формировании листа. Функционал: пункты 1-3 и особенно 4 - класс, 5-й - понравился, но я ведь работаю с только, что созданным источником "all 4.plc" и "Функция проверки всех..." не нужна, пункт 6-й обрабатывался 15 минут, словом пункты 5-7 только утяжеляют уже любимый мною макрос. А ваша идея "выделение цветом" очень бы пригодилась на вкладке "LW_Result" (см. screen_2) для визуального разделения количества дубликатов и более удобной ориентации-навигации по списку (правда, лучше б сереньким выделять). Такой вот анализ получился со стороны пользователя, спасибо Вам за ваши же усилия! И, если действительно, ломать - не строить, я прошу Вас убрать вкладку "my_Source" с листа и пункты 5-7 из функционала, пли-и-и-з.
0
|
|
|
|
||||||||||||
| 09.06.2012, 21:42 | ||||||||||||
|
Отсутствие у меня слабой машини - это как ни странно очень сказывается на возможностях предварительного теста программ и их качество.
Значит так: my_Source - это как системный лист. Убрать его нельзя. Потому что ядро БД, которое ищет дубликаты, берет информацию не из файла-источника, а именно с этого листа. Почему так: ADO не понимает специфический формат файла, поэтому он сначала парсится (разбивается по "|") на лист my_Source. Можно временно закомментировать этот блок апострофами вот так:
"Выборка дубликатов", удаление файлов-дубликатов, "Отметка на листе my_Source цветом файлов, которые не существуют (были удалены - желтый), существуют - зеленый. Кнопка "Удалить записи несуществующих файлов" - удаляет с листа my_Source эти записи. Кнопка "Перезаписать плейлист" - записывает в файл All.plc все, что теперь осталось на этом листе. Жаль, что алгоритм вышел тормозный (но варианты еще есть, например проверять файлы командой спец.библиотеки filesystem.object). Будет ли быстрее?... П.5. создавался, чтобы когда удалили файл, визуально отметить его отсутствие и при необходимости пересоздать плейлист. "Перезаписать плейлисты" - информация для All.plc - береться с листа my_Source (хотя да, согласен при таких скоростях сомнительно, проще его создать с помощью AIMP). Но у меня все работает идеально быстро. Кстати пробовали отключать антивирус на время работы? Также попробую добавить еще пару ускорителей. Добавлено через 6 минут Расскажите что и в каком порядке Вы делали? Добавлено через 5 минут Добавлено через 13 минут
0
|
||||||||||||
|
1 / 1 / 0
Регистрация: 02.06.2012
Сообщений: 32
|
|
| 09.06.2012, 23:23 [ТС] | |
|
С "my_Source" - ясно, колонка Е - вещь очень полезная, желательно оставить. Ну, а функционал 5-7 пункта Вы придумали здорово, но у меня тормоз (про антивирус забыл). А ведь мне для последующей работы как раз и нужен обработанный, уже без дубликатов "All.plc" (в 11 посте я его назвал "index.plc"), именно в нём я хочу найти песенку
"1|C:\MyFiles\Diskretor - Пойми меня.mp3|L=303145|W=5145632" из старого плейлиста (old.plc). Так как после наведения порядка на диске песня эта лежит уже в другом месте и "old.plc" не играет. Значит где-то среди десятка тысяч строк "All.plc" мне нужно найти одну с L=303145 и W=5145632, и в этой строке уже будет нужный мне новый путь к песенке - "1|D:\Порядок на диске\Diskretor - Пойми меня.mp3|L=303145|W=5145632". Строку надо вывести в файл "new.plc". Это последнее и, для музыкантов, очень важное звено в деле наведения порядка на диске и в плейлистах. Ведь плейлисты у нас нарабатываются годами. Задача эта - другая, поэтому я и спрашивал, не вынести ли её в отдельную тему Спасибо.
0
|
|
|
|
|||
| 09.06.2012, 23:58 | |||
|
Добавлено через 30 минут Т.е. я понял: Мы физически поудаляли песни-дубликаты. Некоторые песни переместили в другие папки. В идеале теперь нам нужен тот самый старый-добрый изначальный плейлист, только без удаленных дубликатов и с исправленными путям перемещенных песен. В общем для этого нужно сформировать правильно запрос SQL. Попробую повыспрашивать как он делается.
0
|
|||
|
1 / 1 / 0
Регистрация: 02.06.2012
Сообщений: 32
|
|
| 10.06.2012, 00:28 [ТС] | |
|
Щас проверю.
Результат ~ тот же: Время появления "only_L.plc" на диске Е - 14,39 сек -->> раздумья с 98% загрузкой процессора - 3мин 20 сек -> появление основного окна. Проверка наличия файлов - 30 сек. Удаление с листа записей - 16мин 30 сек (99% загрузка ЦП). Перезапись плейлиста - 50 сек.
0
|
|
| 10.06.2012, 00:28 | |
|
Помогаю со студенческими работами здесь
20
Поиск дубликатов Поиск дубликатов Поиск дубликатов в QStringList
Поиск дубликатов по критерию Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU
YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей.
Звучит. . .
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит:
токи, напряжения и их 1 и 2 производные при t = 0;. . .
|
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|