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

Вниз

Сохранение файла   Найти похожие ветки 

 
Chaval'   (2007-03-07 20:36) [0]

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?


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

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

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


 
Джо ©   (2007-03-07 20:49) [2]

[0] Chaval"  

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


 
Джо ©   (2007-03-07 21:03) [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).


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

Спасибо


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

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



Страницы: 1 вся ветка

Текущий архив: 2007.04.01;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.055 c
4-1163287948
Ketmar
2006-11-12 02:32
2007.04.01
определить из сервиса, залогинен ли юзер и не админ ли он часом


2-1173258178
sergeyst
2007-03-07 12:02
2007.04.01
Как убрать слэш из пути


2-1173690419
NOD
2007-03-12 12:06
2007.04.01
Помогите настроить BDE


2-1173102019
Ezorcist
2007-03-05 16:40
2007.04.01
Рекция на поворот колеса мыши?


11-1150844501
parovoZZ
2006-06-21 03:01
2007.04.01
Бросил на GRushPanel KolLabel...