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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.011 c
1-1124444243
Веретень
2005-08-19 13:37
2005.09.11
Арифметические операции над числами произвольной длинны


3-1122897119
Spasalar
2005-08-01 15:51
2005.09.11
отчети в Crystal Reports


4-1121883695
Wm.DIGGER
2005-07-20 22:21
2005.09.11
Hook на изменения Clipboard а ... ?


3-1122783260
makzn
2005-07-31 08:14
2005.09.11
DBF -> TextFile


5-1098637694
TGCT
2004-10-24 21:08
2005.09.11
Прозрачность "TGraphicControl" компонента?





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