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

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

Сохранение файла


Chaval' ©   (2007-03-07 20:36:00) 

type
 TTestRect = Record
   AQuesr:array[1..60] of TStrings;
   AAnsVar:array[1..60] of Tstrings;
   BQuest:array[1..10] of TStrings;
   BAnsVar:array[1..10] of TStrings;
   BAns:array[1..10] of String;
   TestName:String;
   TestSpring:String;
   ACount,BCount:Integer;
 end;
var
       f:file of TTestRect


не могу создать файл, содержащий данные типа TTestRect, и записать в него переменную типа TTestRect?


Chaval'   (2007-03-13 20:19:00) [1]

Подскажите как загрузить, а то у меня не получается


Chaval'   (2007-03-07 21:10:00) [2]

Спасибо


Джо   (2007-03-07 21:03:00) [3]

Вот наброски реализации для одного из типичных подходов с реализованной записью.

unit Unit4;

interface
uses SysUtils, Classes;

type
TTestClass = class
private
  FAQuesr:array[1..60] of TStrings;
  FAAnsVar:array[1..60] of Tstrings;
  FBQuest:array[1..10] of TStrings;
  FBAnsVar:array[1..10] of TStrings;
  FBAns:array[1..10] of String;
  FTestName:String;
  FTestSpring:String;
  FACount,BCount:Integer;
  procedure WriteString (const S: string; AStream: TStream);
  procedure WriteStrings (Strings: TStrings; AStream: TStream);
public
  procedure SaveToFile (AFileName: string);
  procedure SaveToStream (AStream: TStream);
end;

implementation

{ TTestClass }

procedure TTestClass.SaveToFile(AFileName: string);
var
 Fs: TFileStream;
begin
 Fs := TFileStream.Create(AFileName,fmCreate);
 try
   SaveToStream(Fs);
 finally
   Fs.Free
 end;
end;

procedure TTestClass.SaveToStream(AStream: TStream);
var
 I: Integer;
begin
 for I := Low(FAQuesr) to High(FAQuesr) do
   WriteStrings(FAQuesr[I],AStream);

 for I := Low(FAAnsVar) to High(FAAnsVar) do
   WriteStrings(FAAnsVar[I],AStream);

 for I := Low(FBQuest) to High(FBQuest) do
   WriteStrings(FBQuest[I],AStream);

 //
 // Аналогично поступаем с другими массивами TStrings
 //

 WriteString(FTestName,AStream);

 //
 // Аналогично поступаем с другими строками
 //

 AStream.Write(FACount,SizeOf(FACount));

 //
 // Аналогично поступаем с другими Integer
 //
end;

procedure TTestClass.WriteString(const S: string; AStream: TStream);
var
 Ln: Integer;
begin
 Ln := Length(S);
 AStream.Write(Ln,SizeOf(Ln)); // запишем длину строки
 AStream.Write(S[1],Ln); // теперь саму строку
end;

procedure TTestClass.WriteStrings(Strings: TStrings; AStream: TStream);
begin
 WriteString(Strings.Text,AStream);
end;

end.


Осталось разобраться с принципом и дописать класс. В частности, реализовать загрузку (LoadFromStream, LoadFromFile).


Джо   (2007-03-07 20:49:00) [4]

[0] Chaval'  

Такая запись напрашивается быть классом. Со своими методами чтения/записи. Которые придется написать.


RASkov   (2007-03-07 20:45:00) [5]

> [0] Chaval'   (07.03.07 20:36)

Такой тип не подойдет для типизированного файла.
Используй vаr f: File; или пересмотри структуру записи... со строками справиться можно, но придется избавиться от TStrings.


Наверх

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