我想制作一个简单的程序来读取lazarus中的文件。但是当我尝试从txt文件编译器读取一行时,给我这个错误:"不能取常量表达式的地址"
有一个有问题的部分 -
system.Assign(MyFile, label1.caption + '.txt');
reset(MyFile);
Readln(MyFile,name); - this give that error
有任何解决此问题的建议吗?
答案 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;