最近写一个数据处理的程序,从一个数据文件里读去数据,我定义一个记录,里面包含两个一维动态数组,数组的维数是随时变化的。可是在读数据是总是出错。程序如下:
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;可是是我需要的是变化的,为什末总是出错哪,帮帮我,绝对送分
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;可是是我需要的是变化的,为什末总是出错哪,帮帮我,绝对送分
解决方案 »
- image写入SQL语句
- 求:取记录表中的前十条记录的SQL语句啊??
- 急,寻VirtualTrees 4.2.18或4.2.20
- idTcpClient、Server问题,、急,百分相赠
- 求助关于mscomm
- 轻松、愉快
- 关于showmodal问题,非常简单,进来UP有份:参数传递
- 求一个设置ie为默认浏览器的代码,不要告诉我用注册表,我知道,但是我不知道怎么写代码
- 急!!!字符串与整数的相互转换问题?
- 请教高手:在DELPHI编程中的WEB页的超级链接,不是链接下一WEB页,而是弹出一个FORM窗口
- 辞职后的第一件事:发布中国软件专家门诊离线数据浏览器(简记:Csdn Explorer),望各位朋友支持!
- 静态变量怎么定义?
你试一试 a.parnum +1 ;
a.SignalNum +1 ;
我猜测是内存分配空间不足!
SetLength(dd.ParValue,a.ParNum + 1);
SetLength(dd.v,a.SignalNum + 1);
先定义
pTa:^TA;
TA:Array [0...MaxInt] of Integer;type
data = packed record
Parvalue:=pTA;
V:=pTA;
end;在程序里用GetMem或ReallocMem定义数组对应内存大小
为什么要
a.parnum +1 ;
a.SignalNum +1 ;
我有点不懂。麻烦指教。