关于memo和读文本文件的问题?(50分)

  • 主题发起人 主题发起人 michaelx
  • 开始时间 开始时间
M

michaelx

Unregistered / Unconfirmed
GUEST, unregistred user!
var
Pingtext:Textfile;
s:string;
begin
Assignfile(Pingtext,'c:/ping.dat');//ping.dat由ping 127.0.0.1 >c:/ping.dat产生
Reset(Pingtext);
While not EOF(Pingfile) do
begin
ReadLn(Pingtext,s);
Memo1.lines.add(s);
end;
CloseFile(Pingtext);
end;
为什么memo中每一行后都多了一行空行?怎样解决?
 
用Memo1.lines.loadfromfile('c:/ping.dat')不是更好???
那用这么复杂!!!
 
我试过,但不行.也有空行.
 
EOF(Pingfile) 这个Pingfile 是哪来的啊?
还有,你怎么知道 c:/ping.dat 的结尾没有空行?
 
那就是'c:/ping.dat'文件本身的问题了。
 
pingfile是我刚才不小心打错的应是pingtext.
ping.dat每问题.我用ping 127.0.0.1 >c:/ping.dat产生的.
我用type ping.dat看过(也用记事本看过):

Pinging 127.0.0.1 with 32 bytes of data:


Reply from 127.0.0.1: bytes=32 time<10ms TTL=64
Reply from 127.0.0.1: bytes=32 time<10ms TTL=64
.....
但在memo中却是(一下内容由粘贴产生);


Pinging 127.0.0.1 with 32 bytes of data:



Reply from 127.0.0.1: bytes=32 time<10ms TTL=64

Reply from 127.0.0.1: bytes=32 time<10ms TTL=64

.....

 
你读一下其他文件,就知道是'c:/ping.dat'的问题了。
 
产生的ping.dat每行都有换行符,
试一下
setlength(s,length(s)-1);
memo1.lines.add(s);
 
你用记事本打开ping.dat先取消自动换行,然后再自动换行看看它和以前就不一样了
 
这很正常, add 本来就要增加一个 回车换行(#13#10),然而,文本文件
在每一行的末尾也有回车换行,你这样处理当然会出现这样的情况。

你用记事本打开试一试。看一看到底是不是 ping.dat 的问题。

另:你 ping 结果保存为 ping.txt 再试一试。
 
我这样改后没了空行
...
n:=0;
While not EOF(Pingfile) do
begin
ReadLn(Pingtext,s);
n:=n+1;
if n=1 then Memo1.lines.add(s);
if n=2 then n:=0;
end;
...
但我想知怎样可以删掉回车换行?
 
s := copy(s, 1, Length(s) - 2);
 
Memo1.Lines.BeginUpdate;
try
Memo1.lines.loadfromfile('c:/ping.dat');
for i := Memo1.Lines.Count - 1 downto 0 do
if Memo1.Lines = '' then
Memo1.Lines.Delete(i);
finally
Memo1.Lines.EndUpdate;
end;

这不就完了。
 
这样应该没空行
var s:char;
While not EOF(Pingfile) do
begin
ReadLn(Pingtext,s);
Memo1.text:=memo1.text+s;
end;
 
可能是原文件的每行最后都有自己的换行符,因此你在读取一行时,自然就自动加了一行空行!
 
看来,前面几位都没有认真看过文件的内容。
实际上,这根本就是因为文件本身就是这样子的,与你的处理没有关系,逐行读入或用
LoadFromFile都是一样。
用UltraEdit的十六进制编辑器或Debug查看一下文件,就会发现,文件格式是这样的:
^M^M^J<一行内容>^M^M^J<一行内容>......^M^M^J。
而一般的文本文件应该是这样:
<一行内容>^M^J<一行内容>......^M^J^Z。
TMemo将单独的“回车”处理成“回车”+“换行”应该说是正确的,因为确实有一些不
太正规的文本文件只用^M来标识一行的结束。

针对这一具体问题,采用DreamTiger的方法最好。

beta和qcq的说法是错误的。
 
如果文件中本身就有空行,那岂不是…………
呵呵!
 
对呀。看来只好处理到字符级。
 
后退
顶部