Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.07.22;
Скачать: [xml.tar.bz2];

Вниз

Как найти слово в тексте если текст дан ввиде переменной 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.005 c
3-70618
RDA
2002-06-29 15:11
2002.07.22
Изменения в наборе данных


3-70655
TVU
2002-07-01 16:33
2002.07.22
Как прекратить выполнение сохраненой процедуры в MSSQL 7.0


1-70689
c0pYc@t
2002-07-10 09:46
2002.07.22
Проблема с иконкой


1-70751
Loco
2002-07-07 17:40
2002.07.22
Исключения


1-70684
IgaKZ
2002-07-10 19:01
2002.07.22
Проблемы с QReport





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский