Форум: "Основная";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];
Внизразбитие текста на слова Найти похожие ветки
← →
Relaxxx (2003-07-20 19:55) [0]У меня тут возникла проблемка, у меня в Мемо написан какой то текс, причем этот текс содержит и запятые и тире и знаки восклицания и вопроса.
Так вот как мне разбить текс на слова. Я делал с помощью CommaText но она разделяет только пробелы и запятые и у меня получается иногда такие слова "привет!", "да?", а мне нужно что б было без каких либо знаков а только слова которые я потом занесу в масив.
← →
Palladin (2003-07-20 20:02) [1]а ты вот типа в своем тексе выделяй слова по признаку принадлежности символа к словяному множеству...
← →
Романов Р.В. (2003-07-20 20:06) [2]Найди и удали знаки препинания из слов
← →
Relaxxx (2003-07-20 20:14) [3]Извините за надоедливость, а как мне удалить например все знаки восклицания с текста, какой функцией???
← →
Романов Р.В. (2003-07-20 20:16) [4]F1 - Pos, Delete, Copy, see also
← →
Spawn (2003-07-20 20:21) [5]StringReplace+F1
← →
Relaxxx (2003-07-20 21:01) [6]Я что то немного непонял, в функции StringReplace, четвертый параметр TReplaceFlags. Что это такое и чему он может равнятся. В справке написано что он может быть либо rfReplaceAll либо rfIgnoreCase. Но у меня компилятор пишет ошибку
Incompatible types: "TReplaceFlags" and "Enumeration"
И еще один маленький вопросик, как узнать номер останнего символа в Мемо?? Это так что б потом не спрашивать
← →
Lexer (2003-07-20 21:08) [7]Убрать все запятые можно и так:
while Pos(",", S) > 0 do
S[Pos(",", S)] := "";
← →
Relaxxx (2003-07-20 21:19) [8]Спасибо Lexer ©, с помощью Pos все работает, теперь осталось узнать ради интереса что там с тем флагом у StringReplace.
И еще как узнать номер последнего символа, или как мне например скопировать область с 30 символа до конца
s:=Copy(Memo1.Text, 30, <а что здесь написать>);
← →
Spawn (2003-07-20 21:20) [9]Relaxxx (20.07.03 21:01)
[rfReplaceAll]
← →
Spawn (2003-07-20 21:23) [10]Индекс последнего символа Memo1.Lines.Count-1
s:=Copy(Memo1.Text, 30, Memo1.Lines.Count-30-1);
← →
panov (2003-07-20 21:24) [11]>Relaxxx (20.07.03 21:01
вот пример разбивки любой строки на слова:
s := "Пример, test1!ASDfkk;sdlkjвап=34-.гы-гы-гы";
s1 := "";
isTrue := False;
for i := 1 to Length(s) do
begin
case s[i] of
"a".."z","A".."Z","?".."?","?".."?":
begin
isTrue := False;
s1 := s1+s[i];
end;
else
begin
if not isTrue then
begin
isTrue := True;
s1 := s1+ #13+#10;
end;
end;
end;
end;
ShowMessage(s1);
← →
Fenik (2003-07-20 21:25) [12]http://delphibase.endimus.com/?action=viewfunc&topic=strchange&id=10352
← →
Spawn (2003-07-20 21:26) [13]Упс ошибся))) Длину строки можно определить, например, Length(Memo1.Text)-1 или High(Memo1.Text)
← →
panov (2003-07-20 21:26) [14]В примере:
case s[i] of
"a".."z","A".."Z","а".."я","А".."Я":
...
← →
Relaxxx (2003-07-20 22:28) [15]Всем спасибо за ответы, разобрался!!!
Остался только последний маленький вопрос, как узнать есть ли указанное слово в Мемо например, я могу конечно разбить Мемо на слова и занести их в массив, а затем сравнить нужное слово со всеми елементами массива.
А может можно как то подругому.
Еще раз всем спасибо за помощ!!!
← →
Palladin (2003-07-20 22:36) [16]В дополнение к г-ну Панову, прибавь еще символ "-" ибо такие слова тоже бывают, только смотри чтобы вокруг него небыло ниодного пробела
Зачем тебе сравнивать слово со всеми элементами массива, может ты просто найти его хочешь?
"Как?" это не вопрос, естественно в цикле, только я бы советовал использовать TStringList, его свойство Sorted и его метод Find, будет на порядок быстрее, даже больше чем на порядок
← →
Романов Р.В. (2003-07-20 22:45) [17]Pos + TMemo.Text
← →
Marser (2003-07-20 22:52) [18]
> Романов Р.В. © (20.07.03 22:45)
> Pos + TMemo.Text
Njulf e; StrPos :-)
← →
Marser (2003-07-20 23:16) [19]
> Marser © (20.07.03 22:52)
>
> > Романов Р.В. © (20.07.03 22:45)
> > Pos + TMemo.Text
>
> Njulf e; StrPos :-)
Был неправ. Все-таки, Pos :-)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c