Пример #1
0
        public Загрузчик(string ИмяФайла, int МаксимумУровней, Action <ДеревоМетаданных, string, long> Делегат)
        {
            КореньДерева = new ДеревоМетаданных(ИмяФайла, null, null);
            Файл         = new FileInfo(ИмяФайла);
            long азмер        = Файл.Length;
            var  ЧтениеТекста = Файл.OpenText();

            ДеревоМетаданных ТекущаяВетвь  = КореньДерева;
            bool             НайденоНачало = false;

            while (!ЧтениеТекста.EndOfStream)
            {
                string Строка = ЧтениеТекста.ReadLine();
                int    Отступ = Строка.LastIndexOf(Ключ.Табуляция);
                while (ТекущаяВетвь != null)
                {
                    if (ТекущаяВетвь.Отступ >= Отступ)
                    {
                        ТекущаяВетвь = ТекущаяВетвь.одитель;
                    }
                    else
                    {
                        break;
                    }
                }
                if (ТекущаяВетвь == null)
                {
                    ТекущаяВетвь = КореньДерева;
                }
                if (!НайденоНачало)
                {
                    if (Строка.Contains(Ключ.Начало))
                    {
                        НайденоНачало = true;
                        ТекущаяВетвь  = new ДеревоМетаданных(Ключ.Начало, КореньДерева, КореньДерева);
                    }

                    continue;
                }
                ТекущаяВетвь = new ДеревоМетаданных(Строка, ТекущаяВетвь, КореньДерева);
                Делегат(ТекущаяВетвь, Строка, азмер);
            }
        }
Пример #2
0
        public ДеревоМетаданных(string Имя, ДеревоМетаданных одитель, ДеревоМетаданных Корень)
        {
            суммаВложенных = 0;

            Отступ       = Имя.LastIndexOf(Ключ.Табуляция);
            this.Имя     = Имя.Trim();
            this.одитель = одитель;
            this.Корень  = Корень;
            Подчиненные  = new List <ДеревоМетаданных>();
            try
            {
                одитель?.Подчиненные.Add(this);
            }
            catch (Exception e) { }
            if (одитель != null)
            {
                уровень = одитель.уровень + 1;
            }
            else
            {
                уровень = 0;
            }
        }
Пример #3
0
        public List <ДеревоМетаданных> ПолучитьРазличияРекурсией(ДеревоМетаданных ВетвьДерева2, Action <ДеревоМетаданных, string, long> Делегат)
        {
            List <ДеревоМетаданных> езультат = new List <ДеревоМетаданных>();

            foreach (var Лист in Подчиненные)
            {
                Делегат(Лист, Лист.Имя, 1);
                if (Лист.Имя.Contains(Ключ.Порядок))
                {
                    continue;
                }
                var Лист2 = ВетвьДерева2.НайтиПодчиненногоПоИмени(Лист.Имя);
                if (Лист2 != null)
                {
                    var азличия = Лист.ПолучитьРазличияРекурсией(Лист2, Делегат);
                    езультат.AddRange(азличия);
                    continue;
                }
                Лист.СуммаВложенныхРазличий = 1;
                езультат.Add(Лист);
            }

            return(езультат);
        }