Tratamento exceção dentro de um laço
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;
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
Curtidas 0
Respostas
Arc@njo
30/08/2007
Voce colocou o Try Except no local correto?
Poderia colocar entao assim.
Espero que te atenda...[b:90eba31f23][/b:90eba31f23]
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]
GOSTEI 0
Fabiobritors
30/08/2007
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]
[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]
GOSTEI 0
Rjun
30/08/2007
O erro ocorre quando você está no modo de debug, com o IDE aberto ou quando você esta rodando o executavel?
GOSTEI 0
Emerson Nascimento
30/08/2007
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?
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;
GOSTEI 0
Fabiobritors
30/08/2007
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:
[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;
GOSTEI 0
Rjun
30/08/2007
Vá em Tools/Debugger Options. Selecione a aba Language Exceptions e desmarque a opção Stop on Delphi Exeptions.
GOSTEI 0
Fabiobritors
30/08/2007
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
GOSTEI 0