Форум: "Начинающим";
Текущий архив: 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