иерархическая структура файла

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
fishmen
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 14.09.2005 (Ср) 8:52

иерархическая структура файла

Сообщение fishmen » 09.01.2007 (Вт) 11:30

Подскажите, пожалуйста, как правильно решить такую задачку.
есть текстовый файл.
каждая строка файла представляет собой запись, содержащую иерархическую структуру. Записи расположены в порядке возрастания ID
Например

doc , id , id_up
12 , 1, 0
12 , 2, 0
12 , 3, 1
12 , 4, 0
12 , 5, 2
12 , 6, 3
12 , 7, 6

Необходимо эти записи отсортировать след. образом

doc , id , id_up
12 , 1 , 0
12 , 3 , 1
12 , 6 , 3
12 , 7 , 6
12 , 2 , 0
12 , 5 , 2
12 , 4 , 0

Те. за родительской записью с номером ID сразу распологались дочерние записи, где ID_up = ID.
Как возможно преобразовать строки файла? Есть ли стандартные решения?

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 09.01.2007 (Вт) 11:55

вот , посмотри:
Вложения
Text read.rar
(2.18 Кб) Скачиваний: 45

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.01.2007 (Вт) 11:55

fishmen, мне кажется или это действительно дубль http://bbs.vbstreets.ru/viewtopic.php?p ... t=#6644968 ?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 09.01.2007 (Вт) 12:09

GSerg писал(а):fishmen, мне кажется или это действительно дубль http://bbs.vbstreets.ru/viewtopic.php?p ... t=#6644968 ?


Ты шо! Это не дубль. Цифирки в файле другие! :lol:
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 09.01.2007 (Вт) 12:14

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

fishmen
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 14.09.2005 (Ср) 8:52

Сообщение fishmen » 09.01.2007 (Вт) 12:29

!Viper! писал(а):Автор видимо разобрался и понял, что "циферки в файле" другие и придется разбирацца еще раз...

Да, действительно. Все оказалось немного сложнее, чем я думал. Проблема немного глубже. Здесь уже не просто отсортировка файла, а работает структура "дерева" с произвольной глубиной вложенности. К сожалению, ORDER BY не проходит.
Может я не прав?

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 09.01.2007 (Вт) 12:42

fishmen писал(а):Здесь уже не просто отсортировка файла, а работает структура "дерева" с произвольной глубиной вложенности. К сожалению, ORDER BY не проходит.
Может я не прав?


Подойдем с другого коридору - а что дальше ты с ним хочешь делать?
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 09.01.2007 (Вт) 12:43

Код: Выделить всё
select T.* from [1.txt] as T
ORDER BY T.id_up, T.id


или в постановке задачи у тебя что-то не так :)

Отредактировал:не подойдет! :oops:

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.01.2007 (Вт) 12:50

Нет, в постановке задачи у него всё так, это у тебя в коде не всё так...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 09.01.2007 (Вт) 13:04

ему бы добавить еще один столбец уровень элемента и тогда все будет ОК

doc , id , id_up , lvl
12 , 1 , 0 , 0
12 , 3 , 1 , 1
12 , 6 , 3 , 2
12 , 7 , 6 , 3
12 , 2 , 0 , 0
12 , 5 , 2 , 1
12 , 4 , 0 , 0

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 09.01.2007 (Вт) 13:42

Konst_One писал(а):ему бы добавить еще один столбец уровень элемента и тогда все будет ОК


Если для того чтобы было проще сформировать дерево - уровень даром не нужен - нужно Наименование. В общем - фиг его знает что он хочет с этого получить...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

fishmen
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 14.09.2005 (Ср) 8:52

Сообщение fishmen » 09.01.2007 (Вт) 14:13

Konst_One писал(а):ему бы добавить еще один столбец уровень элемента и тогда все будет ОК

doc , id , id_up , lvl
12 , 1 , 0 , 0
12 , 3 , 1 , 1
12 , 6 , 3 , 2
12 , 7 , 6 , 3
12 , 2 , 0 , 0
12 , 5 , 2 , 1
12 , 4 , 0 , 0


Уровень элемента действительно в строке есть, но только он относится к порядковому номеру элемента на конкретном уровне ID_up, т.е для примера

12 , 1 , 0 , 1
12 , 3 , 1 , 1
12 , 6 , 3 , 1
12 , 8 , 1 , 2
12 , 9 , 1 , 3
12 , 7 , 6 , 1
12 , 2 , 0 , 2
12 , 5 , 2 , 1


или так в виде дерева
(id1) 0 --1
(id3) ----1 -- 1
(id6) ---------3 -- 1
(id8) ----1 -- 2
(id9) ----1 -- 3
и т.д.

В строке есть еще куча полей с различной информацией (наименование, тип и т.д), но иерархия задается по 3-м полям (id, id_up, numb)

fishmen
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 14.09.2005 (Ср) 8:52

Сообщение fishmen » 09.01.2007 (Вт) 14:21

Andrey Fedorov писал(а):
Konst_One писал(а):ему бы добавить еще один столбец уровень элемента и тогда все будет ОК


Если для того чтобы было проще сформировать дерево - уровень даром не нужен - нужно Наименование. В общем - фиг его знает что он хочет с этого получить...


А надо мне всего лишь переставить строки файла, т.е расположить в порядке иерархии. Сейчас все строки отсортированы по ID. А необходимо в виде дерева, с учетом иерархии, но как это проще сделать - ну не знаю я :(

fishmen
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 14.09.2005 (Ср) 8:52

Сообщение fishmen » 09.01.2007 (Вт) 17:39

Похоже наткнулся на небольшую идею как это осуществить. Попробую воспользоваться элементом TreeView. Если получиться - отпишу

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 10.01.2007 (Ср) 8:41

Проще рекурсией, предварительно отсортировав по уровню. А правильнее -- ввести в поисковик "nested set" и почитать один из способов реализации.
Lasciate ogni speranza, voi ch'entrate.

fishmen
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 14.09.2005 (Ср) 8:52

Сообщение fishmen » 10.01.2007 (Ср) 11:11

Похоже все заработало. Воспользовался как и писал TreeView. Алгоритм такой - открываю оригинальный файл для чтения, каждую строку добавляю в TreeView учитывая родительскую и дочернюю структуру, далее создаю новый файл и считываю строки из TreeView уже в нужном, структурированном виде, в виде дерева.
Всем большое СПАСИБО!!!

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 10.01.2007 (Ср) 11:23

Ну ты даешь!!!
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

schalexey
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 18.02.2005 (Пт) 17:41
Откуда: Сургут

Сообщение schalexey » 10.01.2007 (Ср) 11:40

Может еще почитаешь кнужку.... Там как раз расписаны алгоритмы работы с данными, деревья в том числе.
Вложения
VB Algorithms.rar
(306.83 Кб) Скачиваний: 58

fishmen
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 14.09.2005 (Ср) 8:52

Сообщение fishmen » 10.01.2007 (Ср) 12:06

Спасибо.
Хорошая книжка, вот только поясняющие рисунки и таблицы в вордовском файле не сохранились. Обидно :(

schalexey
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 18.02.2005 (Пт) 17:41
Откуда: Сургут

Сообщение schalexey » 10.01.2007 (Ср) 14:52

fishmen писал(а):Спасибо.
Хорошая книжка, вот только поясняющие рисунки и таблицы в вордовском файле не сохранились. Обидно :(


Вот примеры и таблицы к ней
Вложения
Examples.rar
Примеры
(374.18 Кб) Скачиваний: 63
tabl.rar
Таблицы
(52.05 Кб) Скачиваний: 54


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 52

    TopList