![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
сохранение\чтение в\из файла
Начинающий93 © (2009-04-29 15:11:00)столкнулся с проблемой: имеется 2 записи
PRec1 = ^TRec;
TRec1 = record
{ список полей }
end;
PRec2 = ^TRec2;
TRec2 = record
ParentRec: PRec1;
end;
2-я запись содержит ссылку на 1-ю. Возможно ли сохранить\считать запись в\из файла
Юрий Зотов (2009-04-29 17:37:00) [1]> Начинающий93 (29.04.09 16:11) [20]
Указатели сохранять можно, но какой в этом смысл?
Вот в файл записался адрес какого-то элемента в ТЕКУЩЕМ сеансе работы программы. В следующем сеансе программа читает этот адрес - но ведь по нему уже лежит что-то совершенно другое (или не лежит ничего).
Anatoly Podgoretsky (2009-04-29 16:13:00) [2]
> Только пару дней начал изучать указатели. Поэтому не все
> ясно. В какой-то книге раньше читал что указатели сохранять
> нельзя.
Можно, но смысла нет. Смысл есть сохранять индекс и по нему строить связь.
Начинающий93 (2009-04-29 16:11:00) [3]
> clickmaker © (29.04.09 15:41) [14]
> > ParentRec: PRec1;должно быть что-то типа ParentRecID:
> integer у Rec2 и RecID у Rec1тогда сохранив записи по отдельности,
> при восстановлении их можно снова связать
Все разобрался. То что надо. Спасибо. Тему можно закрывать.
Начинающий93 (2009-04-29 16:00:00) [4]
> так а что нужно сохранить? только запись 2? вместе с содержимым
> записи 1?
Да
clickmaker (2009-04-29 15:51:00) [5]> [16] Начинающий93 (29.04.09 15:48)
так а что нужно сохранить? только запись 2? вместе с содержимым записи 1?
Palladin (2009-04-29 15:50:00) [6]Write(f,p^)
Начинающий93 (2009-04-29 15:48:00) [7]
> должно быть что-то типа ParentRecID: integer у Rec2 и RecID
> у Rec1тогда сохранив записи по отдельности, при восстановлении
> их можно снова связать
можете набросать небольшой пример. Просто только начал изучать указатели.
Медвежонок Пятачок (2009-04-29 15:41:00) [8]Нужно сохранять содержимое каждого поля
ТОлько если они физически расположены не в непрерывном куске памяти
clickmaker (2009-04-29 15:41:00) [9]> ParentRec: PRec1;
должно быть что-то типа ParentRecID: integer у Rec2 и RecID у Rec1
тогда сохранив записи по отдельности, при восстановлении их можно снова связать
Начинающий93 (2009-04-29 15:40:00) [10]Я думал записывать в Stream и сохранять:
P: PRec1;
Write(P^.<поле>, SizeOf(P^.<поле>));
Мне не понятно как сохранить поле (ParentRec: PRec1) содержащее указатель. Нужно сохранять содержимое каждого поля записи на которую ссылаемся? т.е. Rec2^.ParentRec^.<поле> -> Write/read?
Запомни Сынок (2009-04-29 15:32:00) [11]Нужно использовать PRec3, а не PRec2
Palladin (2009-04-29 15:32:00) [12]у тебя есть
PRec1 = ^TRec;
TRec1 = record
{ список полей }
end;
как ты будешь работать с этим?
Начинающий93 (2009-04-29 15:30:00) [13]так кажется @<переменная>
Palladin (2009-04-29 15:28:00) [14]Прально. Адрес. А как этот адрес получают?
Начинающий93 (2009-04-29 15:28:00) [15]
> расскажи, как ты понимаешь, что есть - указатель?
переменная которая хранит адрес ячейки памяти с определенным содержимым
Начинающий93 (2009-04-29 15:25:00) [16]
> При этом вынуть их в файл нет никакой физической возможности.
А как тогда быть. Дали лабу... сделать сохранение/чтение структуры описанной выше в файл
Palladin (2009-04-29 15:25:00) [17]расскажи, как ты понимаешь, что есть - указатель?
Начинающий93 (2009-04-29 15:23:00) [18]Только пару дней начал изучать указатели. Поэтому не все ясно. В какой-то книге раньше читал что указатели сохранять нельзя.
> а что мешает... считывай\сохраняй...
Подскажите где посмотреть приблизительный алгоритм сохранения.
Запомни Сынок (2009-04-29 15:23:00) [19]Вы все ошибаетесь
Байты помещенные в PRec2 оказываются в зоне сильного гравитационного поля сравнимого с полем черной дыры.
При этом вынуть их в файл нет никакой физической возможности.
Palladin (2009-04-29 15:14:00) [20]а что мешает... считывай\сохраняй...