Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.26;
Скачать: CL | DM;

Вниз

Массив записей   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.072 c
15-1138859280
konda
2006-02-02 08:48
2006.02.26
Вопрос по проводнику виндовс.


2-1139416881
Ega23
2006-02-08 19:41
2006.02.26
почему Incompatible types Char and String ?????


2-1139212360
-=[ASH]=-
2006-02-06 10:52
2006.02.26
Сортировка


15-1138713366
Nic
2006-01-31 16:16
2006.02.26
Посоветуйте книгу по C#


15-1139247995
PARUS
2006-02-06 20:46
2006.02.26
Имитатор.