Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запись двухсвязного списка в файл, проблема и записать и считать) 
:(
    Опции темы
Jade
Дата 13.12.2006, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В общем есть двухсвязный списочек - имитация базы данных о животных, например.

Код

type
  ptr=^Tanimal;         //указатель на запись
  TAnimal = record
    Name: string[20];  //имя
    Fam: string[20];   //семейство
    Height: integer;    //рост
    Weight: integer;    //вес
    previous:ptr;            //указатель на предыдущее поле
    next:ptr;                //указатель на следующее поле
  end;


Использую такие переменные - 

Код

var
  Form1: TForm1;
  Anim : TAnimal;
  first,cur,last:ptr;


Т.е. указатели на первый, последний и текущий элементы.

На форме красиво добавляются, удаляются и прокручиваются по одному все элементы.
Проблема - записать этот список в какой-то бинарный файл и потом считать его оттуда.
Делаю File of TAnimal - тогда как обратиться к связям?
Или File of ptr, тогда будут сами указатели.

Буду очень благодарен за помощь.
PM MAIL ICQ   Вверх
Romkin
Дата 13.12.2006, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: 2
Всего: 5



Указатели в файл не пишутся. Более того, записать в файл именно двухсвязный список - задача нетривиальная, если сохранять возможность дозаписи. 
Пиши просто последовательно записи без полей указателей, при считывании - создавай новый узел, заполняй полями из файла, устанавливай указатели. Не надо делать в файле связи.
PS. И вообще, зачем тебе двухсвязный список? Поизвращаться хочется? Он очень редко нужен, и явно у тебя - не тот случай. Есть TList, TObjectList, TCollection - неужели не подходят?
PM ICQ   Вверх
Alexeis
Дата 13.12.2006, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(Romkin @  13.12.2006,  10:39 Найти цитируемый пост)
Не надо делать в файле связи.

Можно просто их пронумеровать, а вместо указателей писать номер элемента на который он должен ссылаться т.е. номер предыдущего или предшественика.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Romkin
Дата 13.12.2006, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: 2
Всего: 5



Цитата(alexeis1 @  13.12.2006,  11:08 Найти цитируемый пост)
Можно просто их пронумеровать, а вместо указателей писать номер элемента на который он должен ссылаться т.е. номер предыдущего или предшественика.

Можно. И делают. Только, во-первых, этот номер - обычно смещение нужной записи от начала файла, иначе что, каждый раз считать? А во-вторых, список-то двухсвязный, считать дважды. Стараясь не запутаться в ссылках smile 
PM ICQ   Вверх
Jade
Дата 19.12.2006, 04:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



хм...
объясните пожалуйста мне тупому как именно считать.
добавлять в записи еще и поле для нумерации? smile 
а как считывать потом? 
PM MAIL ICQ   Вверх
Romkin
Дата 19.12.2006, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: 2
Всего: 5



ЗАчем поле для нумерации? Ты как список создаешь, ведь наверняка создаешь узел, заполняешь его, а потом добавляешь в начало/конеч списка. 
Что мешает взять файл записей с данными, пройти его последовательно, и для каждой записи создать узел, заполнить его данными из этой записи, и вставить в список? 
Получается - последовательно проходим файл, и одновременно последовательно наращиваем список.
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




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


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

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