Главная страница
    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.009 c
3-98026
ACR
2002-09-06 18:53
2002.09.30
DBF + AutoIncrement


3-97976
Bishop
2002-09-07 16:23
2002.09.30
Экспорт в Excel


1-98155
zam2000
2002-09-17 18:33
2002.09.30
Сохранение динамической инфы в файл.


3-98002
Kurt
2002-09-10 11:40
2002.09.30
Как в CtrlGrid-е отловить событие вставки записи. Ну то есть пере


14-98344
sanilo
2002-09-05 12:33
2002.09.30
dll





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский