我有一个备忘录,其中有很多“ mango”行,我想计算它找到文本“ mango”的次数。

var
  f, mango: Integer;
begin
  mango := 0;
  for f := 0 to m0.lines.Count - 1 do
  begin
    if AnsiContainsStr(m0.lines[f], 'mango') then
    begin
      mango := mango + 1;
      m0.lines.Add(IntToStr(mango));
    end
  end;
end;


但是,例如,如果发现六个“ mango”条目,结果将是这样的:

1
2
3
4
5
6


我怎样才能只有6个结果?

最佳答案

如果只希望在备忘录中显示总数,则需要执行以下操作:

var
  f, mango: Integer;
begin
  mango := 0;
  for f := 0 to m0.lines.Count - 1 do
  begin
    if AnsiContainsStr(m0.lines[f], 'mango') then
    begin
      mango := mango + 1;
    end
  end;
  m0.lines.Add(IntToStr(mango));    // This line needs to be outside of your loop
end;


您每次将计数增加到列表中。

如果您想要一个可重用的功能,可以使用如下代码:

function CountStringListTexts(const ASearchList: TStrings; const ASearchText: string): Integer;
var
  f: Integer;
begin
  Result := 0;
  for f := 0 to ASearchList.Count - 1 do
  begin
    if AnsiContainsStr(ASearchList[f], ASearchText) then
    begin
      Result := Result + 1;
    end
  end;
end;


要使用此功能,您可以执行以下操作:

m0.lines.Add(IntToStr(CountStringListTexts(m0.Lines, 'mango')));


也可以将其制成类帮助器:

type
  TSClassHelper = class helper for TStrings
    function CountMatchTexts(const ASearchText: string): Integer;
  end;

function TSClassHelper.CountMatchTexts(const ASearchText: string): Integer;
var
  f: Integer;
begin
  Result := 0;
  for f := 0 to Self.Count - 1 do
  begin
    if AnsiContainsStr(Self.Strings[f], ASearchText) then
    begin
      Result := Result + 1;
    end
  end;
end;


使用它会非常容易。您只需执行以下操作:

m0.lines.Add(IntToStr(m0.Lines.CountMatchTexts('mango')));

关于delphi - 计算备忘录中的特定文本(Delphi),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23453100/

10-12 21:34