Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.04.2012, 18:27
adrian321 adrian321 вне форума
Прохожий
 
Регистрация: 24.04.2012
Сообщения: 6
Репутация: 10
По умолчанию Прошу помощи - работа с текстом

Приветствую вас форумчане!

Имеется программка (скачал исходник) по работе с заменой слов, типа синонимайзер. Наткнулся на следующую проблему, которую прошу помочь решить:

Слова прога берет с отдельного xml файла. Если она слово заменила на нужное, то опять это замененное слово меняет на другое, если оно есть в списке слов. Например - сначала меняет "привет" на "здравствуйте" и затем если слово "здравствуйте" есть в списке синонимов, то меняет его на "привет"
Пример порядка слов:
"привет" "здравствуйте"
"здравствуйте" "привет"
"очень" "сильно" и так далее...

Если программа находит и меняет слова, но те которые она изменила меняются цветом. Так вот помогите сделать так, чтобы те слова, которые другого цвета (измененные уже) она больше не меняла. Заранее благодарю, вот код:

Код:
procedure TForm4.btnOpenClick(Sender: TObject);
begin
 if not OpenDialog.Execute then Exit;
 Editor.Lines.LoadFromFile(OpenDialog.FileName);
end;

procedure TForm4.btnReplaceClick(Sender: TObject);
Var P: Integer;

begin
 tblDictionary.First;
 while not tblDictionary.Eof
 do begin
    Editor.Lines.BeginUpdate;
    P := 1;
    while P <> -1
    do begin
       P := Editor.FindText(tblDictionary.FieldByName('TextToFind').AsString, P, Length(Editor.Text), []);
       if P = -1 then Continue;
       Editor.SelStart := P;
       Editor.SelLength := Length(tblDictionary.FieldByName('TextToFind').AsString);
       Editor.ClearSelection;
       Editor.SelAttributes.Style := [fsBold];
       Editor.SelAttributes.Color := clMaroon;
       Editor.SelText := tblDictionary.FieldByName('ReplaceWith').AsString;
       Inc(P, Editor.SelLength);
       end;
    Editor.Lines.EndUpdate;
    tblDictionary.Next;
    end;
end;

end.
Админ: Пользуемся тегами для оформления кода!

Последний раз редактировалось Admin, 27.04.2012 в 18:46.
Ответить с цитированием
  #2  
Старый 27.04.2012, 21:47
PS11011010 PS11011010 вне форума
Новичок
 
Регистрация: 30.03.2012
Сообщения: 98
Репутация: 282
По умолчанию

Есть такая идея - реализовать распознавание не по тексту,а по положению в тексте. Допустим, нашла твоя процедура слово ПРИВЕТ. Функция pos('привет') выдаст тебе, например, 10. Эту десятку запоминаешь и заменяешь слово, потом ищешь следующее, запоминаешь, и т.д. А вот, когда ты уже будешь заменять слово ЗДРАВСТВУЙТЕ, ты смотришь на позицию слова, и, если его позиция в списке есть, тогда не заменяешь.

P.S. Эта идея мне в час ночи кажется вменяемой, так что не судите строго
Ответить с цитированием
  #3  
Старый 27.04.2012, 21:52
adrian321 adrian321 вне форума
Прохожий
 
Регистрация: 24.04.2012
Сообщения: 6
Репутация: 10
По умолчанию Ответ

Можно и так, но я в программировании слаб, вернее такое сделать точно не смогу, может кто посильнее в этом деле чиркнет пару строк кода, буду очень благодарен, дело вроде не сложное
Ответить с цитированием
  #4  
Старый 27.04.2012, 22:49
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

А не проще разве просто проверить цвет слова прежде чем его заменить?
Вроде так должно быть:
Код:
Editor.SelStart := P;
Editor.SelLength := Length(tblDictionary.FieldByName('TextToFind').AsString);
if (Editor.SelAttributes.Style <> [fsBold]) and (Editor.SelAttributes.Color <> clMaroon) 
then begin
       Editor.ClearSelection;
       Editor.SelAttributes.Style := [fsBold];
       Editor.SelAttributes.Color := clMaroon;
       Editor.SelText := tblDictionary.FieldByName('ReplaceWith').AsString;
       end;
Inc(P, Editor.SelLength);
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 28.04.2012, 07:06
adrian321 adrian321 вне форума
Прохожий
 
Регистрация: 24.04.2012
Сообщения: 6
Репутация: 10
По умолчанию Ответ

Именно это мне и нужно было, огромное вам спасибо! Тему можно закрывать
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:35.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025