----------------------------------------------------------------------------------------------------------------------------------------------- 本文提示:《文件管理(二)》是本站编辑们为广大网友精选的实用文章,本文阐述了关于文章的相关理论,相对来说专业性强,但是本文只是针对于某个问题提出的见解与论述,未必能辐射到相关问题的方方面面,所以本文处理问题的方法仅仅为您提供一些参考。更多问题请查阅学习中国网其他栏目哦. ----------------------------------------------------------------------------------------------------------------------------------------------- 文件管理(二)
6.2.7 记录的删除、插入、排序
删除一条记录的基本思路是:获取当前记录的位置并把该位置后的记录逐个向前移动。 文件在最后一条记录前截断。
for i:=CurrentRec+1 to Count-1 do
begin
seek(MethodFile,i);
read(MethodFile,MethodRec);
seek(MethodFile,i-1);
Write(MethodFile,MethodRec);
end;
Truncate(MethodFile);
为避免误删除,在进行删除操作前弹出一个消息框进行确认。删除后要更新全局变量的值和显示内容:
Count := Count - 1;
ChangeGrid;
完整的程序如下:
procedure TRecFileForm.DeleteButtonClick(Sender: TObject);
var
NewFile: MethodFileType;
MethodRec: TMethod;
NewFileName: String;
i: Integer;
begin
if FileOpened = False then Exit;
CurrentRec := StringGrid1.Row-1;
if CurrentRec < 0 then Exit;
if MessageDlg(@#Delete Current Record ?@#, mtConfirmation,
[mbYes, mbNo], 0) = idYes then
begin
HazAttr.text := @#@#;
for I := CurrentRec+1 to Count-1 do
begin
seek(MethodFile,i);
read(MethodFile,MethodRec);
seek(MethodFile,i-1);
Write(MethodFile,MethodRec);
end;
Truncate(MethodFile);
Count := Count-1;
ChangeGrid;
end;
end;
这里所显示的删除操作简单明了。但在程序开始设计时我却走了一条弯路,后来发现虽然这种方法用于记录的删除操作显得笨拙、可笑,但却恰恰是记录插入、排序的思想。
这种思想的核心是创建一个新文件保存更新后的内容。若新文件顺利创建,则删除原文件,否则恢复原来的文件。程序清单如下:
procedure TRecFileForm.DeleteButtonClick(Sender: TObject);
var
NewFile: MethodFileType;
MethodRec: TMethod;
NewFileName: String;
i: Integer;
begin
if FileOpened = False then Exit;
CurrentRec := StringGrid1.Row-1;
if CurrentRec < 0 then Exit;
if MessageDlg(@#Delete Current Record ?@#, mtConfirmation,
[mbYes, mbNo], 0) = idYes then
begin
HazAttr.text := @#@#;
NewFileName := ChangeFileExt(FileName,@#.sav@#);
try
AssignFile(NewFile,FileName);
ReWrite(NewFile);
Except
On EInOutError do
begin
Rename(MethodFile,FileName);
Exit;
end;
end;
for i := 1 to Count do
if I <> CurrentRec+1 then
begin
MethodRec := GridToRec(i);
Write(NewFile,MethodRec);
end;
closeFile(MethodFile);
try
AssignFile(MethodFile,Filename);
Reset(MethodFile);
except
on EInOutError do
begin
DeleteFile(FileName);
AssignFile(MethodFile,NewFileName);
Reset(MethodFile);
Rename(MethodFile,FileName);
Exit;
end;
DeleteFile(NewFileName);
Count:=Count-1;
ChangeGrid;
end;
end;
对于记录插入,方法基本同上。对于排序,可先将关键域读入排序,而后再按排序结果对应的记录号顺序重写文件。
6.2.8 结果综合
对不同方法的评估结果,可按一定的公式进行综合。当用户按下“计算”按钮时,系统进行计算并把综合结果写入HazAttr只读编辑框中。
为保证结果显示的正确性,每次增加、修改、删除操作确认后HazAttr编辑框清空。
6.2.9 编辑对话框的输入检查
当用户单击“增加”或“修改”按钮时系统将弹出一个编辑对话框,让用户输入或修改记录内容。其中的三个编辑框,一个组合列表框分别对应TMethod 的四个域。由于TMethod的Result域必须是[0,1]间的小数,因此当用户按OK键关闭对话框时应进行类型和范围检查。
本文章更多内容:1 - 2 - 3 - 4 - 5 - 6 - 7 - 下一页>>收藏到:[收藏夹] [百度搜藏] [新浪ViVi] [POCO网摘] [ 和讯网摘] [好哦网摘] [Google书签] [Yahoo书签] [搜狐网摘] [365Key网摘] [天极网摘] [我摘] [博采网摘] [igooi网摘] |