|  | 
 
 | 
| 
 | |||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
|  | 
|  | Опции темы | Поиск в этой теме | Опции просмотра | 
| 
			 
			#1  
			
			
			
			
		 | |||
| 
 | |||
|  Продолжить цикл после except Можно ли после выполнения кода, заключенного в except ... end вернуться в тело цикла? С помощью goto не получилось | 
| 
			 
			#2  
			
			
			
			
		 | |||
| 
 | |||
|   Может так: Код: for i:=//-------- begin try /----- except //---- continue; end; end; | 
| 
			 
			#3  
			
			
			
			
		 | ||||
| 
 | ||||
|   Код: for i:=0 to 7 do try // to do except // oops end; | 
| 
			 
			#4  
			
			
			
			
		 | |||
| 
 | |||
|   ни так ни так не работает | 
| 
			 
			#5  
			
			
			
			
		 | |||
| 
 | |||
|   Цитата: 
 | 
| 
			 
			#6  
			
			
			
			
		 | |||
| 
 | |||
|   Код: procedure thread1.execute;
var
i:integer;
username,pass:string;
begin
form1.IdSMTP1.Host:='smtp.mail.ru';
for i:=0 to form1.Memo1.Lines.Count-1 do
  try
  username:=copy(form1.Memo1.Lines[i],1,pos(';',form1.Memo1.Lines[i])-1);
  pass:=copy(form1.Memo1.lines[i],pos(';',form1.Memo1.Lines[i])+1,length(form1.Memo1.Lines[i])-pos(';',form1.Memo1.Lines[i])+1);
  form1.IdSMTP1.Username:=username;
  form1.IdSMTP1.Password:=pass;
  form1.IdSMTP1.Connect();
  if form1.IdSMTP1.Authenticate then
    begin
    form1.Memo2.Lines.Add(username+';'+pass);
    form1.IdSMTP1.Disconnect;
    end;
except
on E:EIdProtocolReplyError do
    begin
    form1.Memo3.Lines.Add(username+';'+pass);
    end;
end;
end;Проверяет до первого невалидного аккаунта, дальше встает | 
| 
			 
			#7  
			
			
			
			
		 | ||||
| 
 | ||||
|   PHP код: 
		 | 
| 
			 
			#8  
			
			
			
			
		 | |||
| 
 | |||
|   Что это еще за oops? | 
| 
			 
			#9  
			
			
			
			
		 | |||
| 
 | |||
|   Как пример: Все прекрасно отрабатывает. (тут заведомо ошибка деление на 0 ) Код: procedure TForm1.Button1Click(Sender: TObject);
var i,l:integer;
      k:real;
begin
  for i:=0 to 100 do
  begin
    l:=0;
    try
      k:=i/l;
    except
    on e:exception do
      memo1.Lines.Add(inttostr(i)+' - '+e.Message);
    end;
    label1.Caption:=floattostr(k);
  end;
end; | 
| 
			 
			#10  
			
			
			
			
		 | |||
| 
 | |||
|   Это совсем не то | 
| 
			 
			#11  
			
			
			
			
		 | |||
| 
 | |||
|   почему же? | 
| 
			 
			#12  
			
			
			
			
		 | |||
| 
 | |||
|   потому что у тебя в каждой шаге ошибка, а у меня ее может и не быть. Если переделать мою программу по твоему примеру, то после первого нерабочего аккаунта все рабочие будут записываться как нерабочие | 
| 
			 
			#13  
			
			
			
			
		 | |||
| 
 | |||
|   Причем тут в каждом шаге или нет? даже если не в каждом будет код будет работать. Вообщем варианта 2 еще. ХЗ поможет или нет но заключи тело цикла в begin end/ второй попробуй использовать E:Exception | 
| 
			 
			#14  
			
			
			
			
		 | |||
| 
 | |||
|   собственно, проблема в том, что ты отлавливаешь только сообщения об ошибках протокола. при этом, если просто сервер не существует, то ты получаешь другой класс исключения, который не обрабатывается. Надо: Код: For I := 0 To AList.Count-1 Do
  Try
     CheckAccount(AList[i]);
     Memo1.Lines.Add(AList[i]);
  Except
     Memo2.Lines.Add(AList[i]);
  End;Код приблизительный. CheckAccount - процедура, которая пытается проверить учетную запись. AList - некоторый список с учетками. Memo1 - список "хороших" учеток, Memo2 - список "плохих" учеток. | 
| 
			 
			#15  
			
			
			
			
		 | |||
| 
 | |||
|   Black Raider, ну вот попробуй сделай с моим кодом, чтобы работало. lmikle, сделал как у тебя, создал процедуру. Появилась еще одна проблема - счетчик сбивается(i не увеличивается). Вот код, переменные все глобальные Код: procedure tform1.check(akk:string);
begin
form1.IdSMTP1.Username:=username;
form1.IdSMTP1.Password:=pass;
form1.IdSMTP1.Connect();
form1.IdSMTP1.Authenticate;
end;
procedure thread1.execute;
begin
username:=copy(form1.Memo1.Lines[i],1,pos(';',form1.Memo1.Lines[i])-1);
pass:=copy(form1.Memo1.Lines[i],pos(';',form1.Memo1.Lines[i])+1,length(form1.Memo1.Lines[i])-length(username)-1);
form1.IdSMTP1.Host:='smtp.mail.ru';
for i:=0 to form1.Memo1.Lines.Count-1 do
  try
    form1.check(form1.Memo1.Lines[i]);
    form1.Memo2.Lines.Add(username+';'+pass);
    form1.IdSMTP1.Disconnect;
    except
  form1.Memo3.Lines.Add(username+';'+pass);
  end;
end; |