Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Массив записей [D7, WinXP]


pupapumQ ©   (2006-02-06 20:03:00) 

Моя проблема заключается в следующем. Мне необходимо сохранить в файл массив такой записи :
type
 TQuestions = packed record
   Qustion:string;
   Answer1:string;
   Answer2:string;
   Answer3:string;
   Answer4:string;
   RightAnswer:string;
   Picture:string;
end;

Прошу мастеров показать пример с сохранением и загрузкой. Заранее спасибо.


pupapumQ   (2006-02-07 11:01:00) [1]

Спасибо за все.


Digitman   (2006-02-07 10:38:00) [2]

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]);


Fay   (2006-02-07 10:29:00) [3]

2 pupapumQ [16] (07.02.06 10:14)
Попробуй почитать ответы. [2], к примеру.
А ещё лучшчше ~10 сек. подумать (обязательно головой)


evvcom   (2006-02-07 10:27:00) [4]

Тебе уже показали, и кучу всего наговорили для размышления. Если ты не хочешь включать свои мозги, то это твои проблемы.


pupapumQ   (2006-02-07 10:14:00) [5]

Ой ну неужели я так сложно все объясняю.... Нах мне стринглист со своим текстовым файлом, желательно все через TFileStream, но как это все читать и записывать. Точнее все записывается, но я не знаю правильно ли ? Но вообщем не читается. Вы покажите плиз пример с записью и загрузкой этого хлама.


Fay   (2006-02-07 10:09:00) [6]

2  MBo © [14] (07.02.06 10:01)
Это пока не появятся лайн-бряки


MBo   (2006-02-07 10:01:00) [7]

поскольку в структуре - только строки, ничего не мешает воспользоваться TStringList


pupapumQ   (2006-02-07 09:59:00) [8]

Мне нужно весь массив записей(структур) сохранить в один файл. Мне не надо выдергивать что-то с какой-либо позиции, мне нужно читать все целиком и сразу из файла. Как мне сохранить это в одной програме и прочитать все в другой програме?


palva   (2006-02-06 22:25:00) [9]

> мне нужно весь масив записей засунуть в один файл и при необходимости прочитать все это, переписав все из файла обратно в масив записей

Если вам нужно только последовательное чтение, а не понадобится ни с того ни с сего, например, читать 328-ю запись, а затем модифицировать 118-ю запись, то вы вполне можете использовать переменную длину записи, как предложил Kolan.


Desdechado   (2006-02-06 22:11:00) [10]

тьфу, точно :)


sniknik   (2006-02-06 21:58:00) [11]

длинна будет фиксированная... это же массив, а не строка.


Desdechado   (2006-02-06 21:50:00) [12]

> ar[N] of char и нет рубежа в 255
тогда длина зиписи будет произвольная, а с ней типизированный файл не катит, AFAIR


pupapumQ   (2006-02-06 21:47:00) [13]

Я сохраняю данные в файл.
Масив у меня Mas:array N of T(Запись эта)
мне нужно весь масив записей засунуть в один файл и при необходимости прочитать все это, переписав все из файла обратно в масив записей. Спасибо.


Anatoly Podgoretsky   (2006-02-06 21:42:00) [14]

ar[N] of char и нет рубежа в 255


Desdechado   (2006-02-06 21:25:00) [15]

Question:string[255];
Answer1:string[255];


Desdechado   (2006-02-06 21:24:00) [16]

проще использовать строки фиксированной длины, тогда можно пользоваться типизированными файлами
var F: File of TQuestions;


Eraser   (2006-02-06 21:22:00) [17]


> pupapumQ   (06.02.06 20:03)

Hint:
используй вместо string тип ShortString... правда такая строка ограничена 255 символами.


Kolan   (2006-02-06 21:13:00) [18]

Я думаю что вам понятно, что подобным образом надо сохранить каждое поле записи...

И так для каждогоэлемента массива...


Kolan   (2006-02-06 21:11:00) [19]

Дин массивы(строки) сохраняют так:

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;


Anatoly Podgoretsky   (2006-02-06 21:02:00) [20]

Зачем тебе сохранять указатели?


Наверх

Титульная страница Поиск, карта сайта Написать письмо