我自定义了以下的结构类型,其中包含一个动态数组,动态数组的大小由nMax,nMin,nStep来决定。现在我想保存其到文件,不知道该采用何种类型。用类型文件的话,里面的变量的长度必须都是固定的。如果用文本文件存,数组可能会很大,会影响存取速度。不知道各位有什么好的建议,最好能说清楚点。绝对新手,请多指教。 TScanInfo= record
bIsUsed: Boolean;
sSamName: String;
sOperator: String;
dtTestDateTime: TDateTime;
nMax: Integer;
nMin: integer;
nStep: integer;
tScanCoor: TCoordinates;
tTestValue: array of TCurWLInfo;
nStyle: TCurveStyle;
end;
bIsUsed: Boolean;
sSamName: String;
sOperator: String;
dtTestDateTime: TDateTime;
nMax: Integer;
nMin: integer;
nStep: integer;
tScanCoor: TCoordinates;
tTestValue: array of TCurWLInfo;
nStyle: TCurveStyle;
end;
解决方案 »
- 迷茫了
- 从ftp下载的文件直接存放到内存中处理,如何写
- 控件怎么增加右键菜单
- COM DLL 在DELPHI中怎么调用,谁能给个详细的例子?
- 利用LOCATE 多字段查询出现语句错误?在线等。。。。。
- 如何建立管理文件的数据库?
- ListView 里的图标为什么那么小。
- 极其郁闷,散分!
- 软件做好了,可是用户文档令人头疼。搞了一个星期还没完,是否大家也对文档头疼或给些指点?
- 寻找控件!sg21d4.zip!
- 求救啊,ACCESS+DELPHI,错误:'Data provider or other service returned an E_FAIL status'。
- 关于dbgrideh的下拉列表问题.高手请进,马上揭帖.急...
去找你的变体部分,TFileStream 是很快的,你不必担心
参照代码如下:type
recordA=class(TComponent)
private
FcolumnA:string[20];
FcolumnB:Integer;
published //注意!!一定是published才行
property columnA: string read FcolumnA write FcolumnA;
property columnB: Integer read FColumnB write FcolumnB;
end;给你段参考代码,里面的TNode和TEdge是两个不同的类
保存对象到文件:
function TShortWay.SaveTopo(FileName: String): Boolean;
var
stream : TMemoryStream;
iNodeCnt : Integer;
iEdgeCnt : Integer;
NodeTmp : TNode;
begin
stream := TMemoryStream.Create;
try
for iNodeCnt := 0 to FNodeList.Count - 1 do
begin
NodeTmp := FNodeList.Items[iNodeCnt];
NodeTmp.EdgeCnt := NodeTmp.EdgeList.Count;
stream.WriteComponent(NodeTmp);
for iEdgeCnt := 0 to NodeTmp.EdgeCnt - 1 do
begin
stream.WriteComponent(TEdge(NodeTmp.EdgeList[iEdgeCnt]));
end;{end for iEdgeCnt}
end;{end for iNodeCnt}
stream.SaveToFile(FileName);
Result := True;
finally
stream.Free;
end;{end try}
end;读文件到对象里:
function TShortWay.ReadTopo(FileName: String): Boolean;
var
stream : TMemoryStream;
iEdgeCnt : Integer;
NodeTmp : TNode;
EdgeTmp : TEdge;
begin
stream := TMemoryStream.Create;
try
stream.LoadFromFile(FileName);
while stream.Position <> stream.Size do
begin
NodeTmp := TNode.Create(Application);
stream.ReadComponent(NodeTmp);
FNodeList.Add(NodeTmp);
for iEdgeCnt := 1 to NodeTmp.EdgeCnt do
begin
EdgeTmp := TEdge.Create(Application);
stream.ReadComponent(EdgeTmp);
NodeTmp.EdgeList.Add(EdgeTmp);
end;{end for}
end;{end while}
Result := True;
finally
stream.Free;
end;{end try}
end;