Здравствуйте, Аноним, Вы писали:
А>в одном Treeview отражена структура folder_1 А>в другом Treeview отражена структура folder_2
А>пытаюсь получить результат сравнения двух Treeview
А>тоесть хочю узнать соответсвует ли структура папки отображонная в TreeView1 структуре папки отображонной в Treeview2
Здравствуйте, 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 мне всё равно , надо просто сравнить совпадает ли структура каталогов
Здравствуйте, Аноним, Вы писали:
А>пуская items.text каждого noda или childa будут отличятся в обеих Treeview мне всё равно , надо просто сравнить совпадает ли структура каталогов
...
А>пуская 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);
Если дети узлов уже отсортированы, то алгоритм перебора-сравнения может быть немного другой.
Здравствуйте, mikkri, Вы писали:
M>Здравствуйте, jhfrek, Вы писали:
J>>каждый node представь в виде полного пути — 'folder1\subfolder1_1\...', а затем сравни 2 StringList'а
M>Не очень здорово будет. Сравнение деревьев и сравнение текстов — разные операции, соответственно, и алгоритмы нужны разные.
Да ладно, если человеку нужно сравнить два каталога (допустим для дифференциального backup или синхронизации), то это вполне рабочий метод, ИМНО
Здравствуйте, Аноним, Вы писали:
re>> Если задача такая простая — напиши сам!
А>вопервых, писать за меня никого непросил, А>а совет во всяком случае не помешалбы
А>но если на этом обрываеться суть этого потока, то прощу в будущем не отвечять на такого рода вопросы таким видом ответа
А>!!! тратите свое время за зря !
Смешно, когда аноним учит члена форума правильному поведению в форуме.