如和把记录文件读出写入文本文件 dateset都有savetofile和loadfromfile函数,试验一下吧 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 记录文件的打开和创建同文本文件一样也需要关联和初始化两个步骤。同文本文件唯一的不同是不能使用Append过程。 记录文件缺省情况下以读写方式打开,如果想以只读或只写方式打开,则需要修改System单元中定义的变量FileMode的值。 FileMode的取值和意义如下表。 表6.3 FileMode的取值和意义 ━━━━━━━━━━━━━━ 取值 意义 ────────────── 0 只读 1 只写 2 读写 ━━━━━━━━━━━━━━ FileMode是一个全局变量,对它的每次修改都将影响所有Reset的操作,因此在打开自己的文件后应还原它的值。 在本系统中,当用户按下“打开”按钮时,首先弹出一个标准文件打开对话框,要求用户输入或选择文件名。确认后如果该文件名的文件存在,则用Reset打开,若不存在则创建。程序清单如下。 procedure TRecFileForm.OpenButtonClick(Sender: TObject); begin if OpenDialog1.Execute then FileName := OpenDialog1.FileName else exit; AssignFile(MethodFile,Filename); try Reset(MethodFile); FileOpened := True; except On EInOutError do begin try if FileExists(FileName) = False then begin ReWrite(MethodFile); FileOpened := True; end else begin FileOpened := False; MessageDlg('文件不能打开',mtWarning,[mbOK],0); end; except On EInOutError do begin FileOpened := False; MessageDlg('文件不能创建',mtWarning,[mbOK],0); end; end; end; end; if FileOpened = False then exit; Count := FileSize(MethodFile); if Count>0 then ChangeGrid; RecFileForm.Caption := FormCaption+' -- '+FileName; NewButton.Enabled := False; OpenButton.Enabled := False; CloseButton.Enabled := True; end; 首先系统试图用Reset打开一个文件,并置FileOpened为True。如果文件不能打开,则引发一个I/O异常。在异常处理过程中,首先检测文件是否存在。若不存在则创建这个文件。否则是其它原因引发的异常,则把FileOpend重置为False, 并显示信息“文件不能打开”。在文件创建过程中仍可能引发异常,因而在一个嵌套的异常处理中把FileOpened重置为False,并提示信息“文件不能创建”。 有关异常处理的内容请读者参看第十二章。这段程序说明:异常处理机制不仅能使我们的程序更健壮,而且为编程提供了灵活性。 当用户按下“创建”按钮时,系统首先弹出一个标准输入框,要求用户输入文件名,确认后系统首先检测文件是否存在。若存在则直接打开,否则创建一个新文件。打开或创建过程导致异常,则重置FileName和FileOpened两个全局变量。 procedure TRecFileForm.NewButtonClick(Sender: TObject); begin FileName := InputBox('输入框','请输入文件名',''); if FileName = '' then Exit; try AssignFile(MethodFile,FileName); if FileExists(FileName) then begin Reset(MethodFile); Count := FileSize(MethodFile); if Count>0 then ChangeGrid; end else begin Rewrite(MethodFile); count := 0; end; FileOpened := true; Except on EInOutError do begin FileName := ''; FileOpened := False; end; end; if FileOpened then begin NewButton.Enabled := False; OpenButton.Enabled := False; CloseButton.Enabled := True; RecFileForm.Caption := FormCaption+' -- '+FileName; end; end; 当文件打开或创建后,所要做的工作有: ● 若文件非空,则计算文件长度,并用文件内容填充StringGrid1 ● “创建”、“打开”按钮变灰,“关闭”按钮使能 ● 把文件名附到窗口标题后 6.2.4 记录文件的读入和显示 定义一个全局变量Count用来保存文件中的记录个数。当文件装入时: Count := FileSize(MethodFile); 如果Count > 0,则首先确定StringGrid1的高度、行数。为保证StringGrid1不会覆盖窗口下面的编辑框,定义一个常量MaxShow。当Count < MaxShow时,记录可全部显示;当Count >= MaxShow时,StringGrid1自动添加一个滚动棒。为保证滚动棒不覆盖掉显示内容,StringGrid1的宽度应留有余地。 确定StringGrid1高度、行数的代码如下: With StringGrid do if count < MaxShow then Height := DefaultRowHeight * (Count+1)+10 else Height := DefaultRowHeight * MaxShow+10; RowCount := Count+1; end; 而后从文件中逐个读入记录并显示在StringGrid1的相应位置: for i := 1 to Count do begin Read(MethodFile,MethodRec); ShowMethod(MethodRec,i); end; ShowMehtod是一个过程,用来把一条记录填入StringGrid1的一行中。对于Name、Condition域而言,只须直接赋值即可;而对Nature 域需要把枚举类型值转化为对应意义的字符串(0:“微观”,1:“宏观”);而对Result域则需要把数值转化为一定格式的字符串: Str (MethodRec.Result:6:4,ResultStr); StringGrid1.Cells[3,Pos] := ResultStr; 即Result显示域宽为6,其中小数点后位数为4。 回家了,预祝大家新年快乐。 对象 各位大哥﹕求救.请教DBGrid的问题!急﹗﹗ 使用 dbExpress 访问Access2000/2002 只能用 ODBC 方式吗? 马上给分:如何把DBTEXT中显示的数据做成超级联接的形式?对于EMAIL的呢?写出代码? 请教一个关于报表的问题~ dephi6.0的基本问题 首先祝大家新年快乐,小弟有一个小麻烦,希望大哥帮忙 请教怎样判断鼠标是否在某个控件上. 非常急!!!!!还是日期问题??? 使用spcomm控件读写串口,怎么判断串口是否已经打开? 难题!!!!求解?
记录文件缺省情况下以读写方式打开,如果想以只读或只写方式打开,则需要修改System单元中定义的变量FileMode的值。
FileMode的取值和意义如下表。
表6.3 FileMode的取值和意义
━━━━━━━━━━━━━━
取值 意义
──────────────
0 只读
1 只写
2 读写
━━━━━━━━━━━━━━
FileMode是一个全局变量,对它的每次修改都将影响所有Reset的操作,因此在打开自己的文件后应还原它的值。
在本系统中,当用户按下“打开”按钮时,首先弹出一个标准文件打开对话框,要求用户输入或选择文件名。确认后如果该文件名的文件存在,则用Reset打开,若不存在则创建。程序清单如下。
procedure TRecFileForm.OpenButtonClick(Sender: TObject);
begin
if OpenDialog1.Execute then
FileName := OpenDialog1.FileName
else
exit;
AssignFile(MethodFile,Filename);
try
Reset(MethodFile);
FileOpened := True;
except
On EInOutError do
begin
try
if FileExists(FileName) = False then
begin
ReWrite(MethodFile);
FileOpened := True;
end
else
begin
FileOpened := False;
MessageDlg('文件不能打开',mtWarning,[mbOK],0);
end;
except
On EInOutError do
begin
FileOpened := False;
MessageDlg('文件不能创建',mtWarning,[mbOK],0);
end;
end;
end;
end;
if FileOpened = False then exit;
Count := FileSize(MethodFile);
if Count>0 then
ChangeGrid;
RecFileForm.Caption := FormCaption+' -- '+FileName;
NewButton.Enabled := False;
OpenButton.Enabled := False;
CloseButton.Enabled := True;
end;
首先系统试图用Reset打开一个文件,并置FileOpened为True。如果文件不能打开,则引发一个I/O异常。在异常处理过程中,首先检测文件是否存在。若不存在则创建这个文件。否则是其它原因引发的异常,则把FileOpend重置为False, 并显示信息“文件不能打开”。在文件创建过程中仍可能引发异常,因而在一个嵌套的异常处理中把FileOpened重置为False,并提示信息“文件不能创建”。
有关异常处理的内容请读者参看第十二章。这段程序说明:异常处理机制不仅能使我们的程序更健壮,而且为编程提供了灵活性。
当用户按下“创建”按钮时,系统首先弹出一个标准输入框,要求用户输入文件名,确认后系统首先检测文件是否存在。若存在则直接打开,否则创建一个新文件。打开或创建过程导致异常,则重置FileName和FileOpened两个全局变量。
procedure TRecFileForm.NewButtonClick(Sender: TObject);
begin
FileName := InputBox('输入框','请输入文件名','');
if FileName = '' then Exit;
try
AssignFile(MethodFile,FileName);
if FileExists(FileName) then
begin
Reset(MethodFile);
Count := FileSize(MethodFile);
if Count>0 then
ChangeGrid;
end
else
begin
Rewrite(MethodFile);
count := 0;
end;
FileOpened := true;
Except
on EInOutError do
begin
FileName := '';
FileOpened := False;
end;
end;
if FileOpened then
begin
NewButton.Enabled := False;
OpenButton.Enabled := False;
CloseButton.Enabled := True;
RecFileForm.Caption := FormCaption+' -- '+FileName;
end;
end;
当文件打开或创建后,所要做的工作有:
● 若文件非空,则计算文件长度,并用文件内容填充StringGrid1
● “创建”、“打开”按钮变灰,“关闭”按钮使能
● 把文件名附到窗口标题后
6.2.4 记录文件的读入和显示
定义一个全局变量Count用来保存文件中的记录个数。当文件装入时:
Count := FileSize(MethodFile);
如果Count > 0,则首先确定StringGrid1的高度、行数。为保证StringGrid1不会覆盖窗口下面的编辑框,定义一个常量MaxShow。当Count < MaxShow时,记录可全部显示;当Count >= MaxShow时,StringGrid1自动添加一个滚动棒。为保证滚动棒不覆盖掉显示内容,StringGrid1的宽度应留有余地。
确定StringGrid1高度、行数的代码如下:
With StringGrid do
if count < MaxShow then
Height := DefaultRowHeight * (Count+1)+10
else
Height := DefaultRowHeight * MaxShow+10;
RowCount := Count+1;
end;
而后从文件中逐个读入记录并显示在StringGrid1的相应位置:
for i := 1 to Count do
begin
Read(MethodFile,MethodRec);
ShowMethod(MethodRec,i);
end;
ShowMehtod是一个过程,用来把一条记录填入StringGrid1的一行中。对于Name、Condition域而言,只须直接赋值即可;而对Nature 域需要把枚举类型值转化为对应意义的字符串(0:“微观”,1:“宏观”);而对Result域则需要把数值转化为一定格式的字符串:
Str (MethodRec.Result:6:4,ResultStr);
StringGrid1.Cells[3,Pos] := ResultStr;
即Result显示域宽为6,其中小数点后位数为4。