簡體   English   中英

在delphi中從TMemo中搜索和刪除

[英]Search and delete from TMemo in delphi

我有一個代碼,可以從備忘錄行中搜索和刪除。 但是有一個小問題,例如,備忘錄行包含 1、11、12、13、21、22 等。當 e=1 時,它會刪除所有包含 1 的行。我只需要刪除定義的搜索(e=1 )

  for i := 0 to memo3.lines.count-1 do
  begin
    if (pos(IntToStr(e), Memo3.Lines[i]) > 0) then begin
      Memo3.Lines.Delete(i);  
      Memo3.Lines.Delimiter := '-';
      Memo3.Lines.StrictDelimiter := True;
      t:= Memo3.Lines.DelimitedText;
      Label5.Caption:=t;
    end;

在此處輸入圖片說明

只檢查字符串

如果您只想單獨查找字符串,則必須查看字符串前后是否沒有數字:

NumStr := IntToStr(e);
Str := Memo3.Lines[i];
NumPos := Pos(NumStr, Str);
if NumPos > 0 then
begin
  if (NumPos > 1) and IsDigit(Str[NumPos - 1])) or
     (NumPos < Length(Str)) and IsDigit(Str[NumPos + 1])) then
    Continue; // i.e. skip deleting etc.

或者,您嘗試在找到的NumStr周圍查找空格、制表符等,並且僅當您發現該數字是該字符串中的單個“單詞”時才刪除。

每行一個數字?

現在,如果您的TMemo每行只包含一個數字,那么事情就容易多了,而且您根本不需要Pos()

NumStr := IntToStr(e);
for i := Memo3.Lines.Count - 1 downto 0 do
begin
  if NumStr = Memo3.Lines[i] then
  begin
    Memo3.Lines.Delete(i);
    ...
  end;
end;

請注意,我沒有為循環的每次迭代重復調用IntToStr() NumStr一次並將調用結果分配給NumStr 函數調用需要時間。

循環刪除

如果你想從索引的項目列表中刪除,比如TMemoLines屬性,那么為了不跳過任何行,總是向后循環,就像我上面做的那樣。 因為如果刪除第i,則i之后的所有行都會向下移動一個索引,所以當您轉到第i+1行時,那將是下一行第二行,而不是下一行(因為刪除后得到了索引i )。

但是當您向后循環時,前一行將是i-1 ,並且該索引沒有改變。

簡單的例子:

原情況:

index: text
0:     A
1:     B
2:     C  <-- delete!
3:     D
4:     E

刪除后:

0:     A
1:     B
2:     D <-- now at index 2, was at index 3
3:     E <-- now at index 3, was at index 4

如果刪除索引 2 處的C ,則DE向下一個索引,現在D位於索引 2。但是向上循環將i增加到 3,因此現在您檢查第 3 行,並且D永遠不會被檢查 但是如果你往下走,那么i就變成了 1,這並沒有改變 index 並且仍然包含B

通過刪除更改備忘錄中的行時,您不能從 0 循環到計數 - 1,因為每次刪除行時索引都會更改

此循環將刪除包含e值的所有行

for i := Memo3.Lines.Count - 1 downto 0 do
begin
  if pos(e, Memo3.Lines[i]) > 0 then
  begin
    Memo3.Lines.Delete(i);
  end;
end;

然而,我不知道您的示例中的其他代碼行應該做什么,也許您可​​以詳細說明您要通過它實現的目標。

編輯
如果您只想刪除與e中的值匹配的行,請使用此循環

Value := IntToStr(e);
for i := Memo1.Lines.Count - 1 downto 0 do
begin
  if Value = Trim(Memo1.Lines[i]) then
  begin
    Memo1.Lines.Delete(i);
  end;
end;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM