Fórum Tratamento de exceções #446045
19/06/2013
0
Até aí tudo bem, mas acontece que se ocorrerem algumas situações que preciso disparar uma exceção personalizada e não estou conseguindo fazer isso.
Os casos que devo disparar estas exceções são: Se o arquivo informado não existir, disparar a exceção EArquivoNaoEncontrado com a mensagem “Arquivo não encontrado”. Se alguma linha do arquivo estiver vazia, disparar a exceção ELinhaDadosVazia com a mensagem “Linha de dados inválida”. Se ocorrer algum erro de conversão de string para integer, mudar a mensagem da exceção para “Valor alfanumérico encontrado.” Se ocorrer qualquer outra exceção, exibir a mensagem padrão da exceção que ocorreu.
O trecho do meu código está assim:
procedure TTeste.BitBtn1Click(Sender: TObject);
var
arquivo : TextFile;
nome, Linhas : string;
icont : Integer;
Lista: TStringList;
begin
Linhas := '';
icont := 0;
if dlgOpen1.Execute then
begin
try
nome := dlgOpen1.FileName;
if FileExists(nome) then
begin
AssignFile(arquivo,nome);
Reset(arquivo);
while not Eof(arquivo) do
begin
Readln(arquivo,Linhas);
try
icont := icont + StrToInt(Linhas);
except
//aqui devem estar as exceções
end;
end;
end;
finally
CloseFile(arquivo);
end;
end;
end;
Como eu faço estas exceções?
Marcos Gandin
Curtir tópico
+ 0Posts
20/06/2013
Marcelo Senaga
raise EMathError.Create(‘Erro: EMathError’);// Específico
Ou simplesmente
raise Exception.Create(‘Erro bla: Exception’);// Genérico
Ver:
http://www.linhadecodigo.com.br/artigo/1258/delphi-tratamento-de-execucoes-robustas.aspx
Gostei + 0
20/06/2013
Marcos Gandin
Tentei colocar todas as exceções uma abaixo da outra no try...except...end mas não deu certo.
Gostei + 0
20/06/2013
Jaime Junior
Ex. a que valida o inteiro
//Cria a função de testa se o dados é inteiro
function ValidaInt(dados: String) : boolean;
begin
try
StrToInt(dados);
except
On EConvertError do result := False;
else
result := True;
end;
end;
//No seu comando chama ela se retorna false aparece a mensagem e aborta.
//Exemplo
try
icont := icont + StrToInt(Linhas);
except
//aqui devem estar as exceções
if not(ValidaInt(dados: String)) then//Se for false
begin
showmessagem('Dados não é inteiro!');
abort;//Para a execução do código.
end;
end;
Espero que tenha dado uma ideia para sua solução. abraço
Gostei + 0
20/06/2013
Diego Garcia
Tentei colocar todas as exceções uma abaixo da outra no try...except...end mas não deu certo.
Por que você não faz algo mais ou menos assim:
[...]
try
if not FileExists(sCaminhoDoArquivo) then
Raise EArquivoInvalido.Create('Arquivo não encontrado');
[...]
if (sLinhas = EmptyStr) then
Raise ELinhaEmBranco.Create('O arquivo possui uma linha em branco');
except
on e : EConverError do
Raise ENaoEInteiro.Create('Não é um numero válido')
else
raise;
end;
Acredito que você teria que validar etapa por etapa...
Gostei + 0
20/06/2013
Marco Salles
Tentei colocar todas as exceções uma abaixo da outra no try...except...end mas não deu certo.
Eu acho que se vc gerar as exceções ( definindo-as ,tal como o autor do Artigo Deve Ter Feito < eu não li >
vai dar Certo sim
type
TerroDisto = class(Exception);
TErroDaquilo = Class (Exception);
e por ai vai..
Gostei + 0
21/06/2013
Marcos Gandin
Com certeza as dicas me ajudaram muito.
Tópico Resolvido
Gostei + 0
21/06/2013
José
Com certeza as dicas me ajudaram muito.
Tópico Resolvido
Amigo muito obrigado por seu retorno.
Sendo assim estou dando esse tópico por concluído.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)