Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.04.2012, 20:23
Brons14 Brons14 вне форума
Прохожий
 
Регистрация: 22.04.2012
Сообщения: 40
Репутация: 10
По умолчанию замена символов в memo

Здраствуйте, помогите пожалуйста с задачей
нужно чтобы введенный символ в edit1 в тексте, введенном в memo1, заменялись на символ введенный в edit2, если символа в тексте нет то к тексту добавлялись символы из edit1

Код:
var
S: string;
i: integer;
begin
i:=length(S);
S:=memo1.Text;
if S[i]=edit1.Text then memo1.Text:=edit2.text else memo1.Text:=memo1.Text+edit2.text;
end;
end.

так введенное в edit2 просто добавляется к тексту(
Ответить с цитированием
  #2  
Старый 26.04.2012, 20:30
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

У меня мозги закипели в попытках понять что вы спросили.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 26.04.2012, 20:42
Brons14 Brons14 вне форума
Прохожий
 
Регистрация: 22.04.2012
Сообщения: 40
Репутация: 10
По умолчанию

нужно указать символ в edit1 и если в тексте есть этот символ, то он заменяется на символ указанный в edit2
Ответить с цитированием
  #4  
Старый 26.04.2012, 20:43
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

Так что ли:
Код:
Var
 S: String;
 P: Boolean;
 i, j: Integer;
begin
 P:= True;
 For i:= 0 To Memo1.Lines.Count - 1 Do
  begin
   S:= Memo1.Lines.Strings[i];
   For j:= 1 To Length(S) Do
    if Edit1.Text = S[j] Then
     begin
      S[j]:= Edit2.Text[1];
      P:= False;
     end;
   Memo1.Lines.Strings[i]:= S;
  end;
 if P Then Memo1.Lines.Add(Edit1.Text);
end;
__________________
If end Then begin;
Ответить с цитированием
  #5  
Старый 26.04.2012, 20:48
Brons14 Brons14 вне форума
Прохожий
 
Регистрация: 22.04.2012
Сообщения: 40
Репутация: 10
По умолчанию

да спасибо, только нужно не 1 символ а все введенное
Ответить с цитированием
  #6  
Старый 26.04.2012, 21:22
Brons14 Brons14 вне форума
Прохожий
 
Регистрация: 22.04.2012
Сообщения: 40
Репутация: 10
По умолчанию

так меняются только 1 символ и если в тексте искать больше одного символа то его не находит(
чтобы менялось все нужно j: string или как?

Последний раз редактировалось Brons14, 26.04.2012 в 21:55.
Ответить с цитированием
  #7  
Старый 26.04.2012, 21:54
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

Подправил:
Код:
Var
 S: String;
 P: Boolean;
 i, j, k: Integer;
begin
 P:= True;
 For i:= 0 To Memo1.Lines.Count - 1 Do
  begin
   S:= Memo1.Lines.Strings[i];
   For j:= 1 To Length(S) - Length(Edit1.Text)+1 Do
    if Edit1.Text = Copy(S, j, Length(Edit1.Text)) Then
     begin
      For k:= 1 To Length(Edit1.Text) Do
       S[j+(k-1)]:= Edit2.Text[k];
      P:= False;
     end;
   Memo1.Lines.Strings[i]:= S;
  end;
 if P Then Memo1.Lines.Add(Edit1.Text);
end;
__________________
If end Then begin;
Ответить с цитированием
  #8  
Старый 26.04.2012, 22:01
Brons14 Brons14 вне форума
Прохожий
 
Регистрация: 22.04.2012
Сообщения: 40
Репутация: 10
По умолчанию

по моему ничего не изменилось, но символ заменяется по прежнему только первый
Ответить с цитированием
  #9  
Старый 26.04.2012, 22:08
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

PosEx + StringReplace. Описание - в справке и гугле. Цикл с этими функциями, еще пара строк и 100 грамм логики - и всё готово.

З.Ы. Писать весь код не собираюсь.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #10  
Старый 26.04.2012, 22:29
Brons14 Brons14 вне форума
Прохожий
 
Регистрация: 22.04.2012
Сообщения: 40
Репутация: 10
По умолчанию

непонятно как применить PosEx, StringReplace если текст неопределен
Ответить с цитированием
  #11  
Старый 26.04.2012, 22:46
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Edit1.Text возвращает текст Edit'а как строку.
Memo1.Lines.Text возвращает текст Memo как строку.
Надо найти все вхождения подстроки Edit'а в строке Memo. Если нужно просто заменить - достаточно StringReplace, т.к. он умеет заменять все подстроки. Если произвести ещё какие-то действия - то еще может понадобится PosEx.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 26.04.2012 в 22:49.
Ответить с цитированием
  #12  
Старый 26.04.2012, 23:00
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

У меня все работает, вот исходник добавляю 0000.rar
__________________
If end Then begin;
Ответить с цитированием
  #13  
Старый 26.04.2012, 23:01
Brons14 Brons14 вне форума
Прохожий
 
Регистрация: 22.04.2012
Сообщения: 40
Репутация: 10
По умолчанию

все равно ничего не понял, с StringReplace не получается или может я не так понял, ведь StringReplace заменяет подстроку или символы в тексте уже заданном в коде, а у меня в edit это символы которые ищутся в тексте и текст разный
Ответить с цитированием
  #14  
Старый 26.04.2012, 23:07
Brons14 Brons14 вне форума
Прохожий
 
Регистрация: 22.04.2012
Сообщения: 40
Репутация: 10
По умолчанию

вот почти только теперь если в edit1 2 символа а в edit2 3 символа то поменяются толлько 2 символа, а нужно например '1' заменялся на '***' , или 'ка' на '1'
Ответить с цитированием
  #15  
Старый 26.04.2012, 23:20
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

StringReplace рулит)
Код:
Var
 S: String;
 P: Boolean;
 i: Integer;
begin
 P:= True;
 For i:= 0 To Memo1.Lines.Count - 1 Do
  begin
   S:= StringReplace(Memo1.Lines.Strings[i], Edit1.Text, Edit2.Text, [rfReplaceAll, rfIgnoreCase]);
   if S <> Memo1.Lines.Strings[i] Then P:= False;
   Memo1.Lines.Strings[i]:= S;
  end;
 if P Then Memo1.Lines.Add(Edit1.Text);
end;
__________________
If end Then begin;
Ответить с цитированием
Этот пользователь сказал Спасибо AND_REY за это полезное сообщение:
Brons14 (26.04.2012)
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:43.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025