Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Заполнить рекурсивно дерево 
:(
    Опции темы
Andrey44
Дата 1.11.2007, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



Подскажите пожалуйста как рекурсивно заполнить дерево smile 

имеются строки
Код

strParser[0] = L"B/Filters/EdgeEnhance/1";
    strParser[1] = L"B/Filters/FrameInterpolator/1";
    strParser[2] = L"B/Filters/LineIndex/1";
    strParser[3] = L"B/Frequency";
    strParser[4] = L"B/Gain";
    strParser[5] = L"Cfm/AxialFilter/PowerIndex/1";
    strParser[6] = L"Cfm/AxialFilter/VTIndex/1";
    strParser[7] = L"Cfm/ColorMap/Baseline";
    strParser[8] = L"Cfm/ColorMap/Invert";


B и Cfm главные в дереве , все остальное внутри них.
Как это сделать? 


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
JackYF
Дата 1.11.2007, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: нет
Всего: 162



Цитата(Andrey44 @  1.11.2007,  16:21 Найти цитируемый пост)
рекурсивно заполнить дерево

какое дерево?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Andrey44
Дата 1.11.2007, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



Извиняюсь CTreeControl smile 


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
JackYF
Дата 1.11.2007, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: нет
Всего: 162



Цитата(Andrey44 @  1.11.2007,  18:36 Найти цитируемый пост)
Извиняюсь CTreeControl

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

То есть, каждая строка строит свою ветку, после такого алгоритма будет иметь нужное дерево.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Andrey44
Дата 1.11.2007, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



Это я все делаю, но так сказать вручную.
А мне надо с разной так сказать глубиной вложенности.
Чтоб работало независимо от количества вложений.


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
JackYF
Дата 1.11.2007, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: нет
Всего: 162



Цитата(Andrey44 @  1.11.2007,  19:00 Найти цитируемый пост)
Чтоб работало независимо от количества вложений

Не понял, а где в алгоритме зависимость от количества вложений?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Andrey44
Дата 2.11.2007, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



У меня есть сейчас максимум три вложения - и их я отрабатываю, 
Но если их будет больше, то моя функция работать не будет smile 


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
SenkraD
Дата 2.11.2007, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 4
Всего: 23



Andrey44, код функции приведи


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
Andrey44
Дата 2.11.2007, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



Вот функция. Но по-моему я запутался и уже и она работает не правильно smile 
Код

void CtreeParserDlg::FillTree()
{
    CString root, temp, text, sub_root, sub_temp, str_value;
    HTREEITEM    parent, sub_parent;

    root = strParser[0];
    root = root.Left(root.Find('/'));
    parent = _treeRTD.InsertItem(root,1,1);

    for(int i = 0; i < 9; i++){
        temp = strParser[i];
        temp = temp.Left(temp.Find('/'));
        if (root != temp){
            root = strParser[i];
            root = root.Left(root.Find('/'));
            parent = _treeRTD.InsertItem(root);
        }
        text = strParser[i];
        text = text.Right(text.GetLength() - text.Find('/') - 1);
        if(text.Find('/')!=-1){
            sub_temp = text;
            sub_temp = sub_temp.Left(sub_temp.Find('/'));
            if(sub_root != sub_temp){
                sub_root = text;
                sub_root = text.Left(text.Find('/'));
                sub_parent = _treeRTD.InsertItem(sub_root, parent);
            }
            CString str;
            str = strParser[i];
            str = str.Right(str.GetLength() - str.ReverseFind('/') - 1);
            _treeRTD.InsertItem(str, 0, 0, sub_parent);
            continue;
        }
        _treeRTD.InsertItem(text, 0, 0, parent);
    }
}



--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Andrey44
Дата 26.11.2007, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



Снова появилась та-же задача. Не удалось съехать smile Прошу помощи
Код

CString strParser[9];
        strParser[0] = L"B/Filters/EdgeEnhance/contr/one/1";
    strParser[1] = L"B/Filters/EdgeEnhance/contr/FrameInterpolator/one/1";
    strParser[1] = L"B/Filters/EdgeEnhance/contr/FrameInterpolator/two/1";
    strParser[2] = L"B/Filters/LineIndex/1";
    strParser[3] = L"B/Frequency/1";
    strParser[4] = L"B/Gain/1";
    strParser[5] = L"Cfm/AxialFilter/PowerIndex/1";
    strParser[6] = L"Cfm/AxialFilter/VTIndex/1";
    strParser[7] = L"Cfm/ColorMap/Baseline";
    strParser[8] = L"Cfm/ColorMap/Invert";// вот этим надо заполнить CTreeCtrl

void CtreeParserDlg::FillTree()
{
    CString root, temp, text, sub_root, sub_temp, str_value;
    HTREEITEM    parent, sub_parent, tree;

    root = strParser[0];
    root = root.Left(root.Find('/'));
    parent = _treeRTD.InsertItem(root,1,1);

    for(int i = 0; i < 9; i++){

        int pos = 0;
        CString temp, leftStr;
        CString str;

        temp = strParser[i];
        str = strParser[i].Left(strParser[i].Find('/'));

        if (root != str){
            root = strParser[i];
            root = root.Left(root.Find('/'));
            parent = _treeRTD.InsertItem(str);
        }

        temp = temp.Right(temp.GetLength() - temp.Find('/')-1);
        leftStr = temp.Left(temp.Find('/'));

        if(leftStr.GetLength()==0){
            leftStr = temp;
            sub_parent = _treeRTD.InsertItem(leftStr, parent);
            continue;
        }
        
        if(sub_root != leftStr){
            sub_parent = _treeRTD.InsertItem(leftStr, parent);
            sub_root = leftStr;
            tree = sub_parent;
        }else{sub_parent = tree;}

        while (temp.Find('/')!=-1)
        {

            temp = temp.Right(temp.GetLength() - temp.Find('/')-1);
            leftStr = temp.Left(temp.Find('/'));

            if(leftStr.GetLength()!=0)
                sub_parent = _treeRTD.InsertItem(leftStr, sub_parent);
            else continue;
        }

         _treeRTD.InsertItem(temp, 0, 0, sub_parent);
    }
}


Я делаю вот так , но почему-то не работает.
Не все вложения получаются как надо. А надо как в эксплорере дерево.
Помогите пожалуйста smile 


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Andrey44
Дата 26.11.2007, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



Господа программисты, неужели никто никогда такое не делал? smile 


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Andrey44
Дата 28.11.2007, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



 smile Всем спасибо , за помощь. Разобрался сам.
Если кому надо обращайтесь , напишу код как заполнить дерево.
Сам писал 2 дня, но разобрался. smile 


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.1178 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.