Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.04.06;
Скачать: [xml.tar.bz2];

Вниз

Функция разделения текста на слова   Найти похожие ветки 

 
webSQLNeederr   (2008-03-08 11:36) [0]

Просто pos-ом пользоваться не получается так как если есть два пробела подряд то будет считаться, что это два слова.


 
Anatoly   (2008-03-08 11:52) [1]

Trim, Pos, Copy, Delete


 
webSQLNeederr   (2008-03-08 12:42) [2]

А готовой функции нет ни у кого? был бы очень признателен.


 
Loginov Dmitry ©   (2008-03-08 12:52) [3]

> А готовой функции нет ни у кого?


Достаточно StringReplace() + TStringList


 
webSQLNeederr   (2008-03-08 13:05) [4]

Не совсем понял идеи. StringReplace() может заменить пробелы на что то, а как слова сформировать?


 
Семеныч   (2008-03-08 13:06) [5]

> webSQLNeederr   (08.03.08 11:36)

1. Задаем набор (set of char) символов, которые считаются разделителями слов (пробел, знаки препинания, все символы с кодом менее 32 и еще все, что нужно).

2. Обнуляем переменную - счетчик слов.

3. Представляем текст одной строкой.

4. Идем в цикле по символам этой строки. Если встретился символ-разделитель, то ничего не делаем. Если встретился другой символ, то увеличиваем счетчик слов на 1 и пропускаем все следующие за ним символы, которые тоже не являются разделителями.

5. После окончания цикла счетчик слов содержит нужное значение.

6. Неужели все это настолько сложно, что нельзя придумать самому?


 
Leonid Troyanovsky ©   (2008-03-08 14:27) [6]


> webSQLNeederr   (08.03.08 12:42) [2]

> А готовой функции нет ни у кого?

ExtractStrings Routine

--
Regards, LVT.


 
mv   (2008-03-08 16:12) [7]

StringTokenizer - пиши на Jave! =)


 
Прохожий 001   (2008-03-11 08:12) [8]

function Parse(Char, S: string; Count: Integer): string;
var
  I: Integer;
  T: string;
begin
  if (S="") then begin
    Result := ""; exit;
  end;
  if S[Length(S)] <> Char then
    S := S + Char;
  for I := 1 to Count do
  begin
    T := Copy(S, 0, Pos(Char, S) - 1);
    S := Copy(S, Pos(Char, S) + 1, Length(S));
  end;
  Result := T;
end;


 
Семеныч   (2008-03-11 17:50) [9]

> Прохожий 001   (11.03.08 08:12) [8]

Сколько слов содержит вот этот текст ( с учетом того , что перед и после каждой скобки и запятой стоят пробелы , а в конце стоит знак вопроса ) ?


 
Reindeer Moss Eater ©   (2008-03-11 17:55) [10]

TRegExpr + метод Split


 
{RASkov} ©   (2008-03-11 18:01) [11]

В RxStrUtils.pas есть такие вещи как:

function WordCount(const S: string; const WordDelims: TCharSet): Integer;
{ WordCount given a set of word delimiters, returns number of words in S. }

function WordPosition(const N: Integer; const S: string; const WordDelims: TCharSet): Integer;
{ Given a set of word delimiters, returns start position of N"th word in S. }

function ExtractWord(N: Integer; const S: string;
 const WordDelims: TCharSet): string;
function ExtractWordPos(N: Integer; const S: string;
 const WordDelims: TCharSet; var Pos: Integer): string;
function ExtractDelimited(N: Integer; const S: string;
 const Delims: TCharSet): string;
{ ExtractWord, ExtractWordPos and ExtractDelimited given a set of word
 delimiters, return the N"th word in S. }


Ну и много другого имеется....


 
VirEx ©   (2008-03-11 18:06) [12]

Я давно такими функциями пользуюсь:

function GetToken(aString, SepChar: string; TokenNum: integer): string;
{
параметры: aString : полная строка

SepChar : строка служащая разделителем между словами (подстроками)
TokenNum: номер требуемого слова (подстроки))
result    : искомое слово или пустая строка, если количество слов меньше значения "TokenNum"
}
var

 Token: string;
 StrLen: integer;
 TNum: integer;
 TEnd: integer;

begin

 StrLen := Length(aString);
 TNum := 1;
 TEnd := StrLen;
 while ((TNum <= TokenNum) and (TEnd <> 0)) do
 begin
   TEnd := Pos(SepChar, aString);
   if TEnd <> 0 then
   begin
     if TokenNum > 1 then begin
       Token := Copy(aString, Length(SepChar), TEnd - 1);
       Delete(aString, 1, Length(SepChar) + TEnd - 1);
       Inc(TNum);
     end else begin
       Token := Copy(aString, 1, TEnd - 1);
       Delete(aString, 1, TEnd);
       Inc(TNum);
     end;
   end
   else
   begin
     Token := aString;
   end;
 end;
 if TNum >= TokenNum then
 begin
   result := Token;
 end
 else
 begin
   result := "";
 end;
end;

function NumToken(aString, SepChar: string): integer;
{
parameters: aString : полная строка

SepChar : единственный символ, служащий
разделителем между словами (подстроками)
result    : количество найденных слов (подстрок)
}

var

 RChar: Char;
 StrLen: integer;
 TNum: integer;
 TEnd: integer;

begin

 if SepChar = "#" then
 begin
   RChar := "*"
 end
 else
 begin
   RChar := "#"
 end;
 StrLen := Length(aString);
 TNum := 0;
 TEnd := StrLen;
 while TEnd <> 0 do
 begin
   Inc(TNum);
   TEnd := Pos(SepChar, aString);
   if TEnd <> 0 then
   begin
     aString[TEnd] := RChar;
   end;
 end;
 Result := TNum;
end;


 
Reindeer Moss Eater ©   (2008-03-11 18:19) [13]

какой ужас.....


 
Семеныч   (2008-03-11 18:30) [14]

> VirEx ©   (11.03.08 18:06) [12]

> Я давно такими функциями пользуюсь

А напрасно...


 
MetalFan ©   (2008-03-11 19:59) [15]


>  TNum: integer;
>  TEnd: integer;

это названия локальных переменных?! о мой мозг...


 
MacroDenS ©   (2008-03-11 22:55) [16]

мда....
а когда-то подобные задачки давали на уроках по программированию....
уж не подсчет количества слов Вам нужен?


 
VirEx ©   (2008-03-12 18:51) [17]

А что, нормальный рабочий копипаст



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.04.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.009 c
2-1204839509
vowa-antilamer
2008-03-07 00:38
2008.04.06
Передача параметра в поток


15-1203498690
Романыч
2008-02-20 12:11
2008.04.06
Флэшки не открываются


3-1194986508
lp
2007-11-13 23:41
2008.04.06
Подскажите, с чем может быть связан значительный рост файла БД


15-1203701871
NaRuTo
2008-02-22 20:37
2008.04.06
POGi - Media Player! Доделка!


15-1203690030
NaRuTo
2008-02-22 17:20
2008.04.06
Запись дисков!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский