文件管理(二)

2016-01-29 14:01 3 1 收藏

文件管理(二),文件管理(二)

【 tulaoshi.com - Delphi 】

 

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);

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/delphi/)

end;

Truncate(MethodFile);  

          为避免误删除,在进行删除操作前弹出一个消息框进行确认。删除后要更新全局变量的值和显示内容: 

Count := Count - 1;

ChangeGrid; 

           完整的程序如下: 

procedure TRecFileForm.DeleteButtonClick(Sender: TObject);

var

NewFile: MethodFileType;

MethodRec: TMethod;

NewFileName: String;

i: Integer;

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/delphi/)

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);

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/delphi/)

end;

Truncate(MethodFile);

Count := Count-1;

ChangeGrid;

end;

end;

  这里所显示的删除操作简单明了。但在程序开始设计时我却走了一条弯路,后来发现虽然这种方法用于记录的删除操作显得笨拙、可笑,但却恰恰是记录插入、排序的思想。

  这种思想的核心是创建一个新文件保存更新后的内容。若新文件顺利创建,则删除原文件,否则恢复原来的文件。程序清单如下: 

procedure TRecFileForm.DeleteButtonClick(Sender: TObject);

var

NewFile: MethodFileType;

MethodRec: TMethod;

NewFileName: String;

i: Integer;

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/delphi/)

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 的四个域。由于TMethodResult域必须是[0,1] 间的小数,因此当用户按OK键关闭对话框时应进行类型和范围检查。

  在VB中我做过同样的工作,那时需要对用户输入的键码逐个进行判断。但这种方法很繁琐、很难做圆满(如不能很好地支持编辑键)。而

来源:https://www.tulaoshi.com/n/20160129/1492296.html

延伸阅读
标签: 电脑入门
Windows系统中随着各类应用软件的安装、删除、卸载,使您硬盘上的垃圾文件日渐增多,不仅占用了大量空间,降低了系统运转速度,更让用户产生反感情绪。为解决上述问题,给您提供一个自由安详的操作氛围,Windows优化大师提供了强大的磁盘文件管理功能。 进入磁盘文件管理。Windows优化大师首先将当前硬盘使用情况用饼状图报告给您。 您在驱动...
功能说明: 调整C原始代码文件的格式。   语 法: indent [参数][源文件] 或 indent [参数][源文件][-o 目标文件] 补充说明: indent可辨识C的原始代码文件,并加以格式化,以方便程序设计师阅读。 参 数: -bad或--blank-lines-after-declarations  在声明区段或加上空白行。 -bap或--blank-lines-after-proce...
功能说明: 显示文件属性。 语 法: lsattr [-adlRvV][文件或目录...]  补充说明: 用chattr执行改变文件或目录的属性,可执行lsattr指令查询其属性。 参 数:   -a 显示所有文件和目录,包括以"."为名称开头字符的额外内建,现行目录"."与上层目录".."。   -d 显示,目录名称,而非其内容。  ...
功能说明: 根据diff的比较结果,显示统计数字。 语 法: diff [-wV][-n <文件名长度][-p <文件名长度] 补充说明: diffstat读取diff的输出结果,然后统计各文件的插入,删除,修改等差异计量。 参 数: -n<文件名长度 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。 -p<文件名长度 ...
功能说明: 指定在建立文件时预设的权限掩码。 语 法: umask [-S][权限掩码] 补充说明: umask可用来设定[权限掩码]。[权限掩码]是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限。 参 数:   -S  以文字的方式来表示权限掩码。