сравнить два TreeView
От: Аноним  
Дата: 02.07.03 11:29
Оценка:
в одном Treeview отражена структура folder_1
в другом Treeview отражена структура folder_2

пытаюсь получить результат сравнения двух Treeview

тоесть хочю узнать соответсвует ли структура папки отображонная в TreeView1 структуре папки отображонной в Treeview2
Re: сравнить два TreeView
От: mikkri Великобритания  
Дата: 02.07.03 11:46
Оценка:
Здравствуйте, Аноним, Вы писали:

А>в одном Treeview отражена структура folder_1

А>в другом Treeview отражена структура folder_2

А>пытаюсь получить результат сравнения двух Treeview


А>тоесть хочю узнать соответсвует ли структура папки отображонная в TreeView1 структуре папки отображонной в Treeview2


А в чем проблема или вопрос?
Re: сравнить два TreeView
От: jhfrek Россия  
Дата: 02.07.03 12:20
Оценка:
Здравствуйте, Аноним, Вы писали:

А>в одном Treeview отражена структура folder_1

А>в другом Treeview отражена структура folder_2

каждый node представь в виде полного пути — 'folder1\subfolder1_1\...', а затем сравни 2 StringList'а
Re[2]: сравнить два TreeView
От: mikkri Великобритания  
Дата: 02.07.03 13:33
Оценка:
Здравствуйте, jhfrek, Вы писали:

J>каждый node представь в виде полного пути — 'folder1\subfolder1_1\...', а затем сравни 2 StringList'а


Не очень здорово будет. Сравнение деревьев и сравнение текстов — разные операции, соответственно, и алгоритмы нужны разные.

Хотя если ограничиться только сравнением "добавилось", "удалилось", то и сравнение двух списков путей по дереву сойдет.

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

Вероятно, еще много пожеланий на тему можно сочинить.

Но что же хотел спросить автор темы???
Re[3]: сравнить два TreeView
От: Аноним  
Дата: 02.07.03 15:15
Оценка:
да, может это и ростаенкая вещ, но то что я пробовал не дало нужного результата.

вот в чём дело

есть две папки

первая папка содержит в себе одну папку
вторая папка содержит в себе две папки

есть процедурка, procedure_например(basedir:str; folder structure:TStringList )

процедурка в ходе работы собирает информацию о папках которые входят в директорию basedir


после выполнения процедуры stringlist(folder structure) превращяеться в дерево

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

пуская items.text каждого noda или childa будут отличятся в обеих Treeview мне всё равно , надо просто сравнить совпадает ли структура каталогов

что то немогу такого простого решения подыскать
Re[4]: сравнить два TreeView
От: mikkri Великобритания  
Дата: 03.07.03 04:48
Оценка:
Здравствуйте, Аноним, Вы писали:

А>что то немогу такого простого решения подыскать


Если задача такая простая — напиши сам!
Re[5]: сравнить два TreeView
От: Аноним  
Дата: 03.07.03 06:40
Оценка:
re> Если задача такая простая — напиши сам!


вопервых, писать за меня никого непросил,
а совет во всяком случае не помешалбы

но если на этом обрываеться суть этого потока, то прощу в будущем не отвечять на такого рода вопросы таким видом ответа

!!! тратите свое время за зря !
Re[4]: сравнить два TreeView
От: jhfrek Россия  
Дата: 03.07.03 06:55
Оценка:
Здравствуйте, Аноним, Вы писали:

А>пуская items.text каждого noda или childa будут отличятся в обеих Treeview мне всё равно , надо просто сравнить совпадает ли структура каталогов


То есть нужно понять совпадают ли два дерева?
Re[4]: сравнить два TreeView
От: mrhru Россия  
Дата: 03.07.03 06:56
Оценка: 1 (1)
Здравствуйте, <Аноним>, Вы писали:

...

А>пуская items.text каждого noda или childa будут отличятся в обеих Treeview мне всё равно , надо просто сравнить совпадает ли структура каталогов


Рекурсивно обходим первое дерево и сравниваем узлы с узлами второго.


CompareNode(node1, node2)
  if node1.Text <> node2.Text then
        несовпадение узлов
    else
        
      for each subnode1 in node1.ChildNodes
            subnode2 = node2.FindChild(subnode1.Text);
            if subnode2 == null then
                во втором дереве отсутствует узел subnode1.Text
            else 
                CompareNode(subnode1, subnode2);
            endif
        endfor
        
        //теперь надо найти узлы в node2, которых нет в node1 
      for each subnode2 in node2.ChildNodes
            subnode1 = node1.FindChild(subnode2.Text);
            if subnode1 == null then
                во первом дереве отсутствует узел subnode2.Text
            endif
        endfor
        
    endif
    
//и начальный вызов 
CompareNode(root1, root2);


Если дети узлов уже отсортированы, то алгоритм перебора-сравнения может быть немного другой.
Re[3]: сравнить два TreeView
От: jhfrek Россия  
Дата: 03.07.03 06:58
Оценка: +1
Здравствуйте, mikkri, Вы писали:

M>Здравствуйте, jhfrek, Вы писали:


J>>каждый node представь в виде полного пути — 'folder1\subfolder1_1\...', а затем сравни 2 StringList'а


M>Не очень здорово будет. Сравнение деревьев и сравнение текстов — разные операции, соответственно, и алгоритмы нужны разные.


Да ладно, если человеку нужно сравнить два каталога (допустим для дифференциального backup или синхронизации), то это вполне рабочий метод, ИМНО
Re[6]: Offtopic
От: mikkri Великобритания  
Дата: 03.07.03 07:33
Оценка:
Здравствуйте, Аноним, Вы писали:

re>> Если задача такая простая — напиши сам!


А>вопервых, писать за меня никого непросил,

А>а совет во всяком случае не помешалбы

А>но если на этом обрываеться суть этого потока, то прощу в будущем не отвечять на такого рода вопросы таким видом ответа


А>!!! тратите свое время за зря !



Смешно, когда аноним учит члена форума правильному поведению в форуме.
Re: сравнить два TreeView
От: SEDEGOFF Россия www.srcsoft.com
Дата: 12.08.03 03:55
Оценка:
Скорее всего тебе придетьсь просто писать процедуру сравнения по узлам
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.