过程中的类型转换无效

时间:2013-03-19 20:35:36

标签: delphi

我的程序代码在编译时一直给我带来问题。该程序的想法只是创建一个将文本文件读入数组的过程。然后该按钮将显示在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.

1 个答案:

答案 0 :(得分:7)

现在有你的真实代码我会列出你错误的一些

  • ShowData永远不会被称为
  • ShowData是一个糟糕的名称,因为没有显示任何内容,只有读取数据来自文件,所以最好将其重命名为{{1 }}
  • ReadDataaNames是过程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' )