Поиск одинаковых файлов

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
PAVEL_USER
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 13.10.2006 (Пт) 18:04

Поиск одинаковых файлов

Сообщение PAVEL_USER » 03.04.2007 (Вт) 21:20

Здравствуйте...
Проблема вот в чем:
Я осуществил поиск файлов с расширением *.txt (например)
Записал полный путь файлов в массив (mass1() допустим)
Затруднение в том, чтобы определить количество файлов с одинаковым именем. Как мне реализовать это?

SkySh@rk
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 03.04.2007 (Вт) 22:44

Сообщение SkySh@rk » 03.04.2007 (Вт) 22:54

Можно попробовать через двухмерный масcив :shock:

For i= 1 to ubound(array,1)
for j=1 to ubound(array,1)
if array(i,1)=array(j,1) then array(i,2)=array(i,2)+1
next j
next i

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 04.04.2007 (Ср) 7:26

SkySh@rk, стоило бы подумать прежде чем.

PAVEL_USER, как то так:

Код: Выделить всё
For i = LBound(mass1) to UBound(mass1) - 1
    For j = i+1 To UBound(mass1)
        If mass1(i) = mass1(j) Then
            cMatch = cMatch + 1
        End If
    Next j
Next i
Весь мир матрица, а мы в нем потоки байтов!

SkySh@rk
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 03.04.2007 (Вт) 22:44

Сообщение SkySh@rk » 04.04.2007 (Ср) 8:04

!Viper! писал(а):SkySh@rk, стоило бы подумать прежде чем.

Не спорю.... после того как выключил комп, вспомнил пару не точностей.

!Viper!, ваш код сработает только если есть одно повторяющееся название.... лучше так

Код: Выделить всё
For i= 1 to ubound(mass1,1) -1
For j=i+1 to ubound(mass1,1)
  if mass1(i,1)=mass1(j,1) then
     mass1(i,2)=mass1(i,2)+1
  end if
next j
next i


а потом поиск максимальных значений mass1(i,2)

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 04.04.2007 (Ср) 8:11

Мой код сработает для любого количества совпадающих имен. другое дело, что он просто посчитает количество совпадающих имен. Можно при необходимости усложнить его, чтобы он считал совпадения конкретных имен, но это уж забота автора.

Добавлено позжее

Можно использовать два массива - один исходный с именами файлов (массив строк), а второй массив будет содержать число повторений для каждого имени (массив Integer или же Long), а двумерный в данном случае можно только типа Variant, что не есть гуд.
Весь мир матрица, а мы в нем потоки байтов!

SkySh@rk
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 03.04.2007 (Вт) 22:44

Сообщение SkySh@rk » 04.04.2007 (Ср) 10:39

!Viper! писал(а):Мой код сработает для любого количества совпадающих имен. другое дело, что он просто посчитает количество совпадающих имен. Можно при необходимости усложнить его, чтобы он считал совпадения конкретных имен, но это уж забота автора.


Я примерно это и хотел сказать.

!Viper! писал(а):Можно использовать два массива - один исходный с именами файлов (массив строк), а второй массив будет содержать число повторений для каждого имени (массив Integer или же Long), а двумерный в данном случае можно только типа Variant, что не есть гуд.


Я к сожаления не так хорошо знаю VB... :(
Я просто пытался указать направление в котором двигаться :?

PAVEL_USER
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 13.10.2006 (Пт) 18:04

Сообщение PAVEL_USER » 04.04.2007 (Ср) 21:31

Благодарю за предложенные варианты, но, к сожалению, при большом количестве элементов массива цикл выполняется долгое время.

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 05.04.2007 (Чт) 11:22

Перед поиском дубликатов отсортировать массив по именам файлов. Алгоритмом, сортирующим быстрее, чем O(n^2), желательно :)
Быть... или не быть. Вот. В чём вопрос?


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 29

    TopList