Форум: "Начинающим";
Текущий архив: 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