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))。。。读取文本文件的最后一行(很好,它起作用了。:)也许你可以结束这个问题(接受对你帮助最大的答案),并针对这个新问题提出一个新问题。这样,您就可以添加具有正确格式的所有相关代码,并且您将有更多的空间来描述问题。