DELPHI的BUG还是故意? 一个让我痛恨的readln()问题, DELPHI5没有问题, DELPHI6, DELPHI7都有问题

时间:2023-01-06 17:35:04
我有一个处理文件的程序, 处理从各个软件开发商提供的文本文体.

   s:string;
   tmpfile:textfile;

   assignfile(tmpfile, "XXXXXX");
   reset(tmpfile);

   while not(eof(tmpfile)) do
      
            readln(tmpfile,s);

问题就在于这个readln读出的结果不是我要的, 

有一个文本文件中不规范, 每行的回车换行中的0D,0A中少了一个0A, 结果整个文件都被一次性全部读出, 而不是一行一行地读出, DELPHI5没有问题, DELPHI6, DELPHI7都有问题, DELPHI的BUG还是故意? 望高人指点!


PS, 我一向痛恨BORLAN的东西, :)现在没有办法, 改别人的程序! 高手们别生气!!!:)

5 个解决方案

#1


这不是 Bug 是因为 Delphi6 和 Delphi7 中要兼顾 Linux 中的文本文件, Linux 中的文件文件是标准的回车换行作为行结束符, 所以会有这个问题.

解决办法就是使用 TStringList 类, 然后再使用 LoadFromFile 方法, 这样得到的行既可以使用回车做行结束符, 也可以使用回车换行做行结束符.
也可以使用 TFileStream 类和 TStringList 类结合, 然后再使用 LoadFromStream 方法.

#2


mark

#3


正解

#4


借问一下:如果不单要按行读文本,而且每行文本中,同时每行字串都是由|分隔
现在要将每行字串按|取得,该如何办?

#5


你既然这么痛恨Borland,这Delphi不用也罢

#1


这不是 Bug 是因为 Delphi6 和 Delphi7 中要兼顾 Linux 中的文本文件, Linux 中的文件文件是标准的回车换行作为行结束符, 所以会有这个问题.

解决办法就是使用 TStringList 类, 然后再使用 LoadFromFile 方法, 这样得到的行既可以使用回车做行结束符, 也可以使用回车换行做行结束符.
也可以使用 TFileStream 类和 TStringList 类结合, 然后再使用 LoadFromStream 方法.

#2


mark

#3


正解

#4


借问一下:如果不单要按行读文本,而且每行文本中,同时每行字串都是由|分隔
现在要将每行字串按|取得,该如何办?

#5


你既然这么痛恨Borland,这Delphi不用也罢