GARANTIR DESCONTO

Fórum Tratamento de exceções #446045

19/06/2013

0

Preciso abrir um arquivo texto e ler as linhas desse meu arquivo e somar os valores de cada linha.
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

Marcos Gandin

Responder

Posts

20/06/2013

Marcelo Senaga

Use raise para lançar uma exceção:

   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
Responder

Gostei + 0

20/06/2013

Marcos Gandin

Certo... mas no meu caso, como que eu faço para identificar que não existe o arquivo ou que tem uma linha em branco no arquivo ou ainda se ele não é um número inteiro?
Tentei colocar todas as exceções uma abaixo da outra no try...except...end mas não deu certo.
Responder

Gostei + 0

20/06/2013

Jaime Junior

Pode também criar procedures ou functions e chamalás passandos os dados como parametro.

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
Responder

Gostei + 0

20/06/2013

Diego Garcia

Certo... mas no meu caso, como que eu faço para identificar que não existe o arquivo ou que tem uma linha em branco no arquivo ou ainda se ele não é um número inteiro?
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...
Responder

Gostei + 0

20/06/2013

Marco Salles

Certo... mas no meu caso, como que eu faço para identificar que não existe o arquivo ou que tem uma linha em branco no arquivo ou ainda se ele não é um número inteiro?
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..
Responder

Gostei + 0

21/06/2013

Marcos Gandin

Quero agradecer à todos que me ajudaram.
Com certeza as dicas me ajudaram muito.

Tópico Resolvido
Responder

Gostei + 0

21/06/2013

José

Quero agradecer à todos que me ajudaram.
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.
Responder

Gostei + 0

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

Aceitar