Вниз
Скачать: CL | DM;

сохранение чтение в из файла   Найти похожие ветки 

← →
Начинающий93   (2009-04-29 15:11) [0]

столкнулся с проблемой: имеется 2 записи


PRec1 = ^TRec;
 TRec1 = record
   { список полей }
 end;

 PRec2 = ^TRec2;
 TRec2 = record
   ParentRec: PRec1;
 end;


2-я запись содержит ссылку на 1-ю. Возможно ли сохранить\считать запись в\из файла


← →
Ega23 ©   (2009-04-29 15:13) [1]

Возможно всё.


← →
Медвежонок Пятачок ©   (2009-04-29 15:13) [2]

Сам то как думаешь?


← →
Palladin ©   (2009-04-29 15:14) [3]

а что мешает... считывай\сохраняй...


← →
Запомни Сынок   (2009-04-29 15:23) [4]

Вы все ошибаетесь
Байты помещенные в PRec2 оказываются в зоне сильного гравитационного поля сравнимого с полем черной дыры.

При этом вынуть их в файл нет никакой физической возможности.


← →
Начинающий93   (2009-04-29 15:23) [5]

Только пару дней начал изучать указатели. Поэтому не все ясно. В какой-то книге раньше читал что указатели сохранять нельзя.


> а что мешает... считывай\сохраняй...


Подскажите где посмотреть приблизительный алгоритм сохранения.


← →
Palladin ©   (2009-04-29 15:25) [6]

расскажи, как ты понимаешь, что есть - указатель?


← →
Начинающий93   (2009-04-29 15:25) [7]


> При этом вынуть их в файл нет никакой физической возможности.


А как тогда быть. Дали лабу... сделать сохранение/чтение структуры описанной выше в файл


← →
Начинающий93   (2009-04-29 15:28) [8]


> расскажи, как ты понимаешь, что есть - указатель?


переменная которая хранит адрес ячейки памяти с определенным содержимым


← →
Palladin ©   (2009-04-29 15:28) [9]

Прально. Адрес. А как этот адрес получают?


← →
Начинающий93   (2009-04-29 15:30) [10]

так кажется @<переменная>


← →
Palladin ©   (2009-04-29 15:32) [11]

у тебя есть

PRec1 = ^TRec;
TRec1 = record
  { список полей }
end;


как ты будешь работать с этим?


← →
Запомни Сынок   (2009-04-29 15:32) [12]

Нужно использовать PRec3, а не PRec2


← →
Начинающий93   (2009-04-29 15:40) [13]

Я думал записывать в Stream и сохранять:


P: PRec1;

Write(P^.<поле>, SizeOf(P^.<поле>));


Мне не понятно как сохранить поле (ParentRec: PRec1)  содержащее указатель. Нужно сохранять содержимое каждого поля записи на которую ссылаемся? т.е. Rec2^.ParentRec^.<поле> -> Write/read?


← →
clickmaker ©   (2009-04-29 15:41) [14]

> ParentRec: PRec1;

должно быть что-то типа ParentRecID: integer у Rec2 и RecID у Rec1
тогда сохранив записи по отдельности, при восстановлении их можно снова связать


← →
Медвежонок Пятачок ©   (2009-04-29 15:41) [15]

Нужно сохранять содержимое каждого поля

ТОлько если они физически расположены не в непрерывном куске памяти


← →
Начинающий93   (2009-04-29 15:48) [16]


> должно быть что-то типа ParentRecID: integer у Rec2 и RecID
> у Rec1тогда сохранив записи по отдельности, при восстановлении
> их можно снова связать


можете набросать небольшой пример. Просто только начал изучать указатели.


← →
Palladin ©   (2009-04-29 15:50) [17]

Write(f,p^)


← →
clickmaker ©   (2009-04-29 15:51) [18]

> [16] Начинающий93   (29.04.09 15:48)

так а что нужно сохранить? только запись 2? вместе с содержимым записи 1?


← →
Начинающий93   (2009-04-29 16:00) [19]


> так а что нужно сохранить? только запись 2? вместе с содержимым
> записи 1?


Да


← →
Начинающий93   (2009-04-29 16:11) [20]


> clickmaker ©   (29.04.09 15:41) [14]
> > ParentRec: PRec1;должно быть что-то типа ParentRecID:
> integer у Rec2 и RecID у Rec1тогда сохранив записи по отдельности,
>  при восстановлении их можно снова связать


Все разобрался. То что надо. Спасибо. Тему можно закрывать.


← →
Anatoly Podgoretsky ©   (2009-04-29 16:13) [21]


> Только пару дней начал изучать указатели. Поэтому не все
> ясно. В какой-то книге раньше читал что указатели сохранять
> нельзя.

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


← →
Юрий Зотов ©   (2009-04-29 17:37) [22]

> Начинающий93   (29.04.09 16:11) [20]

Указатели сохранять можно, но какой в этом смысл?

Вот в файл записался адрес какого-то элемента в ТЕКУЩЕМ сеансе работы программы. В следующем сеансе программа читает этот адрес - но ведь по нему уже лежит что-то совершенно другое (или не лежит ничего).



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.5 MB
Время: 0.008 c
15-1239690431
начинающий
2009-04-14 10:27
2009.06.21
Лечение вирусов на NTFS-разделах


11-1201597213
Elec3C
2008-01-29 12:00
2009.06.21
Баг ListBox.DoubleBuffer := True


15-1236615034
Кто б сомневался
2009-03-09 19:10
2009.06.21
Музыка - жанры и стили


15-1240040122
@!!ex
2009-04-18 11:35
2009.06.21
Ищу материнку с Intel®AMT


15-1239459353
Nic
2009-04-11 18:15
2009.06.21
Распараллелить интернет




   Наверх