![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здраствуйте, помогите пожалуйста с задачей
нужно чтобы введенный символ в 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
|
||||
|
||||
|
У меня мозги закипели в попытках понять что вы спросили.
|
|
#3
|
|||
|
|||
|
нужно указать символ в edit1 и если в тексте есть этот символ, то он заменяется на символ указанный в edit2
|
|
#4
|
||||
|
||||
|
Так что ли:
Код:
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; |
|
#5
|
|||
|
|||
|
да спасибо, только нужно не 1 символ а все введенное
|
|
#6
|
|||
|
|||
|
так меняются только 1 символ и если в тексте искать больше одного символа то его не находит(
чтобы менялось все нужно j: string или как? Последний раз редактировалось Brons14, 26.04.2012 в 21:55. |
|
#7
|
||||
|
||||
|
Подправил:
Код:
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; |
|
#8
|
|||
|
|||
|
по моему ничего не изменилось, но символ заменяется по прежнему только первый
|
|
#9
|
||||
|
||||
|
PosEx + StringReplace. Описание - в справке и гугле. Цикл с этими функциями, еще пара строк и 100 грамм логики - и всё готово.
![]() З.Ы. Писать весь код не собираюсь. |
|
#10
|
|||
|
|||
|
непонятно как применить PosEx, StringReplace если текст неопределен
|
|
#11
|
||||
|
||||
|
Edit1.Text возвращает текст Edit'а как строку.
Memo1.Lines.Text возвращает текст Memo как строку. Надо найти все вхождения подстроки Edit'а в строке Memo. Если нужно просто заменить - достаточно StringReplace, т.к. он умеет заменять все подстроки. Если произвести ещё какие-то действия - то еще может понадобится PosEx. Последний раз редактировалось Bargest, 26.04.2012 в 22:49. |
|
#13
|
|||
|
|||
|
все равно ничего не понял, с StringReplace не получается или может я не так понял, ведь StringReplace заменяет подстроку или символы в тексте уже заданном в коде, а у меня в edit это символы которые ищутся в тексте и текст разный
|
|
#14
|
|||
|
|||
|
вот почти только теперь если в edit1 2 символа а в edit2 3 символа то поменяются толлько 2 символа, а нужно например '1' заменялся на '***' , или 'ка' на '1'
|
|
#15
|
||||
|
||||
|
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; |
| Этот пользователь сказал Спасибо AND_REY за это полезное сообщение: | ||
Brons14 (26.04.2012)
| ||