Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.11;
Скачать: CL | DM;

Вниз

SkipKod   Найти похожие ветки 

 
SkipKod   (2005-08-07 14:20) [0]

Доброго времнеи суток, уважаемые мастера.У меня возникла проблема.Мне нужен алгоритм для моей программы.Но я ни где

не могу его найти или же придумать.Помогите!
Вот то что должна делать моя программа.Она должна проверить каждый символ из RichEdit1 с каждым символам в

RichEdit2(можно проверять в memo) и одинаковые симфолы записать в текстовый файл(или переносить в RichEdit3).Причем

символы в RichEdit2 могут нахолиться через 1,2,3,4,5...50 симвалов.
Ну например вот так:
RichEdit1: Папа игорь.
RichEdit2: Ке!п!к!а! у!п!!а!ла !и! !г!о!р!ст!ь! зерна высыпалась на чистый пол.
RichEdit3: Папа игорь.
Помогите пожалуйста этот алгоритм мне очень сильно нужен! Умоляю вас


 
begin...end ©   (2005-08-07 14:54) [1]

Для приведённого примера корректно работает такой код:

var
 S1, S2, S: string;
 L1, L2, I, J: Integer;
begin
 S1 := RichEdit1.Text;
 S2 := RichEdit2.Text;
 S := "";

 L1 := Length(S1);
 L2 := Length(S2);

 I := 1;
 J := 1;

 while (I <= L1) and (J <= L2) do
 begin
   if AnsiUpperCase(S1[I]) = AnsiUpperCase(S2[J]) then
   begin
     S := S + S1[I];
     Inc(I)
   end;
   Inc(J)
 end;

 RichEdit3.Text := S
end.


 
SkipKod   (2005-08-07 14:55) [2]

Спасибо попробую, если что напишу.


 
Senti ©   (2005-08-07 14:56) [3]

Т.е. я понимаю так. Программа берет первый символ в RichEdit1 и сравнивает его с первым вхождением в RichEdit2 (потом запоминает его позицию). Дальше если такой же символ будет в поиске RichEdit1. То поднимает позицию и начинает поиск с той позиции ?

Я прав ?


 
SkipKod   (2005-08-07 16:05) [4]

Спасибо, код работает отлично, но я понял что если найденые символы выводить в отдельное место то это не то что мне нужно.
Скажите подалуйста можно ли найдение символы сделатькрасным цветам, ну или в крайнем случаи выделить их.


 
SkipKod   (2005-08-07 16:10) [5]

>Senti ©   (07.08.05 14:56) [3]
Я не совсем понял что вы написали ну если вы имели в виду что программа долшна найти слово или фразу из RichEdit1 в RichEdit2(буквы из слова или фразы могут быть расположены через 1,2,3...50 друг от друга)


 
begin...end ©   (2005-08-07 17:43) [6]

> SkipKod   (07.08.05 16:05) [4]

> если найденые символы выводить в отдельное место то
> это не то что мне нужно

Поскольку в самом начале Вы написали, что нужно "одинаковые симфолы записать в текстовый файл(или переносить в RichEdit3)", то я и подсказал, как это сделать.

> можно ли найдение символы сделатькрасным цветам

Можно. Посмотрите в справке описание свойства TRichEdit.SelAttributes. Оно позволяет устанавливать особые свойства (шрифт, размер символов, их цвет и т.п.) для выделенного фрагмента текста в RichEdit. Поэтому часто для раскраски нужных участков текста RichEdit"а поступают так: вначале выделяют нужный участок (в Вашем случае выделять нужно будет по одному символу, при каждом обнаружении совпадения) и назначают ему цвет с помощью SelAttributes. Чтобы выделить участок текста, используются свойства SelStart -- номер символа, с которого начинается выделение, и SelLength -- длина выделения (в символах, в Вашем случае длина равна 1). Таким образом, код нужно лишь немного подправить:

var
 S1, S2: string;
 L1, L2, I, J: Integer;
begin
 S1 := RichEdit1.Text;
 S2 := RichEdit2.Text;

 L1 := Length(S1);
 L2 := Length(S2);

 I := 1;
 J := 1;

 while (I <= L1) and (J <= L2) do
 begin
   if AnsiUpperCase(S1[I]) = AnsiUpperCase(S2[J]) then
   begin
     with RichEdit2 do
     begin
       SelStart := J - 1;
       SelLength := 1;
       SelAttributes.Color := clRed
     end;

     Inc(I)
   end;
   Inc(J)
 end;
end.


 
SkipKod   (2005-08-07 19:07) [7]

Спасибо, сейчас проверю!


 
Skipkod   (2005-08-08 14:04) [8]

Cкажите пожалуйста как можно проверать текст из RichEdit1 в RichEdit22 через 2 символа(или желательно проверять какждый символ из RichEdit1 в RichEdit2 через столько символов сколько написанно в edit1


 
Alexander Panov ©   (2005-08-08 14:17) [9]

Приведи пример содержимого обоих Richedid - что должно быть в результате сравнения и как сравнниваться должны.


 
SkipKod   (2005-08-09 12:54) [10]

RichEdit1:Проверка
RichEdit2:ддпддрддоддвддеддрддкдда
RichEdit2(После проверки):ддПддРддОддВддЕддРддКддА


 
SkipKod   (2005-08-09 14:58) [11]

Пожалуйста помогите!!!


 
begin...end ©   (2005-08-09 18:22) [12]

> Skipkod   (08.08.05 14:04) [8]

> желательно проверять какждый символ из RichEdit1 в RichEdit2
> через столько символов сколько написанно в edit1

Бросаем на форму один Edit и два RichEdit"а. Код:

var
 C: Char;
 S1, S2: string;
 L1, L2, N, I, J: Integer;
begin
 if TryStrToInt(Edit1.Text, N) then
 begin
   S1 := RichEdit1.Text;
   S2 := RichEdit2.Text;
   L1 := Length(S1);
   L2 := Length(S2);
   I := 1;
   N := N + 1;
   J := N;
   while (I <= L1) and (J <= L2) do
   begin
     C := AnsiUpperCase(S2[J])[1];
     if C = AnsiUpperCase(S1[I])[1] then
       S2[J] := C;
     Inc(I);
     Inc(J, N)
   end;
   RichEdit2.Text := S2;
 end
end.


Вводим в Edit "2". Тестируем на примере [10]. Работает.



Страницы: 1 вся ветка

Текущий архив: 2005.09.11;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.027 c
3-1122696560
Ярослав
2005-07-30 08:09
2005.09.11
Не запускается FB Server


1-1124792531
TikTanik
2005-08-23 14:22
2005.09.11
Обьединение классов! :)


14-1124437963
ocean
2005-08-19 11:52
2005.09.11
печать фотографий


14-1124218935
Defunct
2005-08-16 23:02
2005.09.11
"www.delphimaster.ru" и "delphimaster.ru"


2-1123623105
MS-REM
2005-08-10 01:31
2005.09.11
Я купил книгу по SQL с ними идут практические файлы могу ли я ...