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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2012, 08:10   #1
DimoK123
Пользователь
 
Регистрация: 31.10.2012
Сообщений: 28
По умолчанию Edit=RichEdit

Всем привет. Возникла такая задача.
Есть текст в RichEdit'e, например:
Цитата:
Создай свой сайт бесплатно! Быстрое создание сайта за 5 минут.
Справится даже ребёнок. Бесплатно.
Задача в том, что б из Edit автоматически заменялось определённая слово.

Например, надо заменить 3е слово во второй строке. Прописываем в Edit слово "взрослый" и в RichEdit обновлялся текст, получается:

Цитата:
Создай свой сайт бесплатно! Быстрое создание сайта за 5 минут.
Справится даже взрослый. Бесплатно.
Искать слово не надо, тоесть просто заменить определённое слово в определённой строке. Как заменить строку - знаю, а вот как заменить еще и слово - озадачен.
Заранее всем спасибо.
DimoK123 вне форума Ответить с цитированием
Старый 04.11.2012, 08:24   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Искать слово не надо, тоесть просто заменить определённое слово в определённой строке
Как раз наоборот - искать слово НАДО! Именно третье. А то откуда Вы узнаете, что менять?

Код примерно такой:

Код:
p:=0;
p_beg:=0;
p_end;
i:=0;
while (i<>length(s)) or (p<>4) do begin
  inc(i);
  if (s[i]=' ') and (i>1) then inc(p);
  if p=3 then p_beg:=p+1;
end;
if p=3 then p_end:=length(s) else p_end:=i;
delete(s,p_beg,p-p_beg);
insert(slovo,s,p_beg);
s -строка, подставите вместо нее поле из Edit.
p - счетчик пробелов
p_beg - позиция третьего пробела
p_end - позиция четвертого пробела=конец слова -> p_end-p_beg=длина слова

1. Писал по памяти, поэтому возможны ошибки, отладите.
2. В качестве разделителей учитываются только пробелы, для других знаков нужно делать проверку (множество ввести)
3. Не учитывается вариант, когда в строке меньше 3 слов.

Думаю, идея понятна, доделаете сами.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 04.11.2012 в 08:26.
Sciv вне форума Ответить с цитированием
Старый 04.11.2012, 08:28   #3
DimoK123
Пользователь
 
Регистрация: 31.10.2012
Сообщений: 28
По умолчанию

Блин, я даже по теории еще не дошёл до этого) Не осилю данный код.

Можно как-то попроще? Типа такого кода

Цитата:
with TStringList.Create do begin
DelimitedText:=RichEdit.Lines[номер строки]
Label.Caption:=Strings[Номер слова];
free;
end;
Цитата:
А то откуда Вы узнаете, что менять?
Есть уже готовый текст, просто заменять одно слово надо и всё(которое известно где находится).

Последний раз редактировалось DimoK123; 04.11.2012 в 08:40.
DimoK123 вне форума Ответить с цитированием
Старый 04.11.2012, 11:43   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
RichEdit.Lines.Text:=StringReplace(RichEdit.Lines.Text,'ребёнок',Edit1.Text,[rfReplaceAll]);
Подойдет?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.11.2012, 12:29   #5
DimoK123
Пользователь
 
Регистрация: 31.10.2012
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
RichEdit.Lines.Text:=StringReplace(RichEdit.Lines.Text,'ребёнок',Edit1.Text,[rfReplaceAll]);
Подойдет?
Уже нагуглил. Спасибо большое)
Но вопрос остался. Теперь осталось из Edit+UpDown заменять.

Тоесть, есть текст
Цитата:
у нас было 2 пакетика травы, пять ампул мескалина, пять пакетиков диетиламид лизергиновой кислоты или лсд
Надо заменить цифру 2 на ту, которая в Edit'e.
Гугл не помог, или же не в ту сторону копал. Буду благодарен за ответ.

Последний раз редактировалось DimoK123; 04.11.2012 в 13:00.
DimoK123 вне форума Ответить с цитированием
Старый 04.11.2012, 13:23   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Гугл не помог
Цитата:
Уже нагуглил. Спасибо большое)
Определись, однако.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.11.2012, 13:48   #7
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Цитата:
которое известно где находится
Если известны номер строки и номер слова, то примерно так:
Код:
//Узнать слово по его номеру
function word_by_number(Str: string; Number_word: Byte): string;
//Str  - где искать
//Number_word - номер слова
var
  SWord: string;
  StrLen, N: Byte;
begin
  StrLen := SizeOf(Str);
  N := 1;
  while ((Number_word >= N) and (StrLen <> 0)) do
  begin
    StrLen := Pos(' ', str);
    if StrLen <> 0 then
    begin
      SWord := Copy(Str, 1, StrLen - 1);
      Delete(Str, 1, StrLen);
      Inc(N);
    end
    else
      SWord := Str;
  end;
  if Number_word <= N then
    Result := Trim(SWord)
  else
    Result := '';
end;

procedure TForm1.RzBitBtn2Click(Sender: TObject);
var s: string;
begin
  //Обрезать пробелы вначале и конце
  s := Trim(RichEdit1.Lines[0]);

  //Убрать все двойные пробелы, если такие есть
  while Pos('  ', s) > 0 do
    s := StringReplace(s, '  ', ' ', [rfReplaceAll]);

  //Узнать слово, которое подлежит замене
  s := word_by_number(s, 4);
  if (s <> '') and (Edit1.Text<>'') then
    RichEdit1.Lines.Strings[0] := StringReplace(RichEdit1.Lines.Strings[0],
      s, Edit1.Text, [rfReplaceAll, rfIgnoreCase]);
end;
ps. Кроме пробелов разделителями слов могут быть точка, запятая, дефис и т.п. Наверно, это тоже нужно анализировать.
_SERGEYX_ вне форума Ответить с цитированием
Старый 04.11.2012, 14:16   #8
DimoK123
Пользователь
 
Регистрация: 31.10.2012
Сообщений: 28
По умолчанию

Цитата:
Определись, однако.
По первому пункту всё нашёл. Я имел ввиду второй пункт задачи.

Цитата:
ps. Кроме пробелов разделителями слов могут быть точка, запятая, дефис и т.п. Наверно, это тоже нужно анализировать.
Понял. Спасибо большое.
DimoK123 вне форума Ответить с цитированием
Старый 04.11.2012, 14:39   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Я имел ввиду второй пункт задачи.
Я чего-то не понимаю: Где второй пункт задачи?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.11.2012, 20:49   #10
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Я чего-то не понимаю
Присоединяюсь.

1. Что значит: "мы еще не проходили", если Вы работает с Дельфи, а я Вам галимый паскаль дал?
2. То Вам надо менять третье слово в строчке, то уже конкретное слово... А если Вам преподаватель даст в РичЭдит такую строку, где этого слова не будет - что тогда? Ответ очевиден, начинается на букву Ж и не требует озвучки.
3. И что-за второй пункт?
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Edit и кол-во символов в richedit Molodoy hacker Общие вопросы Delphi 2 28.03.2011 09:15
Перенос текста с Edit и DBEdit на RichEdit sislexa Компоненты Delphi 4 27.10.2010 18:19
копирование текста из Edit в RichEdit Rebel123 Общие вопросы Delphi 16 21.09.2009 15:49
Из Edit в RichEdit. SanekIrk Компоненты Delphi 4 05.05.2009 18:05
Edit,RichEdit + mask Iogan Gamba Puti Win Api 1 10.05.2008 14:45