Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.22;
Скачать: CL | DM;

Вниз

Как найти слово в тексте если текст дан ввиде переменной string ,   Найти похожие ветки 

 
AlekseyK ©   (2002-07-09 10:44) [0]

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


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

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


 
AFROLOV ©   (2002-07-09 10:53) [2]

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


 
AlekseyK ©   (2002-07-09 10:53) [3]

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


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

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


 
AlekseyK ©   (2002-07-09 11:07) [5]

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


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

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

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


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

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


 
AlekseyK ©   (2002-07-09 11:28) [8]

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


 
AFROLOV ©   (2002-07-09 11:49) [9]


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;


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


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

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

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


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

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


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

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


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

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

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


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

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


 
AlekseyK ©   (2002-07-09 16:10) [15]

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

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;


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

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



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

Текущий архив: 2002.07.22;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
1-70681
AL2002
2002-07-08 19:09
2002.07.22
кАК выбить прогу?


3-70671
Aleksandr
2002-07-02 12:26
2002.07.22
Как можно вылечить такую ошибку:


6-70846
Alibaba
2002-05-13 17:25
2002.07.22
Как послать сообщение на другой комп?


3-70621
cranium
2002-07-01 02:42
2002.07.22
IBDataSet и визуальные компоненты


3-70611
officeman
2002-06-30 17:41
2002.07.22
(bdase) что за логин и пароль ???