难道真的没有高人了吗???

ma369 2003-06-13 08:38:59
最近写一个数据处理的程序,可是在定义变量和读数据是总是出错。程序如下:
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;
...

可是我需要的是变化的,为什末总是出错哪,帮帮我,绝对送分。。。

可参照http://expert.csdn.net/Expert/topic/1902/1902198.xml?temp=.1510584
...全文
41 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
web700 2003-06-13
  • 打赏
  • 举报
回复
up
ma369 2003-06-13
  • 打赏
  • 举报
回复
问题说明白点很简单:
从一个数据文件里读去数据,定义一个记录,里面包含两个一维动态数组,数组的维数是随时变化的。当把记录的两个数组设置为固定的维数时,用上述方法读取数据正确,但用变量定义数组的大小时,读取数据就出现错误。

当然,我用如下过程也可以实现要求,只是程序运行太慢,受不了。。。


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,j,k:integer;
begin
SetLength(dd.ParValue,a.ParNum);
SetLength(dd.v,a.SignalNum);
...
AssignFile(datain, f);
Reset(datain, 1);
seek(datain,sizeof(a));
...
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;
ZyxIp 2003-06-13
  • 打赏
  • 举报
回复
要看这么长的代码很费时,最好将问题写的明白一点,大家只能给你思路和方法,细节调试还要自己来 :)
ma369 2003-06-13
  • 打赏
  • 举报
回复
人哪?都跑哪儿去了?

难到就没敢人说话吗?
koma2003 2003-06-13
  • 打赏
  • 举报
回复
帮你UP

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧