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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2010, 00:43   #1
fezilk24
Заблокирован
 
Регистрация: 16.11.2009
Сообщений: 85
По умолчанию Зависает цикл while

Код:
while Pos('#',name)<>0 do
      begin
      namel:=getinfo('#',';',0,0,0);
      delete(name,pos(namel,name),length(namel));
      end;
Код:
function TForm1.getinfo(bpos,endpos:string;p1,p2,p3,p4:integer):string;
var
bposit,endposit:integer;
begin
bposit := Pos(bpos, form1.memo2.text);
endposit := PosEx(endpos, form1.memo2.text, bposit+p2);
result := Copy(form1.memo2.text, bposit+p3, endposit - (bposit+p4));
end;
name - Вася #9143;#9142; Vasya #9142;#9143; Пупкин

цикл должен удалить все коды #9142;#9143;. но он зависает. почему?
fezilk24 вне форума Ответить с цитированием
Старый 11.06.2010, 00:53   #2
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Как раз такипохоже что ваш код имена и удаляет, а вот это #9143;#9142; как раз и остаётся
vovk вне форума Ответить с цитированием
Старый 11.06.2010, 00:56   #3
T_I_T_A_N
Пользователь
 
Регистрация: 01.06.2010
Сообщений: 23
По умолчанию

попробуй так
Код:
i:=pos('#',name);
while i<>0 do
begin
delete(name,1,i);
i:=pos(';',name);
delete(name,1,i);
i:=pos('#',name);
end;
T_I_T_A_N вне форума Ответить с цитированием
Старый 11.06.2010, 00:59   #4
fezilk24
Заблокирован
 
Регистрация: 16.11.2009
Сообщений: 85
По умолчанию

спасибо, сейчас попробую
fezilk24 вне форума Ответить с цитированием
Старый 11.06.2010, 01:02   #5
Don Karleone
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 410
По умолчанию

или может так

Код:
var
  st: string;
  k,z,h: integer;
begin
  k:=Pos('#',st);
  while k <> 0 do
    begin
      z:=Pos(';',st);
      h:=z-k+1;
      Delete(st,k,h);
      k:=Pos('#',st);
    end;
end;
ICQ: 593-013-807
Don Karleone вне форума Ответить с цитированием
Старый 11.06.2010, 01:04   #6
Don Karleone
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 410
По умолчанию

Цитата:
Сообщение от T_I_T_A_N Посмотреть сообщение
попробуй так
Код:
i:=pos('#',name);
while i<>0 do
begin
delete(name,1,i);
i:=pos(';',name);
delete(name,1,i);
i:=pos('#',name);
end;
работать не будет
ICQ: 593-013-807
Don Karleone вне форума Ответить с цитированием
Старый 11.06.2010, 01:08   #7
T_I_T_A_N
Пользователь
 
Регистрация: 01.06.2010
Сообщений: 23
По умолчанию

Код:
var i,t: integer;  name: string;
begin
name:=edit1.text;
i:=pos('#',name);
while i<>0 do
begin
t:=pos(';',name);
if t>i then delete(name,i,(t-i)+1);
i:=pos('#',name);
end;
ShowMessage(name);
end;
этот код работает проверил
T_I_T_A_N вне форума Ответить с цитированием
Старый 11.06.2010, 01:12   #8
T_I_T_A_N
Пользователь
 
Регистрация: 01.06.2010
Сообщений: 23
По умолчанию

Код:
name:=edit1.text;
i:=pos('#',name);
t:=pos(';',name);
while (i<>0) and (t>i) do
begin
delete(name,i,(t-i)+1);
i:=pos('#',name);
t:=pos(';',name);
end;
вот еще рабочий цикл

Последний раз редактировалось T_I_T_A_N; 11.06.2010 в 01:21.
T_I_T_A_N вне форума Ответить с цитированием
Старый 11.06.2010, 01:12   #9
T_I_T_A_N
Пользователь
 
Регистрация: 01.06.2010
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Don Karleone Посмотреть сообщение
работать не будет
а если текст вот такой будет 'ввы; fdfd#444;ddd' то зависнет
T_I_T_A_N вне форума Ответить с цитированием
Старый 11.06.2010, 01:29   #10
Don Karleone
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 410
По умолчанию

Цитата:
Сообщение от T_I_T_A_N Посмотреть сообщение
а если текст вот такой будет 'ввы; fdfd#444;ddd' то зависнет
мой цикл будет правильно работать только в том случае если во входной строке (st) для каждого символа # существует ; причем ; стоит правее #. Если же входная строка может не соответствовать этому, например
" Вася #1945; #4568 Коля " то и обработку этой строки необходимо проводить совсем по другому.
ICQ: 593-013-807
Don Karleone вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
зависает компьютер руст Свободное общение 41 10.06.2010 07:46
Функция зависает lobz1k Общие вопросы C/C++ 1 18.05.2010 05:05
Цикл по времени - Как сделать так чтобы цикл выполнялся к примеру 10 секунд ? Anarki Общие вопросы C/C++ 3 13.11.2009 19:23
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34