我有许多备忘录'芒果'它中的一行,我想要计算它发现文本&芒果的次数。
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;
但结果,例如,如果它发现六个芒果'条目将是这样的:
1
2
3
4
5
6
我怎么才能得到结果只有6?
答案 0 :(得分:7)
如果您只想要备忘录中显示的总数,则需要执行以下操作:
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')));