嗨我已经在我的项目中定义了一些记录,这些记录可能包含其他记录以及普通数据类型和其他记录的动态数组,它是记录类型的n个示例
Type1=record
x:integer;
end;
Type2=record
Y:array of X;
str:string;
end;
Run Code Online (Sandbox Code Playgroud)
当我尝试将这些记录类型的变量之一保存到具有blockwrite函数的文件时,如下所示:
var
Temp1:Type2;
begin
setlength(temp1.y,100);
blockwrite(MyFile,Temp1,sizeOf(Temp1);
Run Code Online (Sandbox Code Playgroud)
它写的只是纯记录的大小,但是temp1有一个调整大小的dynmic数组,有人可以告诉我如何将复杂的记录写入文件,我的意思是像VB6中使用的那样.谢谢
我需要存储未知数量的组.每个组都有未知数量的元素/项目.这是我的'小组':
TGroup= array of Integer; <------ dynamic array (as you can see) :)
Run Code Online (Sandbox Code Playgroud)
我想用TList来保持我的团队.我的想法是,我可能希望稍后访问这些组并向其添加更多项目.
我有这个代码,但我不能让它工作:
TYPE
TGroup= array of Integer; // Each group has x items (x can be from 1 to 10000)
procedure TForm1.FormCreate(Sender: TObject);
VAR CurGroup: TGroup;
grp, item: Integer;
Groups: TList; // can contain up to 1 million groups
begin
Groups:= TList.Create;
{ Init }
for grp:= 1 to 4 DO // Put a dummy item in TList
begin
SetLength(CurGroup, 1); // Create new group
Groups.Add(@CurGroup); // …Run Code Online (Sandbox Code Playgroud) 在过去,我看过这项工作,但我从未真正理解应该如何做.
假设我们有一个已知数据类型的文件,但未知长度,如动态数组TSomething,其中
type
TSomething = class
Name: String;
Var1: Integer;
Var2: boolean;
end;
Run Code Online (Sandbox Code Playgroud)
但问题是,将来可能会扩展此对象类型,添加更多变量(例如Var3: String).
然后,使用旧版本保存的文件将不包含最新的变量.
文件读取过程应该以某种方式识别块中的数据,使用如下算法:
procedure Read(Path: String)
begin
// Read Array Size
// Read TSomething --> where does this record end? May not contain Var3!
// --> how to know that the next data block I read is not a new object?
end;
Run Code Online (Sandbox Code Playgroud)
我已经看过这个工作BlockRead和BlockWrite …
我可以,或者我必须使用它自己的SaveToStream方法将其声明为一个类吗?
它只是数据,没有功能(虽然我现在可能会添加getter和setter)