要先拿分,高手就请进来!!!
ma369 2003-06-24 12:49:54 最近写一个数据处理的程序,从一个数据文件里读去数据,我定义一个记录,里面包含两个一维动态数组,数组的维数是随时变化的。可是在读数据是总是出错。程序如下:
var
Form1: TForm1;
type
TDataFile= packed record
...
ParNum:word;
SignalNum:word;
...
end;
type
data = packed record
Parvalue:=array of single;
V:=array of integer;
end;
var
DataIn:file;
a:TDataFile;
dd:data;
f:Ansistring;
procedure TForm1.OpenClick(Sender: TObject);
begin
OpenDialog.Title:='打开数据文件';
if OpenDialog.Execute then
begin
...
f:=OpenDialog.FileName;
AssignFile(datain, OpenDialog.FileName);
Reset(datain,1);
BlockRead(datain, a, SizeOf(a), NumRead);
...
CloseFile(datain);
end;
...
LoadData(GridData,SBar,Sender);
end;
procedure LoadData(GData:TStringGrid;SBar:TStatusBar;Sender:TObject);
var
i,k:integer;
begin
SetLength(dd.ParValue,a.ParNum);
SetLength(dd.v,a.SignalNum);
...
AssignFile(datain, f);
Reset(datain, 1);
seek(datain,sizeof(a));
...
BlockRead(datain,dd,sizeof(dd),NumRead);
...
GData.Cells[i+1,row]:=Format('%8.3f',[dd.ParValue[k]]);
...
CloseFile(datain);
end;
当把记录的两个数组设置为固定的维数时,用上述方法读取数据正确,但用变量定义数组的大小时,读取数据就出现错误。如下:
...
type
data = record
Parvalue:=array[0..200] of single;
V:=array[0..12] of integer;
end;
dd:data;
...
当然,我用如下过程也可以实现要求,只是程序运行太慢,受不了。。。
...
for j:=0 to a.ParNum-1 do
begin
BlockRead(datain,dd.ParValue[j],sizeof(dd.ParValue),NumRead);
end;
for j:=0 to a.SignalNum-1 do
begin
BlockRead(datain,dd.V[j],sizeof(dd.V),NumRead);
end;
...
GData.Cells[i+1,row]:=Format('%8.3f',[dd.ParValue[k]]);
...
CloseFile(datain);
end;
可是是我需要的是变化的,为什末总是出错哪,帮帮我,绝对送分。。。