Показать сообщение отдельно
  #4  
Старый 12.11.2010, 22:50
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

Как вариант:
Код:
Var      
  iWord,CountWord, CountGroup : integer;
...
...
  CountGroup:=0;              
  CountWord := Get_CountWords_In_WideString(Stroka); //кол-во слов(групп) в строке                                                                   
  for iWord:=1 to CountWord do
   begin
     if length(trim(Get_Word_From_WideString(Stroka, iWord)))=5 then begin
        //Длина слова (группы)=5                                                                   
        CountGroup:=CountGroup+1; //увеличиваем счетчик слов (групп)                                                                                          
     end;        
  end;             

  

  
//***********************************
function Get_CountWords_In_WideString(Sx : WideString; UnChar: WideString=' '; YesAllTrim_Before: boolean=true) : integer;
//Определить кол-во слов в строке Sx. UnChar - множество разделителей
var
  InWord : byte;
  i : integer;
begin
  Result:=0;
  if YesAllTrim_Before then Sx:=trim(Sx);
  if length(Sx)>0 then begin
     InWord := 0;
     i:=0;
     while i<length(Sx) do
      begin
       i:=i+1;
       if POS(Sx[i],UnChar)<=0 then begin //этот символ - НЕ разделитель
          if InWord<=0 then Result:=Result+1; //переход на начало слова
          InWord:=1; //Мы внутри слова
       end
       else begin //этот символ - разделитель
          InWord:=0; //Мы снаружи слова
       end;
     end;
  end;
end;
                       
function Get_Word_From_WideString(Sx : WideString; NumWord : integer; UnChar: WideString=' '; YesAllTrim_Before: boolean=true) : WideString;
//Получить слово из строки Sx по номеру NumWord. UnChar - множество разделителей
//YesAllTrim_Before - если TRUE, то перед анализом удалить из строки левые и правые пробелы
Var
  InWord    : byte;
  NumWordCur, i : integer;
begin
  Result:='';
  if YesAllTrim_Before then Sx:=trim(Sx);
  if length(Sx)>0 then begin
     if NumWord>0 then begin
        InWord := 0;
        NumWordCur:=0;
        i:=0;
        while i<length(Sx) do
         begin
          i:=i+1;
          if POS(Sx[i],UnChar)<=0 then begin //этот символ - НЕ разделитель
             if InWord<=0 then NumWordCur:=NumWordCur+1; //мы - на начале слова
             InWord:=1; //Мы внутри слова
             if NumWordCur=NumWord then begin //Это - наше слово
                Result:=Result+Sx[i];   //и мы его выдираем из строки
             end;
          end
          else begin  //этот символ - разделитель
             InWord:=0; //Мы снаружи слова
             if NumWordCur=NumWord then begin //Это было - наше слово
                i:=length(Sx)+1; //поэтому, выходим из цикла и функции
             end;
          end;
        end;
     end;
  end;
end;
Ответить с цитированием