繁体   English   中英

Delphi 7从备注行删除一些字符

[英]Delphi 7 delete some character from memo lines

我在备忘录中有如下几行:

111111.kll
222222.kll

我需要从每行中删除最后4个字符,以获得如下结果:

111111
222222

使用for循环 ,您可以遍历各行。 使用copy ,您可以获取行的一部分并将其分配回该行:

for i := 0 to Memo1.Lines.Count - 1 do
  Memo1.Lines[i] := Copy(Memo1.Lines[i], 1, Length(Memo1.Lines[i]) - 4);

现在,更改备忘录的行并不是很快,因此,如果您有很多行,则可能要使用字符串列表。 您可以处理字符串列表中的所有行,并仅在完成后才将它们放回备忘录中。 这样,备忘录的内容仅更改一次:

var
  i: Integer;
  sl: TStringList;
begin
  sl := TStringList.Create;
  try
    sl.Text := Memo1.Text;
    for i := 0 to sl.Count - 1 do
      sl[i] := Copy(sl[i], 1, Length(sl[i]) - 4);
    Memo1.Text := sl.Text;
  finally
    sl.Free;
  end;
end;

作为GolezTrol解决方案的替代方法,您可以直接处理Memo内容,而不用先在内存中复制它:

var
  i, LineStart, LineLen: Integer;
begin
  Memo1.Lines.BeginUpdate;
  try
    for i := 0 to Memo1.Lines.Count - 1 do
    begin
      LineStart := Memo1.Perform(EM_LINEINDEX, i, 0);
      LineLen := Memo1.Perform(EM_LINELENGTH, LineStart, 0);
      Memo1.Perform(EM_SETSEL, LineStart + LineLen - 4, LineStart + LineLen);
      Memo1.SelText := '';
    end;
  finally
    Memo1.Lines.EndUpdate;
  end;
end;

好了,有一个specif函数来替换字符。 例如,如果要删除“ .kll”,则无需使用循环。

  Memo1.Lines.Text := StringReplace(Memo1.Lines.Text,'.kll','',[rfReplaceAll, rfIgnoreCase]);

希望能帮助到你!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM