Форум: "Основная";
Текущий архив: 2002.09.30;
Скачать: [xml.tar.bz2];
ВнизЗапись динамического массива в файл Найти похожие ветки
← →
Юрий К (2002-09-18 21:05) [0]Уважаемые мастера! Помогите пожалуйста!
Необходимо записать в файл f:file of byte Динамический массив buf:array of smallint; пишу:
type
TMy=record
X1,X2:real;
X3,X4:array[0..3]of Char;
end;
procedure My;
var
i:integer;
f:file of byte;
M:TMy;
buf:array of smallint;
begin
//... запись значений в M
SetLength(buf,а*b); //приблизительно 70000
//... заполнение массива Buf
AssignFile(f,"C:\temp");
Rewrite(f);
BlockWrite(f,M,SizeOf(M));
BlockWrite(f,buf,SizeOf(buf));
closeFile(f);
end;
данные в записи М записываются нормально, а вот из buf только четыре байта... Где я ошибся?...
← →
Юрий Зотов (2002-09-18 21:13) [1]BlockWrite(f, buf[0], Length(buf));
← →
ATR (2002-09-18 21:14) [2]у тебя же массив. Надо примерно так
AssignFile(f,"C:\temp");
Rewrite(f);
BlockWrite(f,M,SizeOf(M));
for i := 0 to Length(buf) - 1 do
BlockWrite(f, buf[i], SizeOf(buf[i]));
closeFile(f);
← →
Юрий Зотов (2002-09-18 21:39) [3]А почему обязательно поэлементно? Разве нельзя записать весь массив сразу?
← →
Юрий К (2002-09-18 22:43) [4]>ATR>у тебя же массив. Надо примерно так...
так получается, но очень долго... а если массив 1000000 элементов? Запись займет минуту не меньше.
>Юрий зотов>А почему обязательно поэлементно? Разве нельзя записать весь массив сразу?
Именно это я и пытаюсь сделать! SizeOf(Buf) возвращает = 4 (!)
Почему? Было бы еще понятно, если б =2. smallint - 2^16= 2 байта.
Существуют ли ограничения на размер буфера?
← →
Юрий Зотов (2002-09-18 23:06) [5]> Юрий К (18.09.02 22:43)
Внимательнее читайте ответы - см. выше. Правда, я допустил неточность. Правильно так:
BlockWrite(f, buf[0], Length(buf) * SizeOf(SmallInt));
> SizeOf(Buf) возвращает = 4 (!)
Правильно возвращает. Имя динамического массива - это указатель на него. Вот этот адрес Вы и пишете, а не сам массив. В справке на эту тему все есть, с примерами. А сам массив начинается с элемента Buf[0] и занимает Length(buf) * SizeOf(SmallInt) байт.
← →
ATR (2002-09-18 23:10) [6]Да я заметил уже, что я стормозил немного. Надо Length использовать, а не SizeOf.
← →
Юрий К (2002-09-19 00:14) [7]Большое спасибо! Все получилось! :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.09.30;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c