Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2007, 20:04   #1
Vasya
Форумчанин Подтвердите свой е-майл
 
Аватар для Vasya
 
Регистрация: 21.01.2007
Сообщений: 193
По умолчанию поиск и замена текста в RichEdit

Здравствуйте ув. спецы, помогите пожалуйста решить такую задачку: Створити текстовий редактор, в котрому паралельно з набором тексту, автоматично виконується перевірка тексту на наявність пробілів після знаків пунктуації в внесення відповідних правок.
Vasya вне форума Ответить с цитированием
Старый 01.03.2007, 22:57   #2
wiskas
Пользователь
 
Аватар для wiskas
 
Регистрация: 21.02.2007
Сообщений: 26
По умолчанию

тут тебе никто готовый редактор невикинет напсаный таким путем. могут толька лишь намекнуть, подсказать к и что делать.

могу подсказать немного, ибо преставляю как оно должно выглядить, и думаю это просто будет. Вот чем ты можешь воспользоватся:
  1. редактор запехни в RichEdit1
  2. тебе нада будет воспользоватся onChange
  3. чтоб не перебирать весь масив строк - воспользуйся проверкой символа, перед вводимой кореткой и вставляй туда пробелы, буквы, короче то что тебе нада.
Все это вроде нетрудно, сможешь разобратся.
wiskas вне форума Ответить с цитированием
Старый 09.03.2007, 21:18   #3
Vasya
Форумчанин Подтвердите свой е-майл
 
Аватар для Vasya
 
Регистрация: 21.01.2007
Сообщений: 193
По умолчанию

Вот написал код для поиска : и проверки нахождения пробела перед и после него, если пробел перед ним то удаляем его, если после : отсутствует то вставляем. Вот только что то он не работает ошибка Access Violation. Подскажите пожалуйста где я ошибся? Ниже приведен код:

procedure search (str : array of char);
var
str1: array of string;
i, index: integer;
begin
str1[i]:=Form1.RichEdit1.Text;
for i:= 0 to Form1.RichEdit1.Lines.Count do
begin
index:=pos (str[i], str1[i]);
if index <> 0 then
index:=index+1;
if str1[index] <> ' ' then
insert (' ',str1[index],index)
else
index:=index-1;
if str1[index] = ' ' then
delete (str1[i], index, index);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
str: array of char;
i:integer;
begin
str[i]:=':';
search (str[i]);
end;
Vasya вне форума Ответить с цитированием
Старый 09.03.2007, 22:25   #4
Vasya
Форумчанин Подтвердите свой е-майл
 
Аватар для Vasya
 
Регистрация: 21.01.2007
Сообщений: 193
По умолчанию

Help me!
Vasya вне форума Ответить с цитированием
Старый 10.03.2007, 10:43   #5
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Не паникуй
1) Что-то уж больно сложная процедура поиска
2) Отлаживал код? (F7) Где ошибка именно?

Вот, я тут немного накодил:
Код:
S  - строка которую ищем;
S1 - на что заменяем
procedure search(S,S1:string);
var str:string;
    i,index:integer;
begin
for i:=0 to Form1.RichEdit1.Lines.Count-1 do //Count-1 - обрати внимание!!! 
 begin
 str:=Form1.RichEdit1.Lines.Strings[i];
 while pos(S,str)<>0 do
  begin
  index:=pos(S,str);
  delete(str,index,length(S));
  insert(S1,str,index);
  end;
 Form1.RichEdit1.Lines.Strings[i]:=str;
 end;
end;
Вызываем так: search('!','?');
Все восклицательные знаки заменятся знаками вопроса. (Конечно вместо '!' можно написать 'fg;lkgk')

Последний раз редактировалось zetrix; 10.03.2007 в 11:01.
zetrix вне форума Ответить с цитированием
Старый 10.03.2007, 19:53   #6
Vasya
Форумчанин Подтвердите свой е-майл
 
Аватар для Vasya
 
Регистрация: 21.01.2007
Сообщений: 193
По умолчанию

Спасибо Zetrix
Цитата:
1) Что-то уж больно сложная процедура поиска
Может я не совсем понятно описал суть вопроса, но тут ведь еще нужно анализировать есть ли пробел перед и после знаком препинания, если перед знаком - то пробел удалить, если отсутствует после знака то вставить.
Цитата:
2) Отлаживал код? (F7) Где ошибка именно?
программа на выполнение запускается, а при вызове обработчика нажатия кнопки появляется сообщение о ошибке.
Если можно подскажите пожалуйста как решить эту задачку
Vasya вне форума Ответить с цитированием
Старый 15.03.2007, 00:16   #7
Vasya
Форумчанин Подтвердите свой е-майл
 
Аватар для Vasya
 
Регистрация: 21.01.2007
Сообщений: 193
По умолчанию

Вот дописал код:

procedure search_space (index:integer);
var
str1,str,space: string;
begin
space:=' ';
str1:=Form1.RichEdit1.Lines.Strings[index-1];
if str1 = space then //если пробел перед : то удаляем его
begin
delete(str,index-1,1);
end;
str1:=Form1.RichEdit1.Lines.Strings[index+1];
if str1 <> space then // если пробела после : нет то вставляем
begin
insert (space,str,index+1);
end;
end;

procedure search(S:string);
var str:string;
i,index:integer;
begin
for i:=0 to Form1.RichEdit1.Lines.Count-1 do
begin
str:=Form1.RichEdit1.Lines.Strings[i];
while pos(S,str)<>0 do
begin
index:=pos(S,str);
Search_space (index);
end;
Form1.RichEdit1.Lines.Strings[i]:=str;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
search (':');
end;

Но видно я где то ошибаюсь, программа просто зависает при нажатии кнопки . Подскажите в чем ошибка?

Последний раз редактировалось Vasya; 15.03.2007 в 01:00.
Vasya вне форума Ответить с цитированием
Старый 15.03.2007, 20:33   #8
Vasya
Форумчанин Подтвердите свой е-майл
 
Аватар для Vasya
 
Регистрация: 21.01.2007
Сообщений: 193
По умолчанию

Уже дым с ушей идет,а ниче не выходит, при вызове процедуры просто вешается прога и усе. Помооогитеее!!!
Vasya вне форума Ответить с цитированием
Старый 15.03.2007, 21:19   #9
Malice
Пользователь
 
Регистрация: 28.01.2007
Сообщений: 27
По умолчанию

Цитата:
Сообщение от zetrix Посмотреть сообщение
Вот, я тут немного накодил:
Вызываем так: search('!','?');
Все восклицательные знаки заменятся знаками вопроса. (Конечно вместо '!' можно написать 'fg;lkgk')
Немного не правильный подход, возможна неправильная замена, связанная с многократным поиском в одной и той же строке..
Например, текст был такой:
Цитата:
ппппппопапапапапа

вызвали так:
search('попа','о');
Результат, совсем не тот..

2Vasya: Естественно вешается, ты же делаешь
Код:
 
while pos(S,str)<>0 do begin
index:=pos(S,str);
Search_space (index);
end;
т.е. пока есть символ : пытаться удалить пробелы.. Он же останется на месте, да и search_space результат все равно никуда не сохраняет.
Попробуй просто взять без переделок функцию Search (c) zetrix и вызови ее так:
Код:
 
search (' :',':');
search (':','@f@ ');
search ('  ',' ');
search ('@f@',':');
Выглядит прикольно, но работать будет

Последний раз редактировалось Malice; 15.03.2007 в 21:36.
Malice вне форума Ответить с цитированием
Старый 15.03.2007, 23:34   #10
Vasya
Форумчанин Подтвердите свой е-майл
 
Аватар для Vasya
 
Регистрация: 21.01.2007
Сообщений: 193
По умолчанию

Malice пасибо, как это я сам не додул . Прикольно и просто
а что означают эти символы '@f@ '?
Vasya вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема поиск и замена текста(Delphi) KirkMETAL Помощь студентам 4 26.07.2010 08:41
RichEdit обновление текста N!ckeL Общие вопросы Delphi 11 05.02.2009 20:47
Замена констант в RichEdit. Pashekka Компоненты Delphi 1 24.09.2007 09:42
Поиск и замена текста в файле VAbramyak Общие вопросы Delphi 3 04.04.2007 20:20
замена текста zetrix Microsoft Office Excel 0 31.10.2006 07:54