如何对它操作 .dat 数据类型(100分)

  • 主题发起人 主题发起人 luzhj
  • 开始时间 开始时间
L

luzhj

Unregistered / Unconfirmed
GUEST, unregistred user!
我是个初学者,现有个问题:
某个 .dat 数据类型,结构如下:
struct DataCODE
{
char Code[7]; //以'/0'结尾的数据代号
char Name[9]; //以'/0'结尾的数据名称
short Scheme; //此域为计算依据索引,可简单填0
};
问:1.如何对它操作(打开,添加,删除等)?
2.如何对其中的某个数据双击后显示在 Lable1 中,如何索引(键入代码,名称在 Lable2 中显示)?

 
1.AssigeFile(FilVar, OpenDialog1.FileName); //从打开文件对话框取得*.dat文件名
1)Reset(FilVar);
While not Eof(FilVar) Do
Begin
Readlin(FilVar, DataCode.Code, DataCode.Name, DataCode.Scheme);
//读数据文件
End;

2)Rewrite(FilVar);
Writeln(FilVar, DataCode.Code, DataCode.Name, DataCode.Scheme);
//写数据文件
3)Seek(FilVar);
//删除记录



CloseFile(FilVar);
 
定义如下结构:
DataCode = record
code:array[0..6]of char;
name:array[0..8]of char;
Scheme:Shortint;
end;

定义变量:
tData:DataCode;

如下定义文件变量:
f:file of datacode;

如下打开文件:
assignfile(f,"filename.dat");
rewrite(f);//写
// reset(f);//读

写一记录到文件:
t.code:='0123456';
t.name:='012345678';
t.Scheme:=0;
write(f,t);
//也可用blockwrite写一批记录

读一记录到文件:
read(f,t);
//也可用blockread读一批记录

移动文件指针:
seek(f,N);
N为要移动的记录个数。

删除一个记录较复杂:
确定要删除的记录的位置n,
将前1..n-1及n+1后的记录用Blockread读出再用Blockwrite写入一临时文件,
用Truncate将文件清空,再从临时文件中读出再写回;
或删除文件,将临时文件更名。


对第二个问题,你想干什么我不清楚,能说详细点吗?
 
祥细点啦!
 
var
F: file of datacode;
i,j: Integer;
Buf: aryData: array of datacode;
begin
AssignFile(F, 'xxx.dat');
Reset(F, 1);
setlength(arydata,FileSize(F));
BlockRead(F, arydata, SizeOf(arydata), i);
CloseFile(F);
listbox1.clear;
for i:=0 to ubound(arydata) do
listbox1.add(string(arydata.code));
end;

listbox1onclick时, lable1.caption:=string(arydata[listbox1.itemindex].name);

索引嘛, 用快速索引arydata就可以了.
 
多人接受答案了。
 
后退
顶部