![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сохранения в файл
Profi © (2004-12-02 00:49:00)Столкнулся тут с проблемой! Как за раз сохранить динамический список в файл?
GuAV (2004-12-03 01:27:00) [1]Я понял. Вот так и пиши:
-длина массива extended
-сам массив
-длина строки
-строка
...
читать так:
BlockRead(F, L, SizeOf(S));
SetLength(S, L);
BlockRead(F, S[0], L * SizeOf(S[0]));
Profi (2004-12-03 01:07:00) [2]GuAV © (03.12.04 1:04) [32]
Пойми, мне все это надо запихнуть в одинфайл! И строки, и списки!
GuAV (2004-12-03 01:04:00) [3]ок.
тогда пиши размер перед строкой.
L := Length(S);
BlockWrite(F, L, SizeOf(S));
BlockWrite(F, A[0], L * SizeOf(Char));
Profi (2004-12-03 00:56:00) [4]GuAV © (03.12.04 0:55) [30]
Я же сказал пять!
GuAV (2004-12-03 00:55:00) [5]Profi © (03.12.04 0:43) [29]
Может быть любой!
Хорошо. Сколько ? Одна ? Или опять неизвесно сколько ?
Profi (2004-12-03 00:43:00) [6]GuAV © (02.12.04 22:36) [27]
Опять же таки, не известно! Может быть любой! У меня уже голова пухнит, как все это совместить!
TButton (2004-12-02 22:44:00) [7]
> А со string что делать?
выкини его сейчас же!
и не забудь вымыть руки!
тащут сюда всякую гадость...
GuAV (2004-12-02 22:36:00) [8]Profi © (02.12.04 22:34) [26]
А со string что делать?
сколько, какой длины ?
Profi (2004-12-02 22:34:00) [9]GuAV © (02.12.04 22:31) [24]
А со string что делать?
GuAV (2004-12-02 22:34:00) [10]Кстати 2048 extended - это 2048*12, 1024 integer это 1024*4... не так уж много, можно и как со статическим массивом.
Можно ещё массив extended отдельно, массив Integer отдельно.
GuAV (2004-12-02 22:31:00) [11]Profi © (02.12.04 22:11) [23]
неопределенное кол-во (но более 2048) элементов extended, ровно в два раза меньше integer, и еще штук двадцать extended. Как все это запихнуть в один файл? Ваши мысли!
Дин массив из записей из двух extended и одного Integer. Если нужно записывать элементы в массив а их число неизвестно, то установить его длинц в 1024. Когда станет ясна длина, установить длину к актуальному значению.
Записывать в файл BlockWrite или TFileStream.WriteBuffer. длину лучше тоже записать.
Profi (2004-12-02 22:11:00) [12]Блин, все равно не выходит!
ТЗ: есть пять строк, неопределенное кол-во (но более 2048) элементов extended, ровно в два раза меньше integer, и еще штук двадцать extended. Как все это запихнуть в один файл? Ваши мысли!
Profi (2004-12-02 17:53:00) [13]Да я уже на работе все понял! Спасибо за советы (особенно: " указатели в файл")!
GuAV (2004-12-02 14:22:00) [14]Anatoly Podgoretsky © (02.12.04 9:20) [20]
Я понимаю, но автор хотел одной записью в файл через BlockWrite :)
Anatoly Podgoretsky (2004-12-02 09:20:00) [15]GuAV © (02.12.04 01:07) [3]
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;
А это сводится до одной строчки Memo1.Lines.SaveToFile(FN);
Profi © (02.12.04 01:17) [7]
А никакого смысла нет в запихивать указатели в файл.
ЮЮ (2004-12-02 08:00:00) [16]>Опять же, я точно не знаю, сколько будет элементов, следовательно нужен список
Почему, думешь, массив называют динамическим
>За одну запись! Без циклов!
Невозможно, т.к. только в цикле можно найти реальное мксто в памяти очередного record
TButton (2004-12-02 07:44:00) [17]
> виноваты естественно циклы. :-)
Я вас попрошу птичку нашу не обижать© Кот Матроскин
GuAV (2004-12-02 01:46:00) [18]ачто тут непонятного. если проблемы с быстродействием, то виноваты естественно циклы. :-)
Gero (2004-12-02 01:43:00) [19]Я только не понял, чем не подходит цикл.
Profi (2004-12-02 01:37:00) [20]GuAV © (02.12.04 1:33) [13]
Ладно, завтра попарюсь, а сейчас спать. На работу завтра.