我的程序代码在编译时一直给我带来问题。该程序的想法只是创建一个将文本文件读入数组的过程。然后该按钮将显示在richedit上。
以下是原始代码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
ArrNames = array [1..10] of string;
ArrSales = array [1..10] of integer;
type
TForm1 = class(TForm)
btnShowData: TButton;
redt1: TRichEdit;
procedure btnShowDataClick(Sender: TObject);
private
public
{ Public declarations }
end;
Procedure Showdata;
var
Form1: TForm1;
implementation
{$R *.dfm}
Procedure ShowData;
var c2u : textfile;
count : integer;
aNames : arrNames;
aSales : arrSales;
Begin
If FileExists('data.txt') <> true then
begin
Messagedlg('File does not exist', mtError, [mbOK], 0);
Exit;
end;
Count :=0;
AssignFile(c2u, 'data.txt');
Reset(c2u);
While Not EOF(c2u) do
begin
Inc(Count);
readln (c2u, aNames[count]);
readln (c2u, aSales[count]);
end;
Closefile(c2u);
End;
procedure TForm1.btnShowDataClick(Sender: TObject);
var J : integer;
aNames : arrNames;
aSales : arrSales;
begin
redt1.lines.add(aNames[J] +#9 + 'R' +IntToStr(aSales[J]));
end;
end.
答案 0 :(得分:7)
现在有你的真实代码我会列出你错误的一些:
ShowData
永远不会被称为ShowData
是一个糟糕的名称,因为没有显示任何内容,只有读取数据来自文件,所以最好将其重命名为{{1 }} ReadData
和aNames
是过程aSales
/ method ShowData
的本地变量,生命周期仅在此过程中/方法。您无法访问其他过程/方法的局部变量。
解决方案:将它们定义为TForm1.btnShowDataClick
作为次要改进,您应该命名以TForm1
开头的所有类型(例如T
)。这只是一个惯例,但非常有帮助。
有a lot more of naming conventions
TMyType
没有错,但是很糟糕,你应该在脑海中写下“如果文件不存在,我会做一些不同的事情”
If FileExists( 'data.txt' ) <> true
更具可读性(并阻止几个用户头痛; o))
这是完整的单元,包含所有改进和一些注释。
if not FileExists( 'data.txt' )