|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
31.01.2009, 00:03 | #1 |
Пользователь
Регистрация: 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
|
31.01.2009, 00:20 | #2 |
Форумчанин
Регистрация: 29.06.2008
Сообщений: 603
|
Ну, наверное писать надо так:
Код:
|
04.02.2009, 20:58 | #3 |
Пользователь
Регистрация: 24.01.2009
Сообщений: 84
|
Не получается чтение
Evil Skull
|
04.02.2009, 21:20 | #4 | |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Цитата:
Последний раз редактировалось mihali4; 05.02.2009 в 01:10. |
|
04.02.2009, 23:13 | #5 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Код:
1. Вызывать SizeOf к динамическому массиву не советую, хотя я не пробывал, лучше уже сделать Код:
2. Массив - статистический, это адресс на начало "куска" памяти, вашего массива, так что когда вы пишите *Write(Mas, SizeOf(mas)... то все нормально. 3. Массив - динамический, это адресс на начало "куска" памяти, НО, именно адресс, динамический, т.е. при компиляции компилятор, компоновщик и другой инструментарий незнает, какое значение имеет этот адрес, значит и ведет он себя подругому. Тогда, после вызова SetLength вы выделяете "кучу" для вашего массива, и тогда "переменная" вашего массива будет содержать адресс вашей "кучи". Тогда *Write(Pointer(Mas)^, Length(Mas) * SizeOfMasElement... Или же чтобы привести к виду статистического массива. надо всеголишь использовать не Mas а Mas[0] Т.е. прямой адресс на первый элемент массива, "кучи". |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
как прочитать из файла имя, фамилию разделенные пробелами и записать их в массив парами | 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 |