Форум: "Начинающим";
Текущий архив: 2007.04.01;
Скачать: [xml.tar.bz2];
ВнизСохранение файла Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.126 c