четверг, 17 октября 2013 г.

Коротко. Ещё раз о разбиении строк на "слова" и альтернативе "алгоритму маляра"

procedure l3ParseWordsEx(const aStr   : Tl3WString;
                         anAction     : Tl3WordAction;
                         const aDelim : TCharSet);
  {* - разбирает строку на слова. }
var
 l_Offset      : Long;
 l_WordFinish  : Long;
begin
 if not l3IsNil(aStr) then
 begin
  l_Offset := 0;
  while (l_Offset < aStr.SLen) do
  begin
   while (l_Offset < aStr.SLen) AND
         (aStr.S[l_Offset] in aDelim) do
     Inc(l_Offset);
   l_WordFinish := l_Offset;
   while (l_WordFinish < aStr.SLen) AND
         not (aStr.S[l_WordFinish] in aDelim) do
     Inc(l_WordFinish);
   // - здесь добавляем слово
   if (l_WordFinish > l_Offset) then
   begin
    if not anAction(l3PCharLen(aStr.S + l_Offset, l_WordFinish - l_Offset, aStr.SCodePage),
                    l_WordFinish = aStr.SLen) then
     break;
    l_Offset := l_WordFinish;
    // - смещаемся на следующее слово
   end;//l_WordFinish > l_Offset
  end;//l_Offset < l_S.SLen
 end;//not l3IsNil(aStr)
end;

Комментариев нет:

Отправить комментарий