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

Разделить строку на слова

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

Разделить строку на слова

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

procedure SplitTextIntoWords(const S: string; words: TstringList);
 var
   startpos, endpos: Integer;
 begin
   Assert(Assigned(words));
   words.Clear;
   startpos := 1;
   while startpos <= Length(S) do
   begin
     // skip non-letters 
    while (startpos <= Length(S)) and not IsCharAlpha(S[startpos]) do
       Inc(startpos);
     if startpos <= Length(S) then
     begin
       // find next non-letter 
      endpos := startpos + 1;
       while (endpos <= Length(S)) and IsCharAlpha(S[endpos]) do
         Inc(endpos);
       words.Add(Copy(S, startpos, endpos - startpos));
       startpos := endpos + 1;
     end; { If }
   end; { While }
 end; { SplitTextIntoWords }

 function StringMatchesMask(S, mask: string;
   case_sensitive: Boolean): Boolean;
 var
   sIndex, maskIndex: Integer;
 begin
   if not case_sensitive then
   begin
     S    := AnsiUpperCase(S);
     mask := AnsiUpperCase(mask);
   end; { If }
   Result    := True; // blatant optimism 
  sIndex    := 1;
   maskIndex := 1;
   while (sIndex <= Length(S)) and (maskIndex <= Length(mask)) do
   begin
     case mask[maskIndex] of
       '?':
         begin
           // matches any character 
          Inc(sIndex);
           Inc(maskIndex);
         end; { case '?' }
       '*':
         begin
           // matches 0 or more characters, so need to check for 
          // next character in mask 
          Inc(maskIndex);
           if maskIndex > Length(mask) then
             // * at end matches rest of string 
            Exit
           else if mask[maskindex] in ['*', '?'] then
             raise Exception.Create('Invalid mask');
           // look for mask character in S 
          while (sIndex <= Length(S)) and
             (S[sIndex] <> mask[maskIndex]) do
             Inc(sIndex);
           if sIndex > Length(S) then
           begin
             // character not found, no match 
            Result := False;
             Exit;
           end;
           { If }
         end; { Case '*' }
       else if S[sIndex] = mask[maskIndex] then
         begin
           Inc(sIndex);
           Inc(maskIndex);
         end { If }
         else
           begin
             // no match 
            Result := False;
             Exit;
           end;
     end; { Case }
   end; { While }
   // if we have reached the end of both S and mask we have a complete 
  // match, otherwise we only have a partial match 
  if (sIndex <= Length(S)) or (maskIndex <= Length(mask)) then
     Result := False;
 end; { stringMatchesMask }

 procedure FindMatchingWords(const S, mask: string;
   case_sensitive: Boolean; matches: Tstrings);
 var
   words: TstringList;
   i: Integer;
 begin
   Assert(Assigned(matches));
   words := TstringList.Create;
   try
     SplitTextIntoWords(S, words);
     matches.Clear;
     for i := 0 to words.Count - 1 do
     begin
       if stringMatchesMask(words[i], mask, case_sensitive) then
         matches.Add(words[i]);
     end; { For }
   finally
     words.Free;
   end;
 end;

 { 
 The Form has one TMemo for the text to check, one TEdit for the mask, 
 one TCheckbox (check = case sensitive), one TListbox for the results, 
 one Tbutton 
}
 procedure TForm1.Button1Click(Sender: TObject);
 begin
   FindMatchingWords(memo1.Text, edit1.Text, checkbox1.Checked, listbox1.Items);
 end;

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

Вот перевод вашего текста:

Код - это реализация трех процедур на языке программирования Delphi:

  1. SplitTextIntoWords - эта процедура разбивает заданную строку на отдельные слова и хранит их в TstringList.
  2. StringMatchesMask - это функция, которая проверяет, соответствует ли заданная строка указанной маске.
  3. FindMatchingWords - эта процедура находит все слова в заданном тексте, которые соответствуют указанной маске.

Код также включает форму с несколькими компонентами: - TMemo для текста для проверки - TEdit для маски - TCheckbox (проверено) для чувствительности к регистру - TListbox для результатов - TButton

Когда кнопка нажата, она вызывает процедуру FindMatchingWords с предоставленными параметрами и заполняет список бокса соответствующими словами.

Вот подробное описание кода:

SplitTextIntoWords Эта процедура принимает строку и TstringList в качестве входных данных. Она перебирает вводную строку, игнорируя неалфавитные символы, пока не найдет алфавитный символ, затем она извлекает слово из строки, перебирая алфавитные символы, пока не встретит неалфавитный символ или не достигнет конца строки.

StringMatchesMask Эта функция проверяет, соответствует ли заданная строка указанной маске. Она перебирает обе строки одновременно, сравнивая каждый символ вводной строки с соответствующим символом маски. Если маска содержит '?' (соответствует любому символу), '' (соответствует 0 или более символам) или литеральный символ, который соответствует текущему символу в вводной строке, она продолжает на следующий символ. Если маска содержит '', она также проверяет, есть ли еще символы в маске и если они '?' , '*' или литеральные символы.

FindMatchingWords Эта процедура находит все слова в заданном тексте, которые соответствуют указанной маске. Она разбивает вводный текст на отдельные слова с помощью SplitTextIntoWords, затем перебирает каждый слово, проверяя, соответствует ли он маске с помощью StringMatchesMask. Если слово соответствует маске, она добавляет его в список соответствующих слов.

Button1Click Этот обработчик события вызывает процедуру FindMatchingWords с предоставленными параметрами и заполняет список бокса соответствующими словами.

Разделитель строки на слова и функция поиска совпадений с маской в тексте.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 01:06:06/0.0035138130187988/0