Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Разбивка строки


Автор: Serious2008 23.2.2013, 00:51
Здравствуйте, помогите пожалуйста строчками кода, я не придумал как это сделать. Чтобы например если пришла вот такая строка
New message [[shifr]] sends
То чтобы как-нибудь выдирать чисто [[shifr]] и его можно было изменить. Но с учётом того, что таких может быть много слов которые в [[mess]] таких скобках

Код

var innn,dellstart,innn_osnovnoe, dell_end:integer;
var str,edit_string:string;
begin
  while(Pos(edt2.Text, edt1.Text) > 0) do
begin
  dellstart:=pos(edt2.Text, edt1.Text);
  dell_end:=Pos(Edit1.Text, edt1.Text);
  edt3.Text:=IntToStr(dellstart);
  Edit2.Text:=IntToStr(dell_end);
  innn_osnovnoe:= dell_end -  dellstart - length(Edit1.Text);
  innn:= dell_end -  dellstart+length(Edit1.Text);
  edit_string := copy (edt1.Text, dellstart+length(edt2.Text), innn_osnovnoe);
  Edit3.Text:=Edit3.Text+' - '+edit_string;
  str:=edt1.Text;
  Delete(str, dellstart, innn);
  insert(edit_string,str,dellstart);
  edt1.Text:=str; 
end;

Автор: DarkProg 23.2.2013, 10:42
Ставите цикл while, с условие pos('[[', somestr)>0, если так, то ищите позицию ']]' и используйте функцию copy для того чтобы вытащить всё что между скобками.

Автор: Данкинг 23.2.2013, 12:49
Не буду снова писать свою функцию getwordcount, ищи её по форуму.

Автор: Serious2008 23.2.2013, 14:30
У меня получилось но грубо, вот так

Код

var innn,dellstart,innn_osnovnoe, dell_end:integer;
var str,edit_string:string;
begin
  while(Pos(edt2.Text, edt1.Text) > 0) do
begin
  dellstart:=pos(edt2.Text, edt1.Text);
  dell_end:=Pos(Edit1.Text, edt1.Text);
  edt3.Text:=IntToStr(dellstart);
  Edit2.Text:=IntToStr(dell_end);
  innn_osnovnoe:= dell_end -  dellstart - length(Edit1.Text);
  innn:= dell_end -  dellstart+length(Edit1.Text);
  edit_string := copy (edt1.Text, dellstart+length(edt2.Text), innn_osnovnoe);
  Edit3.Text:=Edit3.Text+' - '+edit_string;
  str:=edt1.Text;
  Delete(str, dellstart, innn);
  insert(edit_string,str,dellstart);
  edt1.Text:=str; 
end;

Автор: DarkProg 23.2.2013, 15:29
Цитата(Serious2008 @  23.2.2013,  14:30 Найти цитируемый пост)
У меня получилось но грубо, вот так

Ну судя по вашему стартовому вопросу, мне кажется, главное, что получилось, а то что решение угловатое, ничего, как дорастёте, так и перепишите smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)