Подсчет вхождений текста в Memo компонент в Delphi: эффективный подход
Работая с компонентом Memo в среде разработки Delphi, разработчики часто сталкиваются с необходимостью подсчета вхождений определенного текста. В данной статье мы рассмотрим, как можно эффективно решить эту задачу, используя язык Object Pascal.
Проблема
Представим, что у нас есть Memo с множеством строк, и нам необходимо подсчитать, сколько раз в нем встречается определенный текст, например, слово "mango". Пример кода, который пытается выполнить эту задачу, но в то же время добавляет номера вхождений в Memo, представлен ниже:
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;
Этот код приводит к тому, что в Memo отображаются номера вхождений, а не итоговый счетчик. Если слово "mango" встречается шесть раз, в Memo появятся строки с числами от 1 до 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
mango := mango + 1;
end;
m0.lines.Add(IntToStr(mango));
end;
Также можно создать функцию, которая будет принимать TStrings и искомый текст, и возвращать количество вхождений:
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
Result := Result + 1;
end;
end;
Для удобства можно также создать классовый помощник:
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
Result := Result + 1;
end;
end;
Теперь, чтобы использовать классовый помощник, достаточно написать:
Использование функций и классовых помощников позволяет значительно упростить процесс подсчета вхождений текста в Memo компонент, а также повышает переиспользуемость кода. Это особенно полезно при работе с большим количеством строк и различными текстами для поиска.
Статья о том, как эффективно подсчитать количество вхождений определенного текста в компоненте `Memo` в среде разработки Delphi, с использованием Object Pascal.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.