Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.011 c
14-98340
*****
2002-09-03 10:23
2002.09.30
HelpScrible


3-97995
ah
2002-09-07 09:22
2002.09.30
Написал простенькую базу dbase с использованием BDE


3-97947
maxim2
2002-09-09 06:33
2002.09.30
При добавлении записи выдает ошибку Key violation


1-98192
Eugene
2002-09-17 07:51
2002.09.30
Ищу компонент или алгоритм или доп. информацию.


1-98108
Stocker!
2002-09-19 08:40
2002.09.30
Создание форм





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский