![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SkipKod [D7, WinXP]
SkipKod © (2005-08-07 14:20:00)Доброго времнеи суток, уважаемые мастера.У меня возникла проблема.Мне нужен алгоритм для моей программы.Но я ни где
не могу его найти или же придумать.Помогите!
Вот то что должна делать моя программа.Она должна проверить каждый символ из RichEdit1 с каждым символам в
RichEdit2(можно проверять в memo) и одинаковые симфолы записать в текстовый файл(или переносить в RichEdit3).Причем
символы в RichEdit2 могут нахолиться через 1,2,3,4,5...50 симвалов.
Ну например вот так:
RichEdit1: Папа игорь.
RichEdit2: Ке!п!к!а! у!п!!а!ла !и! !г!о!р!ст!ь! зерна высыпалась на чистый пол.
RichEdit3: Папа игорь.
Помогите пожалуйста этот алгоритм мне очень сильно нужен! Умоляю вас
begin...end (2005-08-09 18:22:00) [1]> 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]. Работает.
SkipKod (2005-08-09 14:58:00) [2]Пожалуйста помогите!!!
SkipKod (2005-08-09 12:54:00) [3]RichEdit1:Проверка
RichEdit2:ддпддрддоддвддеддрддкдда
RichEdit2(После проверки):ддПддРддОддВддЕддРддКддА
Alexander Panov (2005-08-08 14:17:00) [4]Приведи пример содержимого обоих Richedid - что должно быть в результате сравнения и как сравнниваться должны.
Skipkod (2005-08-08 14:04:00) [5]Cкажите пожалуйста как можно проверать текст из RichEdit1 в RichEdit22 через 2 символа(или желательно проверять какждый символ из RichEdit1 в RichEdit2 через столько символов сколько написанно в edit1
SkipKod (2005-08-07 19:07:00) [6]Спасибо, сейчас проверю!
begin...end (2005-08-07 17:43:00) [7]> 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 16:10:00) [8]>Senti © (07.08.05 14:56) [3]
Я не совсем понял что вы написали ну если вы имели в виду что программа долшна найти слово или фразу из RichEdit1 в RichEdit2(буквы из слова или фразы могут быть расположены через 1,2,3...50 друг от друга)
SkipKod (2005-08-07 16:05:00) [9]Спасибо, код работает отлично, но я понял что если найденые символы выводить в отдельное место то это не то что мне нужно.
Скажите подалуйста можно ли найдение символы сделатькрасным цветам, ну или в крайнем случаи выделить их.
Senti (2005-08-07 14:56:00) [10]Т.е. я понимаю так. Программа берет первый символ в RichEdit1 и сравнивает его с первым вхождением в RichEdit2 (потом запоминает его позицию). Дальше если такой же символ будет в поиске RichEdit1. То поднимает позицию и начинает поиск с той позиции ?
Я прав ?
SkipKod (2005-08-07 14:55:00) [11]Спасибо попробую, если что напишу.
begin...end (2005-08-07 14:54:00) [12]Для приведённого примера корректно работает такой код:
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.