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

Заполнение списка словами из строки с возможностью указания множества разделителей

Delphi , Синтаксис , Текст и Строки



Автор: VID
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Заполнение списка (TargetList) словами из строки (Text),
с возможностью укзания множества разделителей

Функция заполняет список TargetList, словами (наборами символов)
из строки Text. Имеется возможность получения позиции каждого
слова в строке (ReturnWordPlaces = True); добавления в TargetList
не только слов, но и разделителей (ReturnWordDeviders = True);
указания более чем одного разделителя (все в строке WordDeviders).
Ограничением является невозможность указания разделителя,
длинной более чем 1 символ.

Result = TargetList.Count; {количество строк в TargetList}

Зависимости: sysutils, classes, system
Автор: VID, vidsnap@mail.ru, ICQ: 132234868, Махачкала
Copyright: VID
Дата: 02 мая 2002 г.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * * * * * * * * * * * * }

function GetWordListFromText(Text, WordDeviders: string; TargetList: TStrings;
  ReturnWordPlace, ReturnWordDeviders: Boolean): Integer;
var
  X, TextLength, WP: Integer;
  W: string;
begin
  Result := 0;
  TextLength := Length(Text);
  if TextLength = 0 then
    Exit;
  if Length(WordDeviders) = 0 then
    Exit;
  if TargetList = nil then
    Exit;
  TargetList.BeginUpdate();
  TargetList.Clear;
  WordDeviders := AnsiUpperCase(WordDeviders);
  W := '';
  X := 0;
  WP := 1;
  repeat
    X := X + 1;
    if (POS(AnsiUpperCase(Text[x]), WordDeviders) = 0) and (X <= TextLength)
      then
      W := W + Text[x]
    else
    begin
      if W <> '' then
      begin
        case ReturnWordPlace of
          True: TargetList.Add(W + '=' + Inttostr(WP));
          False: TargetList.Add(W);
        end;
      end;
      W := '';
      WP := X + 1;
      if ReturnWordDeviders = true then
      begin
        case ReturnWordPlace of
          True: TargetList.Add(Text[x] + '=' + Inttostr(x));
          False: TargetList.Add(TEXT[x]);
        end;
      end;
    end;
  until (X > TextLength);
  TargetList.EndUpdate;
  Result := TargetList.Count;
end;

Привет! Я переведу контент на русский язык.

Функция Delphi GetWordListFromText разбивает заданный текст на слова и добавляет их в целевой список строк. Функция принимает несколько параметров:

  • Text: входной текст, который нужно разбить
  • WordDeviders: строка, содержащая один или более символов, которые отделяют слова в входном тексте
  • TargetList: объект TStrings, где будут добавлены полученные слова
  • ReturnWordPlace: булевое значение, указывающее, включать ли позицию каждого слова в входном тексте (по умолчанию - False)
  • ReturnWordDeviders: булевое значение, указывающее, включать ли разделители слов самих себя в целевой список (по умолчанию - False)

Функция проходит по входному тексту, добавляя слова в целевой список, когда она встречает символ, который не является разделителем слов. Если ReturnWordPlace равно True, то позиция каждого слова также включается в целевой список. Если ReturnWordDeviders равно True, то сами разделители слов добавляются в целевой список.

Пример использования этой функции:

var
  TargetList: TStrings;
begin
  TargetList := TStringList.Create;
  try
    GetWordListFromText('Hello, world!', ', .:', TargetList, True, False);
    // Целевой список теперь содержит следующие элементы:
    // "Hello" = 1
    // world! = 2
    ShowMessage(TargetList.Text);
  finally
    TargetList.Free;
  end;
end.

В этом примере входной текст - 'Hello, world!', а разделители слов - ', .:'. Функция разбивает текст на слова и добавляет их в целевой список с позициями. Результатом является список из двух элементов: "Hello" = 1 и "world!" = 2.

Код хорошо организован и легко понятен, но есть несколько минимальных предложений:

  • Вместо использования AnsiUpperCase для преобразования разделителей слов в верхний регистр можно использовать регулярное выражение или функцию UpperCase, чтобы достичь аналогичного результата.
  • Выходные операторы Exit на конце каждого блока можно заменить одним оператором Exit; после последнего цикла repeat.
  • Комментарий о ограничении длины разделителей слов (т.е., оно не может быть длиннее 1 символа) не является точным, поскольку код позволяет использовать несколько символов в строке WordDeviders. Вам можно изменить этот комментарий, чтобы отражать правильное поведение.

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

Функция GetWordListFromText позволяет разделить строку текста на слова с возможностью указания множества разделителей и добавления в список позиций каждого слова.


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

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




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


:: Главная :: Текст и Строки ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-04-04 05:43:51/0.0060181617736816/0