Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2009, 00:03   #1
juan666777
Пользователь
 
Аватар для juan666777
 
Регистрация: 24.01.2009
Сообщений: 84
По умолчанию Как сахранить и прочитать массив запись ?

Как читать и записывать в файлы я знаю но когда я записываю динамический массив получается какаято ерунда
Что сдесь не так ?
type
tip=record
x : integer;
y : integer;
z :integer;
color:TColor;
end;
vAR
mas :array of tip;

...
procedure TForm1.ReadTip;
var
f :TFileStream;
str:string;
i :integer;
begin
Form3.ADOTable1.First;
Setlength(mas,Form3.ADOTable1.Recor dCount);
for i:=0 to Form3.ADOTable1.RecordCount-1 do
begin
//Setlength(mas,length(mas)+1);
mas[i].x:= Form3.ADOTable1.FieldValues['x'];
mas[i].y:= Form3.ADOTable1.FieldValues['y'];
mas[i].color:= Form3.ADOTable1.FieldValues['Color'];
mas[i].z:= Form3.ADOTable1.FieldValues['Z'];
Form3.ADOTable1.Next;
end;
f:=TfileStream.Create('Size.dat',fm Create);
f.Write(mas,sizeof(mas));
f.Free;
end;
-----
Procedure TForm1.WriteTip;
var
fs :TFileStream;
str:string;
i :integer;
begin
if FileExists('size.dat') then
begin
fs:=TFIleStream.Create('size.dat',f mOpenread);
fs.Read(mas,sizeof(mas));
fs.Free;
end;
end;
Evil Skull
juan666777 вне форума Ответить с цитированием
Старый 31.01.2009, 00:20   #2
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

Ну, наверное писать надо так:
Код:
f.Write(mas, sizeOf(tip)*Length(mas)).
А про чтение додумывай сам
_Engine_ вне форума Ответить с цитированием
Старый 04.02.2009, 20:58   #3
juan666777
Пользователь
 
Аватар для juan666777
 
Регистрация: 24.01.2009
Сообщений: 84
По умолчанию

Не получается чтение
Evil Skull
juan666777 вне форума Ответить с цитированием
Старый 04.02.2009, 21:20   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
type
tip=record
x : integer;
y : integer;
z :integer;
color:TColor;
end;
Выделенное красным вызывает у меня жуткое сомнение в правомерности. Каждый Color имеет числовой эквивалент... То есть - "integer".

Последний раз редактировалось mihali4; 05.02.2009 в 01:10.
mihali4 вне форума Ответить с цитированием
Старый 04.02.2009, 23:13   #5
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Код:
mas :array of tip;
Что такое динамический массив ? Если вы сможете ответить, тогда и вопросы отпадет...

1. Вызывать SizeOf к динамическому массиву не советую, хотя я не пробывал, лучше уже сделать
Код:
Length(Mas) * SizeOf(TypeOfMas)
ну это примени только к данному коду
2. Массив - статистический, это адресс на начало "куска" памяти, вашего массива, так что когда вы пишите *Write(Mas, SizeOf(mas)... то все нормально.
3. Массив - динамический, это адресс на начало "куска" памяти, НО, именно адресс, динамический, т.е. при компиляции компилятор, компоновщик и другой инструментарий незнает, какое значение имеет этот адрес, значит и ведет он себя подругому. Тогда, после вызова SetLength вы выделяете "кучу" для вашего массива, и тогда "переменная" вашего массива будет содержать адресс вашей "кучи". Тогда *Write(Pointer(Mas)^, Length(Mas) * SizeOfMasElement...

Или же чтобы привести к виду статистического массива. надо всеголишь использовать не Mas а Mas[0] Т.е. прямой адресс на первый элемент массива, "кучи".
BOBAH13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как прочитать из файла имя, фамилию разделенные пробелами и записать их в массив парами Rom@shka Общие вопросы C/C++ 2 13.12.2008 16:40
запись с массива в массив тормозит? valgusk Общие вопросы Delphi 0 01.05.2008 17:45
Как прочитать данные из Repeater? posdnyaa БД в Delphi 0 07.04.2008 09:50
Прочитать загрузочную запись Alter Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 8 25.12.2007 17:21
как прочитать файл бодяга Общие вопросы Delphi 1 09.09.2007 20:37