
12.11.2010, 22:50
|
Активный
|
|
Регистрация: 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;
|