Ejemplo n.º 1
0
 //удаляет нулевых детей =)
 public static void DelNullChilds(TagItem tag)
 {
     for (int i = 0; i < tag.childrens.Count; i++)
     {
         if (tag.childrens[i] == null)
         {
             tag.childrens.RemoveAt(i);
         }
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Поиск по имени тега
        /// </summary>
        /// <param name="tag"></param>
        /// <param name="str"></param>
        /// <returns></returns>
        //public TagItem FindTag(TagItem tag, string str)
        //{
        //    TagItem help = tag;
        //    if (help.name.CompareTo(str) == 0)
        //    {
        //        findOk = true;                  //##криво.
        //        find = help;
        //        return help;
        //    }
        //    if (help.left != null && !findOk) FindTag(help.left, str);
        //    if (help.right != null && !findOk) FindTag(help.right, str);
        //    if (findOk) return find;
        //    else return null;
        //}

        /// <summary>
        /// добавление тега
        /// </summary>
        //public void AddTagItem(TagItem tag)
        //{
        //    TagItem addItem = new TagItem();
        //    addItem = WriteTagData(addItem);
        //    if (tag.left == null)
        //    {
        //        tag.left = addItem;
        //        return;
        //    }
        //    if (tag.right == null)
        //    {
        //        tag.right = addItem;
        //        return;
        //    }
        //    addItem.left = tag.left;
        //    tag.left = addItem;
        //    Console.WriteLine("Тег добавлен!");
        //    return;
        //}
        /// <summary>
        /// Метод удаления тега.
        /// </summary>
        /// <param name="tag">откуда его удаляем</param>
        /// <param name="delTag">какой тэг удаляем</param>
        //public TagItem DelTagItem(TagItem tag, TagItem delTag)
        //{
        //    string[] arrNames = delTag.Fullpath.Split('.'); //из свойства Путь нашего тэга находим его родителя
        //    string parentName = arrNames[arrNames.Length - 2];
        //    findOk = false;
        //    TagItem parentTag = FindTag(tag, parentName);
        //    if (delTag.left == null && delTag.right == null)        //если у удаляемого нет наследников - всё зачищаем
        //    {
        //        if (parentTag.left == delTag) parentTag.left = null;
        //        if (parentTag.right == delTag) parentTag.right = null;
        //    }
        //    if (delTag.left == null && delTag.right != null)        //если у удаляемого есть наследник справа - добавляем его к родителю
        //    {
        //        if (parentTag.left == delTag) parentTag.left = delTag.right;
        //        if (parentTag.right == delTag) parentTag.right = delTag.right;
        //    }
        //    if (delTag.left != null && delTag.right == null)        //если у удаляемого есть наследник слева - добавляем его к родителю
        //    {
        //        if (parentTag.left == delTag) parentTag.left = delTag.left;
        //        if (parentTag.right == delTag) parentTag.right = delTag.left;
        //    }
        //    if (delTag.left != null && delTag.right != null)        //если у удаляемого есть ОБА наследника - добавляем одного к родителю, второго куда ни будь в конец
        //    {
        //        if (parentTag.left == delTag)
        //        {
        //            parentTag.left = delTag.left;
        //            TagItem end = FindEndOfBranch(delTag);
        //            end.left = delTag.right;
        //        }
        //        if (parentTag.right == delTag)
        //        {
        //            parentTag.right = delTag.right;
        //            TagItem end = FindEndOfBranch(delTag);
        //            end.left = delTag.left;
        //        }
        //    }
        //    Console.WriteLine("Тег удалён!");
        //    return tag;
        //}
        /// <summary>
        /// Метод для нахождения конца ветки
        /// </summary>
        /// <param name="tag">откуда будем искать</param>
        /// <returns></returns>
        //TagItem FindEndOfBranch(TagItem tag)
        //{
        //    TagItem end = tag;
        //    do
        //    {
        //        end = end.left;
        //    } while (end.left != null);
        //    return end;
        //}

        /// <summary>
        /// Прописываем пути и Level у каждого тега
        /// </summary>
        /// <param name="tag"></param>
        /// <param name="prev"></param>
        //public static void SetPaths(TagItem tag, string prev, int l = 1)
        //{
        //    if (tag != null)
        //    {
        //        if (prev.CompareTo("first") == 0)
        //        {
        //            tag.Fullpath = tag.name;
        //            tag.Level = 1;
        //        }
        //        else
        //        {
        //            tag.Fullpath = $"{prev}.{tag.name}";
        //            tag.Level = ++l;
        //        }
        //        SetPaths(tag.left, tag.Fullpath, tag.Level);
        //        SetPaths(tag.right, tag.Fullpath, tag.Level);
        //    }
        //}
        /// <summary>
        /// сохраняем в файл
        /// </summary>
        /// <param name="tag"></param>
        public void SaveTree(TagItem tag, string savePath)
        {
            XmlSerializer formatter = new XmlSerializer(typeof(TagItem));

            using (FileStream fs = new FileStream(savePath, FileMode.OpenOrCreate))
            {
                formatter.Serialize(fs, tag);
                //Console.WriteLine($@"Дерево сохранено в {savePath}.");
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// читаем из файла
        /// </summary>
        /// <returns></returns>
        public TagItem LoadTree(string loadPath)
        {
            XmlSerializer formatter = new XmlSerializer(typeof(TagItem));

            using (FileStream fs = new FileStream(loadPath, FileMode.OpenOrCreate))
            {
                TagItem newTagItems = (TagItem)formatter.Deserialize(fs);
                Console.WriteLine($@"Дерево прочитано из {loadPath}.");
                return(newTagItems);
            }
        }
Ejemplo n.º 4
0
 /// <summary>
 /// Печатает структуру дерева
 /// </summary>
 /// <param name="tag"></param>
 /// <param name="l">отступ от левого края</param>
 //public static void ShowTree(TagItem tag, int l)
 //{
 //    if (tag != null)
 //    {
 //        ShowTree(tag.left, l + 10);//переход к левому поддереву
 //        for (int i = 0; i < l; i++) Console.Write(" ");
 //        Console.WriteLine($"{tag.name}: {tag.data} L{tag.Level}");  //сюда можно добавить поля, которые необходимо видеть при печати
 //        ShowTree(tag.right, l + 10);//переход к правому поддереву
 //    }
 //}
 /// <summary>
 /// Вывод построчного списка тэгов – полный путь, уровень вложенности, тип, значение;
 /// </summary>
 /// <param name="tag"></param>
 public static void ShowTreeInLine(TagItem tag)
 {
     if (tag.childrens != null)
     {
         foreach (TagItem item in tag.childrens)
         {
             if (item == null)
             {
                 break;
             }
             Console.WriteLine($"{item.Fullpath}, L{item.Level}, {item.ShowType(item)}, {item.data} ");
             ShowTreeInLine(item);
         }
     }
 }
Ejemplo n.º 5
0
        /// <summary>
        /// Метод изменения имени тега
        /// </summary>
        /// <param name="tag">тег, имя которого надо изменить</param>
        /// <returns></returns>
        public void ChangeTagName(TagItem tag)
        {
            bool   ok = false;
            string newName;

            Console.WriteLine($"Введите новое имя тэга {tag.name}:");
            do
            {
                newName = Console.ReadLine();                                                        //проверяем на пустую строку или пробел - не очень названия для тега, думаю
                if (newName.CompareTo("") == 0 || newName.CompareTo(" ") == 0 || newName.Length < 2) //ну и длинна должна быть больше 2х символов
                {
                    ok = false;
                }
                else
                {
                    ok = true;
                }
            } while (!ok);
            tag.name = newName;
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Возвращает тип значения тэга
        /// </summary>
        /// <param name="tag"></param>
        /// <returns></returns>
        public string ShowType(TagItem tag)
        {
            string type = "none";//тип значения

            if (tag.data is double)
            {
                type = "double";
            }
            if (tag.data is int)
            {
                type = "int";
            }
            if (tag.data is bool)
            {
                type = "bool";
            }
            if (tag.data == null)
            {
                type = "none";
            }
            return(type);
        }
Ejemplo n.º 7
0
 /// <summary>
 /// Обновление путей в дереве
 /// </summary>
 /// <param name="tagTree"></param>
 public static void UpdatePaths(TagItem tagTree, string path = "first", int setLevel = 1)
 {
     if (path.CompareTo("first") == 0)
     {
         tagTree.Fullpath = tagTree.Name;
         tagTree.Level    = setLevel;
     }
     else
     {
         tagTree.Fullpath = $"{path}.{tagTree.Name}";
     }
     if (tagTree.childrens == null)  //проверка, если потомков нет - не выполняем дальше
     {
         return;
     }
     for (int nmbrOfChldrns = 0; nmbrOfChldrns < tagTree.ChildrensList.Count; nmbrOfChldrns++)
     {
         if (tagTree.childrens[nmbrOfChldrns] == null)   //проверка, если один из потомков нулевой - пропускаем его
         {
             continue;
         }
         UpdatePaths(tagTree.ChildrensList[nmbrOfChldrns], tagTree.Fullpath, tagTree.Level + 1);
     }
 }
Ejemplo n.º 8
0
 /// <summary>
 /// Возвращает значение тэга
 /// </summary>
 /// <param name="tag"></param>
 /// <returns></returns>
 public object ReadTagData(TagItem tag)
 {
     return(tag.data);
 }
Ejemplo n.º 9
0
 public TagStorage(TagItem tagTree)
 {
     Root = new TagItem();
     Root.ChildrensList.Add(tagTree);
 }
Ejemplo n.º 10
0
 public TagStorage()
 {
     Root = new TagItem();
 }
Ejemplo n.º 11
0
        static void Main(string[] args)
        {
            int     n;
            TagItem tagTree = new TagItem();

            do
            {
                PrintMenu();
                n = Vvod(7);
                switch (n)
                {
                case 1:     //1. Сформировать дерево.
                {
                    Console.WriteLine("Сколько элементов будет в дереве?");
                    int k = Vvod(40);           //здесь ограничение на макс. 40 элементов
                    tagTree = TagItem.AddElement(k, "first");
                    //TagItem.SetPaths(tagTree, "first"); //прописываем пути с первого
                    break;
                }

                case 2:     //2. Загрузка / выгрузка дерева тэгов(D:\Tags.xml);
                {
                    Console.WriteLine("Загрузка/сохранение дерева тэгов:\n1.Загрузить.\n2.Сохранить.\n0.Выход.");
                    int k = Vvod(3);
                    if (k == 1)
                    {
                        tagTree = tagTree.LoadTree(@"D:\Tags.xml");           //Загрузка из XML
                        //TagItem.ShowTree(tagTree, 10);
                    }
                    if (k == 2)
                    {
                        tagTree.SaveTree(tagTree, @"D:\Tags.xml");              //Сохранение в XML
                    }
                    break;
                }

                case 3:     //3. Вывод построчного списка тэгов – полный путь, уровень вложенности, тип, значение;
                {
                    Console.WriteLine("Печать тегов:\n1.В виде дерева.\n2.Построчно.\n0.Выход.");
                    int k = Vvod(3);
                    if (k == 1)
                    {
                        // TagItem.ShowTree(tagTree, 10);  //вывод деревом
                    }
                    if (k == 2)
                    {
                        TagItem.ShowTreeInLine(tagTree);            //вывод построчно
                    }
                    break;
                }

                case 4:     //4. Удаление тэга по имени;
                {
                    //Console.WriteLine("Введите имя тега, который удаляем:");
                    //string name = Console.ReadLine();
                    //TagItem.findOk = false;
                    //TagItem find = tagTree.FindTag(tagTree, name);  //ищем этот тег
                    //if (find != null)
                    //    Console.WriteLine($"Найден тег {name}:{find.ReadTagData(find)}");
                    //else
                    //    Console.WriteLine($"Тег {name} не найден!");
                    //tagTree = tagTree.DelTagItem(tagTree, find);
                    //TagItem.SetPaths(tagTree, "first"); //перепрописываем пути с первого после удаления
                    ////TagItem.ShowTree(tagTree, 10);
                    break;
                }

                case 5:     //5. Добавление нового тэга.
                {
                    //Console.WriteLine("Куда добавить тег?");
                    //string name = Console.ReadLine();
                    //TagItem.findOk = false;
                    //TagItem find = tagTree.FindTag(tagTree, name);  //ищем этот тег
                    //if (find != null)
                    //    Console.WriteLine($"Найден тег {name}:{find.ReadTagData(find)}");
                    //else
                    //    Console.WriteLine($"Тег {name} не найден!");
                    //find.AddTagItem(find);
                    ////TagItem.ShowTree(tagTree, 10);

                    break;
                }

                case 6:     //6. Переименование тэга.
                {
                    //Console.WriteLine("Введите имя тега, который переименовываем?");
                    //string name = Console.ReadLine();
                    //TagItem.findOk = false;
                    //TagItem find = tagTree.FindTag(tagTree, name);  //ищем этот тег
                    //if (find != null)
                    //    Console.WriteLine($"Найден тег {name}:{find.ReadTagData(find)}");
                    //else
                    //    Console.WriteLine($"Тег {name} не найден!");
                    //find.ChangeTagName(find);
                    //TagItem.SetPaths(tagTree, "first"); //перепрописываем пути с первого после переименования тега
                    //TagItem.ShowTree(tagTree, 10);
                    break;
                }
                }
            } while (n != 0);



            //TagStorage Root = new TagStorage();
            //Root.Root = tagTree;    //пихаем в корень наше дерево.
            //
        }