Форум: "Начинающим";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
ВнизМассив записей Найти похожие ветки
← →
pupapumQ (2006-02-06 20:03) [0]Моя проблема заключается в следующем. Мне необходимо сохранить в файл массив такой записи :
type
TQuestions = packed record
Qustion:string;
Answer1:string;
Answer2:string;
Answer3:string;
Answer4:string;
RightAnswer:string;
Picture:string;
end;
Прошу мастеров показать пример с сохранением и загрузкой. Заранее спасибо.
← →
Anatoly Podgoretsky © (2006-02-06 21:02) [1]Зачем тебе сохранять указатели?
← →
Kolan © (2006-02-06 21:11) [2]Дин массивы(строки) сохраняют так:
procedure WriteStringToStream(FS: TFileStream; S: string);
var
L: Longint;
begin
if FS <> nil then
begin
L := Length(S);
FS.WriteBuffer(L, SizeOf(L));
FS.WriteBuffer(S[1], L);
end;
end;
а читают такprocedure ReadStringFromStream(FS: TFileStream; var S: string);
var
L: Longint;
begin
FS.ReadBuffer(L, SizeOf(L));
if L > 0 then
begin
SetLength(S, L);
FS.ReadBuffer(S[1], L);
end;
end;
← →
Kolan © (2006-02-06 21:13) [3]Я думаю что вам понятно, что подобным образом надо сохранить каждое поле записи...
И так для каждогоэлемента массива...
← →
Eraser © (2006-02-06 21:22) [4]
> pupapumQ (06.02.06 20:03)
Hint:
используй вместо string тип ShortString... правда такая строка ограничена 255 символами.
← →
Desdechado © (2006-02-06 21:24) [5]проще использовать строки фиксированной длины, тогда можно пользоваться типизированными файлами
var F: File of TQuestions;
← →
Desdechado © (2006-02-06 21:25) [6]Question:string[255];
Answer1:string[255];
← →
Anatoly Podgoretsky © (2006-02-06 21:42) [7]ar[N] of char и нет рубежа в 255
← →
pupapumQ (2006-02-06 21:47) [8]Я сохраняю данные в файл.
Масив у меня Mas:array N of T(Запись эта)
мне нужно весь масив записей засунуть в один файл и при необходимости прочитать все это, переписав все из файла обратно в масив записей. Спасибо.
← →
Desdechado © (2006-02-06 21:50) [9]> ar[N] of char и нет рубежа в 255
тогда длина зиписи будет произвольная, а с ней типизированный файл не катит, AFAIR
← →
sniknik © (2006-02-06 21:58) [10]длинна будет фиксированная... это же массив, а не строка.
← →
Desdechado © (2006-02-06 22:11) [11]тьфу, точно :)
← →
palva © (2006-02-06 22:25) [12]> мне нужно весь масив записей засунуть в один файл и при необходимости прочитать все это, переписав все из файла обратно в масив записей
Если вам нужно только последовательное чтение, а не понадобится ни с того ни с сего, например, читать 328-ю запись, а затем модифицировать 118-ю запись, то вы вполне можете использовать переменную длину записи, как предложил Kolan.
← →
pupapumQ (2006-02-07 09:59) [13]Мне нужно весь массив записей(структур) сохранить в один файл. Мне не надо выдергивать что-то с какой-либо позиции, мне нужно читать все целиком и сразу из файла. Как мне сохранить это в одной програме и прочитать все в другой програме?
← →
MBo © (2006-02-07 10:01) [14]поскольку в структуре - только строки, ничего не мешает воспользоваться TStringList
← →
Fay © (2006-02-07 10:09) [15]2 MBo © [14] (07.02.06 10:01)
Это пока не появятся лайн-бряки
← →
pupapumQ (2006-02-07 10:14) [16]Ой ну неужели я так сложно все объясняю.... Нах мне стринглист со своим текстовым файлом, желательно все через TFileStream, но как это все читать и записывать. Точнее все записывается, но я не знаю правильно ли ? Но вообщем не читается. Вы покажите плиз пример с записью и загрузкой этого хлама.
← →
evvcom © (2006-02-07 10:27) [17]Тебе уже показали, и кучу всего наговорили для размышления. Если ты не хочешь включать свои мозги, то это твои проблемы.
← →
Fay © (2006-02-07 10:29) [18]2 pupapumQ [16] (07.02.06 10:14)
Попробуй почитать ответы. [2], к примеру.
А ещё лучшчше ~10 сек. подумать (обязательно головой)
← →
Digitman © (2006-02-07 10:38) [19]var
MyQuestionsArray: array[M..N] of TQuestions;
..
procedure WriteRecordToStream(Rec: TQuestions; Stream: TStream);
begin
WriteStringToStream(Rec.Qustion, Stream);
WriteStringToStream(Rec.Answer1, Stream);
WriteStringToStream(Rec.Answer2, Stream);
WriteStringToStream(Rec.Answer3, Stream);
WriteStringToStream(Rec.Answer4, Stream);
WriteStringToStream(Rec.RightAnswer, Stream);
WriteStringToStream(Rec.Picture, Stream);
end;
procedure ReadRecordFromStream(Stream: TStream; var Rec: TQuestions);
begin
ReadStringFromStream(Stream, Rec.Qustion);
ReadStringFromStream(Stream, Rec.Answer1);
ReadStringFromStream(Stream, Rec.Answer2);
ReadStringFromStream(Stream, Rec.Answer3);
ReadStringFromStream(Stream, Rec.Answer4);
ReadStringFromStream(Stream, Rec.RightAnswer);
ReadStringFromStream(Stream, Rec.Picture);
end;
//запись
for i:= M to N do
WriteRecordToStream(MyQuestionsArray[i], MyFileStream);
//чтение
for i:= M to N do
ReadRecordFromStream(MyFileStream, MyQuestionsArray[i]);
← →
pupapumQ (2006-02-07 11:01) [20]Спасибо за все.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.041 c