我有行中带有多余字符的备忘录,我想将其全部删除。
这是我的代码:
var
del: Integer;
begin
for del := 0 to m0.Lines.Count - 1 do
begin
if (AnsiContainsStr(m0.Lines[del], 'remove me')) then
begin
m0.Lines.Delete(del);
end;
end;
end;
上面的代码仍然留下了一些我想删除的行。它只会删除其中一些。
所以我尝试了另一种方法,这就是工作。
var
i, r, n: Integer;
begin
for i := 0 to m0.Lines.Count - 1 do
begin
if (AnsiContainsStr(m0.Lines[i], 'remove me')) then
begin
for r := 0 to m0.Lines.Count - 1 do
begin
if (AnsiContainsStr(m0.Lines[r], 'remove me')) then
begin
for n := 0 to m0.Lines.Count - 1 do
begin
if (AnsiContainsStr(m0.Lines[n], 'remove me')) then
begin
m0.Lines.Delete(n);
end;
end;
m0.Lines.Delete(r);
end;
end;
m0.Lines.Delete(i);
end;
end;
end;
我认为这是不对的,我不应该这样做。
如何优雅地做这样的工作?
最佳答案
因为您的循环从0
到Count - 1
,所以将删除已删除行之后的行。
说明:假设第3行需要删除。删除它,现在第4行将成为第3行。在下一次运行时,循环变量i
将增加到4,因此永远不会评估新的第3行。
解决方案:反向运行循环:
for i := m0.Lines.Count - 1 downto 0 do
关于string - 删除备忘录上的特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26571019/