string - 删除备忘录上的特定行

标签 string delphi lines tmemo

我有行中带有多余字符的备忘录,我想将其全部删除。
这是我的代码:

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;


我认为这是不对的,我不应该这样做。
如何优雅地做这样的工作?

最佳答案

因为您的循环从0Count - 1,所以将删除已删除行之后的行。

说明:假设第3行需要删除。删除它,现在第4行将成为第3行。在下一次运行时,循环变量i将增加到4,因此永远不会评估新的第3行。

解决方案:反向运行循环:

for i := m0.Lines.Count - 1 downto 0 do

关于string - 删除备忘录上的特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26571019/

相关文章:

c# - 使用 Delphi 7 访问托管代码 (CLR) DLL

c++ - 字符串/数组情况 c++

Delphi SOAP 响应保存到XML?

Java:将 String[] 数组元素分配给 String?

使用泛型的 Delphi 属性 getter 函数

objective-c - Objective C 标签行间距?

无法在 C 中的 TXT 文件中单独写入

计算文件中的行数 - C

python - python中带有EOF的字符串

java - 获取/设置非静态字符串为静态字符串以通过Java传递