简单问题,如何删除Memo中的空行(有多个). ( 积分: 50 )

  • 主题发起人 主题发起人 菜鸟黄
  • 开始时间 开始时间

菜鸟黄

Unregistered / Unconfirmed
GUEST, unregistred user!
简单问题,如何删除Memo中的空行(有多个).
 
简单回答,
for I := 0 to Memo1.Lines.Count - 1 do
if Trim(Memo1.Lines.Strings) = '' then
Memo1.Lines.Delete(I);
 
同意楼上的
 
for I := Memo1.Lines.Count - 1 downto 0 do
if Trim(Memo1.Lines.Strings) = '' then
Memo1.Lines.Delete(I);
 
楼上几位错了,呵呵,不信自己试下。。。(每次delete,下次的memo1.lines.count会相吗)
再说直接对控件进行add或delete,速度会很慢的。
瞧瞧本少爷的,哈哈
procedure TForm1.Button1Click(Sender: TObject);
var
aStrings: TStrings;
i: integer;
begin
aStrings:= TStringList.Create;
try
for i:= 0 to Memo1.Lines.Count-1 do
if Trim(Memo1.Lines.Strings)<> '' then
aStrings.Add(Memo1.Lines.Strings);
Memo1.Lines.Assign(aStrings);
finally
aStrings.Free;
end;
end;
 
恩,前面2位都被迷惑了,[那年黄梅花开]的才是对的
 
to 那年黄梅花开
呵呵,高手,我试下你的.
 
还有一个问题,我要删除Memo中内容相同多余的行,又应该怎样写
 
yuzk2005 的答案是最正确简单的(注意必须使用 downto)。
那年黄梅花开的答案太繁琐了。
不过,如果 Memo 中行数非常多,用那年黄梅花开的答案会快些。
 
i := 0;
while i < Memo1.Items.Count do
begin
if Trim(Memo1.Lines.Strings) = '' then
Memo1.Items.Delete(i);
i := i + 1;
end;
 
长见识了,觉得简单的,原来还有问题哦
 
i := 0;
while i < Memo1.Items.Count do
begin
if i + 1 < Memo1.Items.Count then
if Memo1.Items = Memo1.Items[i + 1] then
Memo1.Items.Delete(i);
if Trim(Memo1.Items) = '' then
Memo1.Items.Delete(i);
i := i + 1;
end;
 
如果以同样的方式用 for i:= 0 to Memo1.Lines.Count-1 do 的话会出错,是因为,当你判断出有空的,然后直接删除后,在Memo1中已经没有原来的那么多条记录,因此条件中的Memo1.Lines.Count-1已经超出了范围,出错也成了自然
 
相同行,只取其中一行
procedure TForm1.Button1Click(Sender: TObject);
var
aStrings: TStrings;
i: integer;
begin
aStrings:= TStringList.Create;
try
for i:= 0 to Memo1.Lines.Count-1 do
if aStrings.IndexOf(Memo1.Lines.Strings)=-1 then
aStrings.Add(Memo1.Lines.Strings);
Memo1.Lines.Assign(aStrings);
finally
aStrings.Free;
end;
end;
 
to:kaida
你好!想知道为什么用downto就对了。
 
如果Memo的行数非常多时,那么有更好的处理方法吗?
 
to xjw10
因为用downto的话格式是:
for i:=变量 downto 常量 do
 
当然是用我的方法咯,数据都放在内存中吗,这才快啊,对控件本身进行delete等操作,那不慢疯了。。。
你瞧treeview的添加删除操作都有
beginUpdate
endUpdate
啊,呵呵.
 
再问一个问题,那么在Memo中加入行时,相同的不加.这样又应该怎样写呢?
 
这也问哪,照葫芦画瓢
 
后退
顶部