![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как найти слово в тексте если текст дан ввиде переменной 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]Для начала нужно дать определение слову.