![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сохранения в файл
Profi © (2004-12-02 00:49:00)Столкнулся тут с проблемой! Как за раз сохранить динамический список в файл?
GuAV (2004-12-02 01:35:00) [21]http://www.delphimaster.ru/articles/dyntable/index.html
GuAV (2004-12-02 01:33:00) [22]Profi © (02.12.04 1:29) [11]
там и так скорость ниже некуда.
Возможно, именно потому что выделяешь память для каждого элемента.
GuAV (2004-12-02 01:30:00) [23]GuAV © (02.12.04 1:26) [10]
L := Length(A);
BlockWrite(F, L, SizeOf(L));
BlockWrite(F, A[0], L);
L := Length(A);
BlockWrite(F, L, SizeOf(L));
BlockWrite(F, A[0], L * SizeOf(A[0]));
Да и длину можно не сохранять, если известна, или если в файле ничего кроме этого массива её можно взять из размера файла.
Profi (2004-12-02 01:29:00) [24]GuAV © (02.12.04 1:26) [10]
Опять же, я точно не знаю, сколько будет элементов, следовательно нужен список. Конечно можно потом его в массив скопировать, но это лишние телодвижения, там и так скорость ниже некуда.
GuAV (2004-12-02 01:26:00) [25]Profi © (02.12.04 1:22) [9]
Разве можно динамический массив в файл сохранить?
Да. Причём почти "за раз" - за 2 раза.
L := Length(A);
BlockWrite(F, L, SizeOf(L));
BlockWrite(F, A[0], L);
Profi (2004-12-02 01:22:00) [26]GuAV © (02.12.04 1:21) [8]
Разве можно динамический массив в файл сохранить?
GuAV (2004-12-02 01:21:00) [27]А почему бы не перестроить список так:
type
el = record
dx,dy:extended;
end;
TMyist = array of el
?
Profi (2004-12-02 01:17:00) [28]GuAV © (02.12.04 1:15) [6]
type
eluk=^el;
el=record
dx,dy:extended;
sl:eluk;
end;
var
gol,hv,pop:eluk;
В списке более 1000 элементов, поэтому надо его запихивать за раз, а не о элементно!
GuAV (2004-12-02 01:15:00) [29]ещё раз: что есть дин. список ? что есть элемент списка ?
> За одну запись! Без циклов!
зачем ?
Profi (2004-12-02 01:13:00) [30]GuAV © (02.12.04 1:07) [3]
За одну запись! Без циклов!
Gero (2004-12-02 01:07:00) [31]System.Write
GuAV (2004-12-02 01:07:00) [32]
S := TMemoryStream.Create;
try
S.WriteBuffer(MyVar, SizeOf(MyWar));
Image1.Picture.Bitmap.SaveToStream(S);
Memo1.Lines.SaveToStream(S);
BlockWrite(F, S.Memory^, S.Size);
finally
S.Free;
end;
Лучше ответь на вопросы в [1] + вопрос:
для чего именно "за раз" ?
Profi (2004-12-02 00:56:00) [33]GuAV © (02.12.04 0:53) [1]
Ага, можно через TMemoryStream, вот только ни разу не юзал. Кинь маленький примерчик, плз!
GuAV (2004-12-02 00:53:00) [34]Какой список ? и список чего ?
и что значит "за раз" ??
Вот я скинул всё в TMemoryStream, а потом его одним BlockWrite в файл. Это за раз ?