Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Синтаксис
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Закрытая тема
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.07.2010, 02:27
Hack_ERR++ Hack_ERR++ вне форума
Прохожий
 
Регистрация: 20.06.2010
Сообщения: 17
Репутация: 10
По умолчанию Продолжить цикл после except

Можно ли после выполнения кода, заключенного в except ... end вернуться в тело цикла? С помощью goto не получилось
  #2  
Старый 06.07.2010, 08:46
Khanzo Khanzo вне форума
Прохожий
 
Регистрация: 02.07.2010
Сообщения: 3
Репутация: 10
По умолчанию

Может так:
Код:
for i:=//--------
begin
try
/-----
except
//----
continue;
end;
end;
  #3  
Старый 06.07.2010, 10:40
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
for i:=0 to 7 do
try
// to do
except
// oops
end;
  #4  
Старый 06.07.2010, 14:27
Hack_ERR++ Hack_ERR++ вне форума
Прохожий
 
Регистрация: 20.06.2010
Сообщения: 17
Репутация: 10
По умолчанию

ни так ни так не работает
  #5  
Старый 06.07.2010, 14:45
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

Цитата:
Сообщение от Hack_ERR++
ни так ни так не работает
Код в студию.
  #6  
Старый 06.07.2010, 15:13
Hack_ERR++ Hack_ERR++ вне форума
Прохожий
 
Регистрация: 20.06.2010
Сообщения: 17
Репутация: 10
По умолчанию

Код:
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  
Старый 06.07.2010, 16:24
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

PHP код:
...
except
    form1
.Memo3.Lines.Add('oops:'+username+';'+pass);
end
  #8  
Старый 06.07.2010, 16:53
Hack_ERR++ Hack_ERR++ вне форума
Прохожий
 
Регистрация: 20.06.2010
Сообщения: 17
Репутация: 10
По умолчанию

Что это еще за oops?
  #9  
Старый 06.07.2010, 17:17
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

Как пример:
Все прекрасно отрабатывает.
(тут заведомо ошибка деление на 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  
Старый 06.07.2010, 17:54
Hack_ERR++ Hack_ERR++ вне форума
Прохожий
 
Регистрация: 20.06.2010
Сообщения: 17
Репутация: 10
По умолчанию

Это совсем не то
  #11  
Старый 06.07.2010, 18:06
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

почему же?
  #12  
Старый 06.07.2010, 18:34
Hack_ERR++ Hack_ERR++ вне форума
Прохожий
 
Регистрация: 20.06.2010
Сообщения: 17
Репутация: 10
По умолчанию

потому что у тебя в каждой шаге ошибка, а у меня ее может и не быть. Если переделать мою программу по твоему примеру, то после первого нерабочего аккаунта все рабочие будут записываться как нерабочие
  #13  
Старый 06.07.2010, 19:56
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

Причем тут в каждом шаге или нет?
даже если не в каждом будет код будет работать.

Вообщем варианта 2 еще.
ХЗ поможет или нет но заключи тело цикла в begin end/

второй
попробуй использовать
E:Exception
  #14  
Старый 06.07.2010, 20:21
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

собственно, проблема в том, что ты отлавливаешь только сообщения об ошибках протокола. при этом, если просто сервер не существует, то ты получаешь другой класс исключения, который не обрабатывается. Надо:

Код:
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  
Старый 06.07.2010, 21:31
Hack_ERR++ Hack_ERR++ вне форума
Прохожий
 
Регистрация: 20.06.2010
Сообщения: 17
Репутация: 10
По умолчанию

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;
Закрытая тема


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:49.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter