Главная страница
    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
Изменения в наборе данных


8-70837
Королев
2002-03-15 09:21
2002.07.22
Почему-то Delphi говорит, что не знает комманд WM_CAP_DLG_VIDEOSOURCE или capDlgVideoDisplay(


3-70590
dimanew
2002-06-27 09:24
2002.07.22
Подскажите как в IB создать генератор, котоый при добавлении


1-70791
Cowboy
2002-07-10 09:11
2002.07.22
Drag&Drop и DblClick


3-70665
_dron_
2002-07-02 13:01
2002.07.22
Создать запрос к 2-м базам Interbase и dbase. Они имеют общие пол





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский