Delphi代码不读取文本文件
我对以下代码有问题:Delphi代码不读取文本文件,delphi,Delphi,我对以下代码有问题: var l :string; var f:Textfile; begin assignfile(f,'c:\test\file.txt'); reset(f); while not eof(f) do readln(f,l); closefile(f); showmessage(l); 我的问题是showmessage没有返回任何内容。。。它是空的,文本文件不是空的 为什么会发生这种情况?您读取同一变量中的每一新行,从而用新行覆盖最后一行。如果
var l :string;
var f:Textfile;
begin
assignfile(f,'c:\test\file.txt');
reset(f);
while not eof(f) do
readln(f,l);
closefile(f);
showmessage(l);
我的问题是showmessage没有返回任何内容。。。它是空的,文本文件不是空的
为什么会发生这种情况?您读取同一变量中的每一新行,从而用新行覆盖最后一行。如果最后一次读取返回空字符串(或仅包含空格或enter的字符串),则消息框将显示为空。即使它不是空的,也只会显示最后一行,而不是整个文件 使用l作为缓冲区。每次读取后,将其附加到另一个字符串:
var l: string;
var t: string;
var f: Textfile;
begin
t := '';
assignfile(f, 'c:\test\file.txt');
reset(f);
while not eof(f) do
begin
readln(f, l);
t := t + l;
end;
closefile(f);
showmessage(t);
对于大型文件,使用字符串生成器而不是将所有内容压缩到同一个字符串更有效,因为t
将在每次迭代中重新分配
或者,使用TStringList或TFileStream读取文件。使用TFileStream,您可以一次将整个文件读入字符串。TStringList的优点是它解析文件并使每一行成为stringlist中的一项
但是使用这些解决方案,您将把整个文件读入内存。如果可以逐行处理,请在循环内部进行处理。行
Readln(f, l)
将
f
的当前行放入字符串l
。因此,它将替换前一行,因此在结尾,l
将只包含文件的最后一行。可能最后一行是空的?文件的最后一行很可能是空的
您可能希望尝试以下操作以查看差异:
while not eof(f) do
begin
readln(f,l);
showmessage(l);
end;
closefile(f);
除了已经说过的话之外: 现在没有人使用低级文件例程。至少有两种更好的方法。第一个涉及流,第二个涉及流:
var sl : TStringList;
begin
sl := TStringList.Create;
try
sl.LoadFromFile('c:\your\file.txt');
ShowMessage(sl.Text);
finally
sl.Free;
end;
end;
免责声明:代码未经测试您的代码可以正常工作,但之后的一些代码无法。。。此代码:get_命令:=Copy(l,Pos('|',l)+1,Length(l))。。。读取文本文件的最后一行(很好,它起作用了。:)也许你可以结束这个问题(接受对你帮助最大的答案),并针对这个新问题提出一个新问题。这样,您就可以添加具有正确格式的所有相关代码,并且您将有更多的空间来描述问题。