Lazarus错误:无法获取常量表达式的地址

时间:2014-10-07 18:30:58

标签: file pascal lazarus

我想制作一个简单的程序来读取lazarus中的文件。但是当我尝试从txt文件编译器读取一行时,给我这个错误:"不能取常量表达式的地址"

有一个有问题的部分 -

system.Assign(MyFile, label1.caption + '.txt');
  reset(MyFile);
  Readln(MyFile,name);  - this give that error

有任何解决此问题的建议吗?

2 个答案:

答案 0 :(得分:1)

根据您发布的内容(尤其是label1.caption),它似乎来自表单上的事件处理程序。在这种情况下,name最有可能是Form1.Name的范围,program Test; uses SysUtils; var Buffer: array[0..255] of Char; // Reads up to 256 characters in a line LineData: string; begin System.Assign(MyFile, 'C:\Temp\Test.txt'); Reset(MyFile); ReadLn(MyFile, Buffer); LineData := Buffer; // Do something with LineData WriteLn(LineData); ReadLn; end. 不是变量,而是表单本身的属性。

声明一个正确类型的变量,然后读入它。例如,要读取一行文本(在控制台应用程序中测试的示例):

program Test;

uses
  SysUtils, Classes;

var
  LineData: string;
  Reader: TStreamReader;
begin
  Reader := TStreamReader.Create('C:\Temp\Test.txt');
  try
    LineData := Reader.ReadLine;
    WriteLn(LineData);
    ReadLn;
  finally
    Reader.Free;
  end;
end.

更好的选择是摆脱旧的IO功能,进入现代世界。例如,您可以使用`Classes.TStreamReader'代替:

{{1}}

答案 1 :(得分:0)

我测试了它并得出以下结论: 1.)它是一个编译器消息 - 而不是运行时错误! 2.)你还没有声明“名字”。 因此,您所使用的表单的属性“名称”被采用 - 这导致确切的错误。

解决方案:声明一个字符串以将行放入

var sTextLine:string; 
begin
    //...
    Readln(Myfile,,sTextLine);
    //...
end;
相关问题