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

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

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

Аватара для Baranius

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


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

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


Привет, всем.
Вот упрощённый вид задачи: в списке из ~10 000 строк (6,7-значные числа) найти повторяющиеся значения - дубликаты.
Решаема ли такая задача силами CMD\BAT, VBS скриптов или это уже из сферы БД, Excel-я?

Отправлено: 14:29, 03-06-2012

 

Старожил


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

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


Baranius, попробуйте вот это.
Код: Выделить весь код
@Echo Off
Set File=test.txt

rem Разбираем файл построчно
For /F "usebackq delims=" %%S In ("%File%") Do (
    rem Проводим в нём же поиск по отдельно взятой строке и получаем количество совпадений
    For /F "tokens=3 delims=: " %%C In ('Find /C "%%S" "%File%"') Do (
        rem Сортируем строки по разным спискам
        If "%%C"=="1" (
            Echo %%S>>"checked.txt"
        ) Else (
            Echo %%S>>"duplicated.txt"
        )
    )
)
В качестве файла допустимо указывать только относительный путь (чтобы избежать появления в строке, выдаваемой Find ещё одного двоеточия). Кроме того, есть некоторая неточность в поиске данным методом - например, Find найдет и пометит, как дубликат строку "123", если в файле ещё будут присутствовать строки "1234" и "a123"
Впрочем, для вашей задачи (поиск дубликатов песен по их длительности) это особой роли не играет, вероятность совпадения из-за такого поведения Find крайне ничтожна.

Последний раз редактировалось Anonymоus, 04-06-2012 в 15:48.

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:01, 03-06-2012 | #2



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

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


Ветеран


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

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


Цитата Baranius:
найти повторяющиеся значения - дубликаты. »
И что с ними делать?

Отправлено: 22:54, 03-06-2012 | #3


Аватара для Baranius

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


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

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


Цитата Iska:
найти повторяющиеся значения - дубликаты. »
И что с ними делать? »
- да Вы просто их найдите, и дайте об этом знать хоть списочком каким, хоть другим способом. Вопрос - возможно ли это силами CMD\BAT, VBS скриптов?

Отправлено: 01:42, 04-06-2012 | #4


Аватара для Baranius

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


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

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


Уважаемый Anonymоus, я рад Вас видеть в этой теме, которая навеяна нашим неравноправным общением по вопросу... "как не потерять старый плейлист после наведения порядка на диске" И чтобы не настаивать на
хотелке
почему батник, когда встречает три одинаковых файла (песня_1 (на рис. - Mr Saxobeat), не записывает их в результат (NEW.plc) - это было бы здорово, это тот отличный побочный результат (поиск дубликатов), который был бы очень полезен.

мне подумалось, что легче, для начала, избавиться от дубликатов, а потом уж приводить в порядок старый плейлист. Поэтому и появилась эта тема (я постеснялся вновь обращаться к Вам, к тому же правила форума - "один вопрос - одна тема")

Отправлено: 03:55, 04-06-2012 | #5


Аватара для Baranius

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


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

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


Спасибо, Anonymоus! Всё чудесно работает (взял только один столбец с длительностью и представил его как "test.txt"). Но вот с этим:
Цитата Anonymоus:
В качестве файла допустимо указывать только относительный путь »
я не справился, уж как я его (относительный путь) не подставлял. Подскажите, какого вида должна быть строка, чтобы я увидел результат содержащий уже и путь к файлу!?

Отправлено: 15:01, 04-06-2012 | #6


Старожил


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

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


Просто положите файл рядом со скриптом, и там, где указано "Set File=test.txt" - поставьте своё имя файла. Это и есть относительный путь, в отличии от абсолютного, когда путь полный, и начинается с указания диска.

Отправлено: 15:47, 04-06-2012 | #7


Аватара для Baranius

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


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

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


Я имел в виду другое, как теперь с помощью Вашего скрипта обнаружить дубликаты в моём списке состоящим из трёх столбцов-полей
"1|путь к файлу|длительность" ?
Ведь Ваш скрипт я проверял на списке , состоящем только из одного столбца - "длительность"

Отправлено: 16:37, 04-06-2012 | #8


Аватара для Baranius

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


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

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


Попробую ещё раз обратиться.
Ув. Anonymоus не сможете ли Вы подправить свой скрипт из 2 поста под список "test.txt" не с одним полем - "длительность", а с тремя полями вида:
"1|путь к файлу|длительность", чтобы я смог в результате увидеть дубликаты уже с их путями.
Благодарю.

Отправлено: 13:50, 05-06-2012 | #9


Старожил


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

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


Код: Выделить весь код
@Echo Off
Set File=test.txt
rem Разбираем файл построчно
For /F "usebackq delims=" %%S In ("%File%") Do (
    rem Выделяем из строки длительность
    For /F "tokens=3 delims=^|" %%L In ("%%S") Do (
        rem Проводим поиск по файлу в поисках такой же длительности
        For /F "tokens=3 delims=: " %%C In ('Find /C "|%%L" "%File%"') Do (
            rem Раскидываем строки по разным спискам
            If "%%C"=="1" (
                Echo %%S>>"checked.txt"
            ) Else (
                Echo %%S>>"duplicated.txt"
            )
        )
    )
)
Все дубликаты пишет в "duplicated.txt", а не повторяющиеся строки в "checked.txt". Для вашего удобства я сделал вывод не только повторяющейся длительности, а строки целиком - включая путь.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:17, 05-06-2012 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Система - Программы для поиска и удаления дубликатов файлов Alex Cop Программное обеспечение Windows 61 07-01-2018 12:00
Графика - [addons] Программы для поиска дубликатов изображений pahan22 Наборы обновлений для Windows XP/2003/Windows 7 7 12-04-2011 19:52
CMD/BAT - Удаление дубликатов при копировании Seryoga204 Скриптовые языки администрирования Windows 1 22-08-2010 17:01
Ищу программу для поиска файлов дубликатов VbInt Хочу все знать 10 20-10-2009 10:54
Чем можно воспользоваться для поиска дубликатов файлов. Igor_I Программное обеспечение Linux и FreeBSD 13 06-10-2008 21:19




 
Переход