![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Можно ли после выполнения кода, заключенного в 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; |