Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2007, 00:53   #1
Melifaro
Новичок
Джуниор
 
Регистрация: 01.11.2007
Сообщений: 2
По умолчанию Вопрос по организации поиска и расстановки меток

Здравствуйте. Суть дела такова. Есть два файла (txt). В одном содержится большой массив текста (книга), в другом база сочетаний, которые необходимо найти и выделить прямо в этом же тексте. Вопрос в следующем: как организовать поиск сочетаний внутри строк первого файла с последующей подстановкой некоей метки (например, символа)? Причем порядок слов в сочетаниях может меняться, то есть сочетания видимо тоже надо разбить по словам.

ЗЫ: Сам программингом занялся впервые буквально на днях, поэтому очень многого не знаю.

Заранее спасибо.

ЗЗЫ: Прошу прощения, если тему кинул не в тот раздел.

Последний раз редактировалось Melifaro; 01.11.2007 в 00:59.
Melifaro вне форума Ответить с цитированием
Старый 01.11.2007, 01:40   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Имеется в наличии функция
Pos(подстрока, строка)
которая возвращает позицию подстроки в анализируемой строке, если она там есть, или ноль.
На основе этой функции вполне спокойно можно решить вашу проблему.
Несколько осложняет изменение порядка слов в субстроке, но и это можно обойти, вы сами верно предложили разбивку.
mihali4 вне форума Ответить с цитированием
Старый 01.11.2007, 08:14   #3
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Здесь даже быстрее posex позволяющая искать вхождение начиная с указанного символа
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 01.11.2007, 09:00   #4
Melifaro
Новичок
Джуниор
 
Регистрация: 01.11.2007
Сообщений: 2
По умолчанию

Спасибо большое за советы. Если возникнут еще вопросы (а я думаю, они возникнут) то обращусь вновь)
Melifaro вне форума Ответить с цитированием
Старый 01.11.2007, 09:53   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот у меня есть примерчик:

В Мемо вводятся фразы, а в РичЕдите текст, в котором эти фразы ищутся по релевантности, и выделаяются. Порядок слов в фразе может быть любой, только слова должны стоять друг за дружкой.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;

type
TForm1 = class(TForm)
Memo1: TMemo;
RichEdit1: TRichEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var ts:TStringList;
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var j,k,e,t,l, lpr:integer; rs,s:string;
begin
for k:=0 to Memo1.Lines.Count-1 do begin
ts.Clear;
ts.DelimitedText:=Memo1.Lines[k];lpr:=0;
//*********************************** *********************************** ****
//********* FOR ******************
for j :=0 to RichEdit1.Lines.Count-1 do
begin
rs:=RichEdit1.Lines[j];
for e:=1 to length(rs)-length(Memo1.Lines[k])+1 do begin
s:=AnsiLowerCase(copy(rs,e,length(M emo1.Lines[k]))); t:=0;
//********* FOR ******************
for l :=0 to ts.Count-1 do
begin
if pos(AnsiLowerCase(ts[l]),s)<>0 then inc(t);
end;
//******* END FOR ****************{}
if t=ts.Count then begin
//********** WITH **********
with richedit1 do
begin
selstart:=e+lpr-1;
sellength:=length(Memo1.Lines[k])+1;
selattributes.color:=clBlue;
end;
end;
//********** END WITH ****** {}
end;
lpr:=lpr+length(RichEdit1.Lines[j])+2;
end;
//******* END FOR ****************{}
//*********************************** *********************************** ****
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ts:=TStringList.Create;
ts.Delimiter:=' ';
end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кто может написать программу для организации? Алина Пася Фриланс 7 24.04.2008 20:15
Нужна помощь с алгоритмом расстановки ударения в предложении. Gauss Общие вопросы Delphi 10 14.04.2008 15:31
Подскажите по организации Help SnakeMan Общие вопросы Delphi 4 26.03.2008 07:22
проверить правильность расстановки операторов begin и end Тёмка Помощь студентам 1 10.12.2007 13:07
косяк при организации итерационных вычислений redfield Microsoft Office Excel 3 04.09.2007 21:35