Fórum Tratamento exceção dentro de um laço #345372

30/08/2007

0

Pessoal estou com o seguinte problema, quando estou fazendo o while eu pego as posições dentro de varios .htm dentro de um diretorio até ai ok..
O problema é que alguns destes arquivos não estão com a formatação iguais a maioria deles, e quando vou vou postar no banco o strtoint(variavel) da um erro dizendo que a variavel não é um integer válido, claro pois pegou um pedaço de texto dos arquivos...

Tentei um try / except mas dai ele sai do while e para com o loop.....

existe algum tratamento dentro do while que não saia do loop???

desde ja agradeço...


codigo abaixo, onde acontece o erro esta em vermelho:

procedure TForm1.Button1Click(Sender: TObject);
var
origem : textfile;
texto,cond,codcond,sind,arq : string;
i,n : integer;
begin
n := 1;

while n <= 9999 do
begin
arq := ´C:\Guarida\dados\´+IntToStr(n)+´.HTM´;
if FileExists(arq) then
begin
AssignFile(origem,arq);
Reset(origem);
i := 0;
while i <= 8 do
begin
Readln(origem,texto);
i := i+1;
end;
Readln(origem,texto);
codcond := trim(Copy(texto,28,5));
cond := trim(Copy(texto,35,50));
TCondominio.Insert;
[color=red:77aff0c25f]TCondominioCod.Value := StrToInt(codcond);[/color:77aff0c25f]
TCondominioCondominio.Value := cond;
Readln(origem,texto);
Readln(origem,texto);
sind := trim(Copy(texto,34,50));
TCondominioSindico.Value := sind;
TCondominio.Post;
end;
n := n+1;
end;
end;


Fabiobritors

Fabiobritors

Responder

Posts

30/08/2007

Arc@njo

Voce colocou o Try Except no local correto?
Poderia colocar entao assim.
procedure TForm1.Button1Click(Sender: TObject);
var
 origem : textfile;
 texto,cond,codcond,sind,arq : string;
 i,n : integer;
begin
 n := 1;

 while n <= 9999 do
 begin
  arq := ´C:\Guarida\dados\´+IntToStr(n)+´.HTM´;
  if FileExists(arq) then
  begin
   AssignFile(origem,arq);
   Reset(origem);
   i := 0;
   while i <= 8 do
   begin
    Readln(origem,texto);
    i := i+1;
   end;
   Readln(origem,texto);
   codcond := trim(Copy(texto,28,5));
   cond := trim(Copy(texto,35,50));
   TCondominio.Insert;
   Try
    TCondominioCod.Value := StrToInt(codcond);
   Except
    TCondominioCod.Value := 0; // Ou outro tratamento para a variavel codcond
   End;
   TCondominioCondominio.Value := cond;
   Readln(origem,texto);
   Readln(origem,texto);
   sind := trim(Copy(texto,34,50));
   TCondominioSindico.Value := sind;
   TCondominio.Post;
  end;
  n := n+1;
 end;
end;



Espero que te atenda...[b:90eba31f23][/b:90eba31f23]


Responder

Gostei + 0

30/08/2007

Fabiobritors

Ola amigo eu ja tentei dessa forma, mas parece que meu [b:35ab32112a]try[/b:35ab32112a] não funciona, o erro acontece e ele não faz o tratamento :cry:

[b:35ab32112a]procedure TForm1.Button1Click(Sender: TObject);
var
origem : textfile;
texto,cond,codcond,sind,arq : string;
i,n : integer;
begin
n := 1;
while n <= 9999 do
begin
arq := ´C:\Guarida\dados\´+IntToStr(n)+´.HTM´;
if FileExists(arq) then
begin
AssignFile(origem,arq);
Reset(origem);
i := 0;
while i <= 8 do
begin
Readln(origem,texto);
i := i+1;
end;
Readln(origem,texto);
codcond := trim(Copy(texto,28,5));
cond := trim(Copy(texto,35,50));
TCondominio.Insert;
[color=red:35ab32112a]try
TCondominioCod.Value := StrToInt(codcond);
except
on EConvertError do
ShowMessage(´Erro´);
end;[/color:35ab32112a]
TCondominioCondominio.Value := cond;
Readln(origem,texto);
Readln(origem,texto);
sind := trim(Copy(texto,34,50));
TCondominioSindico.Value := sind;
TCondominio.Post;
end;
n := n+1;
end;
end;[/b:35ab32112a]


Responder

Gostei + 0

30/08/2007

Rjun

O erro ocorre quando você está no modo de debug, com o IDE aberto ou quando você esta rodando o executavel?


Responder

Gostei + 0

30/08/2007

Emerson Nascimento

tem certeza que é naquele momento?
porque, pelo tratamento que você fez, ele deveria mostrar a mensagem ´Erro´ e tentaria continuar, porém você não preenche o campo CondominioCod e, se ele for obrigatório, dará erro mesmo.
qual é a mensagem de erro exata que o sistema exibe?
procedure TForm1.Button1Click(Sender: TObject);
var
  origem : textfile;
  texto,cond,codcond,sind,arq : string;
  i,n : integer;
begin
  n := 1;
  
  while n <= 9999 do
  begin
    arq := ´C:\Guarida\dados\´+IntToStr(n)+´.HTM´;

    if FileExists(arq) then
    begin
      AssignFile(origem,arq); // você abriu o arquivo.
      Reset(origem);          // ele não se fecha sozinho.

      i := 0;
      while i <= 8 do
      begin
        Readln(origem,texto);
        i := i+1;
      end;

      Readln(origem,texto);
      codcond := trim(Copy(texto,28,5));
      cond := trim(Copy(texto,35,50));

      TCondominio.Insert;
      try
        TCondominioCod.Value := StrToInt(codcond);
      except
        on EConvertError do
        begin
          TCondominioCod.Value := -1;
          ShowMessage(´Erro´);
        end;
      end;

      TCondominioCondominio.Value := cond;
      Readln(origem,texto);
      Readln(origem,texto);
      sind := trim(Copy(texto,34,50));

      TCondominioSindico.Value := sind;

      if TCondominioCod.Value = -1 then
        TCondominio.Cancel
      else
        TCondominio.Post;

      CloseFile(origem); // você abriu o arquivo. lembre-se de fecha-lo
    end;

    n := n+1;
  end;
end;



Responder

Gostei + 0

31/08/2007

Fabiobritors

Amigos a mensagem de erro que da é a seguinte:

[URL=http://img85.imageshack.us/my.php?image=untitled1eh5.jpg][img:fb37db1ccc]http://img85.imageshack.us/img85/6351/untitled1eh5.th.jpg[/img:fb37db1ccc][/URL]

Simplesmente parece que o [b:fb37db1ccc]TRY[/b:fb37db1ccc] do delphi não funciona :cry:

procedure TForm1.Button1Click(Sender: TObject);
var
origem : textfile;
texto,cond,codcond,sind,arq  : string;
i,n      : integer;
begin
n := 1;
      while n <= 9999 do
      begin
      arq := ´C:\Guarida\dados\´+IntToStr(n)+´.HTM´;
           if  FileExists(arq) then
           begin
             AssignFile(origem,arq);
             Reset(origem);
             i := 0;
                 while i <= 8 do
                   begin
                   Readln(origem,texto);
                   i := i+1;
                   end;
              Readln(origem,texto);
              codcond := trim(Copy(texto,28,5));
              cond := trim(Copy(texto,35,50));
              TCondominio.Insert;
                 try
                 TCondominioCod.Value := StrToInt(codcond);
                 TCondominioCondominio.Value := cond;
                 Readln(origem,texto);
                 Readln(origem,texto);
                 sind := trim(Copy(texto,34,50));
                  TCondominioSindico.Value := sind;
                 TCondominio.Post;
                 except
                    ShowMessage(´Erro no arquivo´);
                 end;
                 end;
           n := n+1;
           end;
      if not FileExists(arq) then
      n := n+1;
      end;



Responder

Gostei + 0

31/08/2007

Rjun

Vá em Tools/Debugger Options. Selecione a aba Language Exceptions e desmarque a opção Stop on Delphi Exeptions.


Responder

Gostei + 0

31/08/2007

Fabiobritors

Vá em Tools/Debugger Options. Selecione a aba Language Exceptions e desmarque a opção Stop on Delphi Exeptions.


DEU CERTO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Mt obrigado amigo!!!!!!

Acertou na mosca incrivel :D :D :D

saudações


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar