虽然菜,你试试看...在线等。。。

ma369 2003-06-11 11:52:10
最近写一个数据处理的程序,可是在定义变量和读数据是总是出错。程序如下:

type
TDataFile= packed record
...
ParNum:word;
...
end;
a:TDataFile;

type
data = record
Parvalue:=array of single;
V:=array of integer;
end;

dd:data;
DataIn:file;
...
begin
...
SetLength(ParValue,a.ParNum);
...

BlockRead(datain,ParValue,sizeof(dd) ,NumRead);
...
GridString.cell[x,y]:=format('8.3%f',dd.ParValue[k]);
...
end;


但是我把定义的数组设成固定值,一切就解决了。如下:
...
type
data = record
Parvalue:=array[0..200] of single;
V:=array[0..12] of integer;
end;
dd:data;
...

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

...全文
20 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ma369 2003-06-16
  • 打赏
  • 举报
回复
的确sizeof(dd)得到的结果错误,
现在使用循环的的方法一个一个可以读出数据,只是读写太慢,难道中不能定义一个
变长的record ,然后在文件中以块的形式读去吗?
参:http://expert.csdn.net/Expert/topic/1910/1910041.xml?temp=.6814844
hiflower 2003-06-13
  • 打赏
  • 举报
回复
sizeof(dd) 有问题。
因为 record 中有了变长类型,此函数不会取得正确的结果。
ma369 2003-06-13
  • 打赏
  • 举报
回复
难道真的没有高人了吗?
难道真的没有高人了吗?
难道真的没有高人了吗?
ma369 2003-06-12
  • 打赏
  • 举报
回复
问题解决,分还可以加。

不管如何,先谢了。
ma369 2003-06-12
  • 打赏
  • 举报
回复
完整过程如下:

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;
踢踏 2003-06-11
  • 打赏
  • 举报
回复
是否是在函数或者过程中传入动态数组?
把完整的过程贴出来看看,特别是函数或过程的定义
hiflower 2003-06-11
  • 打赏
  • 举报
回复

begin
...
SetLength(ParValue,a.ParNum);
...

BlockRead(datain,ParValue[0],sizeof(dd) ,NumRead);
...
GridString.cell[x,y]:=format('8.3%f',dd.ParValue[k]);
...
end;

试试,未验证 :)

5,388

社区成员

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

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