Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Подсчет вхождений текста в `Memo` компонент в Delphi: эффективный подход

Delphi , Компоненты и Классы , TMemo и TRichEdit

Подсчет вхождений текста в 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;

Использовать эту функцию можно следующим образом:

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
      Result := Result + 1;
  end;
end;

Теперь, чтобы использовать классовый помощник, достаточно написать:

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

Заключение

Использование функций и классовых помощников позволяет значительно упростить процесс подсчета вхождений текста в Memo компонент, а также повышает переиспользуемость кода. Это особенно полезно при работе с большим количеством строк и различными текстами для поиска.

Создано по материалам из источника по ссылке.

Статья о том, как эффективно подсчитать количество вхождений определенного текста в компоненте `Memo` в среде разработки Delphi, с использованием Object Pascal.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TMemo и TRichEdit ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 08:52:53/0.0033140182495117/0