Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как найти слово в тексте если текст дан ввиде переменной string , [D6, NT4, Win2k]


AlekseyK ©   (2002-07-09 10:44:00) 

и вытащить другое слово которое стоит например перед найденным словом. Спасибо.


Гас   (2002-07-09 16:18:00) [1]

В RxLib ведь это все давно реализовано..


AlekseyK   (2002-07-09 16:10:00) [2]

Все работает всем спасибо

procedure TForm1.Button5Click(Sender: TObject);
var
a,i,p1,p2:integer;
S,s1:String;
begin
S:="Sreda programirovaniya Borland Delphi";
p1:=pos("Borland",S);
if p1>0 then
BEGIN
p2:=p1;
for i:=p1-2 downto 1 do
begin
//IsSeparator - функция которая определяет является ли символ разделителем
if not IsSeparator(S[i]) then begin continue; end;
if IsSeparator(S[i]) then
begin
p1:=i;
break;
end;
end;
s1:=copy(s,p1,p2-p1-1);
end;
label3.Caption:=s1;
end;


xyz   (2002-07-09 14:45:00) [3]

Лучше всего, как мне кажется, написать модуль для работы со словами.
1. Измерение кол-ва слов в строке(кол-во пробелов+1).
2. Сделать функцию поиска слова и указания номера.
3. Возвращения слова по номеру.
4. И так далее..


Виктор Щербаков   (2002-07-09 12:21:00) [4]

Объяви функцию для твоего множества символов-разделителей:

function IsSeparator(Ch: Char): boolean;
begin
Result := Ch in [" ", #9] // могут быть и другие ,.- и т.д.
end;


Anatoly Podgoretsky   (2002-07-09 12:20:00) [5]

А ты его определил?


AlekseyK   (2002-07-09 12:09:00) [6]

У меня почемуто Undeclared identifier: "IsSeparator"


Леха_   (2002-07-09 11:53:00) [7]

QStrings решает эту и много других задачь

хотя искрине советую перед тем как использовать QStrings решить эту задачу самому


AFROLOV   (2002-07-09 11:49:00) [8]


var
i,p1,p2:integer;
S,s1:Srting;
flag:boolean;
S:="Borland Delphi";
p1:=pos("Delphi",S);
if p1>0 then
BEGIN
p2:=p1;
flag:=false;
for i=p1 downto 1 do
begin
//IsSeparator - функция которая определяет является ли символ разделителем слов
if not flag then
begin
if not IsSeparator(S[i]) then flag:=true;
continue;
end;

if IsSeparator(S[i]) and flag then
begin
break;
end else
begin
p2:=p2-1;
end;

end;
s1:=copy(S,p2,p2-p1);
end;


Примерно это выглядит так. Протестируй и доработай.


AlekseyK   (2002-07-09 11:28:00) [9]

Теоретически понятно но практически... :))
Был бы благодарен если бы представили код


Yuri-7   (2002-07-09 11:23:00) [10]

Функцией Pos найди нужное слово, а затем посимвольно иди назад, анализируя пробелы


Виктор Щербаков   (2002-07-09 11:20:00) [11]

Отлично. Если ты определил множество символов-разделителей, то осталось реализовать считывание слов из строки. Т.е. непустая последовательность символов исходной строки, ограниченная спереди и сзади символами-разделителями и не содержащая символов-разделителей внутри и будет словом.
Нужно помнить предыдущее считанное слово. Только что считанное слово нужно сравнивать с искомым словом, и если они совпадут, выдавать запомненное предыдущее.

Надеюсь код не надо писать?


AlekseyK   (2002-07-09 11:07:00) [12]

Пробелами и наверное знаками табуляции


Виктор Щербаков   (2002-07-09 10:58:00) [13]

Хорошо. Подойдем с другой стороны.
Чем могут быть разделены слова?


AFROLOV   (2002-07-09 10:53:00) [14]

Посмотри функцию Pos.


AlekseyK   (2002-07-09 10:53:00) [15]

Я знаю что в тексте есть дапустим слово Delphi, мне нужен кусочек кода который бы выдавал бы мне слово стоящее перед словом Delphi


Виктор Щербаков   (2002-07-09 10:47:00) [16]

Для начала нужно дать определение слову.


Наверх

Титульная страница Поиск, карта сайта Написать письмо