If ou try ou o q?

4 respostas
B

Ola.

Eu preciso de uma ajuda.
Eu tenho um arquivo .txt e preciso validar vários campos desse arquivo e retornar para o usurário uma mensagem determinando qual erro de validação ocorreu. Tipo … se numero tal é válido … se data tal é valida … moeda … se o numero de regirtros bate com o campo que indica o numero de registros … se o tipo é um tipo valido … entre outros.
A princípio comecei a fazer com if else, mas extiram muitas validações encadeadas … e hoje o código está muito extenso. Já chegaram a ter mais 30 ifs encadeados. Eu pensei em usar algumas estrutura de Exception mas … daì falaram que o try iria demorar uma eternidade mais.

Alguém tem alguma sugestão de como tratar isso? Alguém já se deparou com algo parecido? Existe alguma estrutura melhor para se usar? Será que o try funcionaria?

Valeu a atenção!!

4 Respostas

Rage

Kra, o [color=blue]try[/color] nao tem nada a ver com isso.
O [color=blue]try[/color] não é uma ferramenta de decisão, como o [color=blue]if[/color] ou o [color=blue]switch[/color].

Com o try vc ‘tenta’ executar um comando, ou um bloco de comando, e caso algum destes comandos dispare uma exceção o fluxo do programa sai imediatamente do try e se desvia para o bloco [color=blue]catch[/color], que agarra a exceção gerada. A partir dai existem algumas opções para você tratar ou devolver esta exceção para quem a gerou.

O que você pode fazer é criar um método (ou alguns métodos) genérico(s) de validação, e usá-los para validar seus campos, enviando o valor do campo por parâmetro, sem ter que ficar repetindo os if´s ou switch´s.
Dentro dos métodos vai ser inevitável ou uso dos mesmos, porém vai ser uma vez só e depois é só chamá-los, e não a cada vez que você for validar, como parece que você está fazendo agora. Aproveite a orientação á objeto!

Dê uma estudada na palavra reservada TRY. O funcionamento é simples e muito útil.

[]´s

Giulliano

se seu problema é com try catch eu sugiro o seguinte:

private String message = null;

try{
//leitura dos campos
}catch(NullPointerException e){
message = e.getMessage();
}catch(NumberFormatException e2){
message = e2.getMessage();
}

if(message != null)
system.out.println("Erro na linha tal, Erro : "+message)
else
//inseri no banco

mas ae vc estaria apenas se precavendo de exceptions e vc ainda precisa validar seus campos …
então vc poderia criar várias funções que façam a validação e retornem true ou false pra vc…se vc receber um true para de ler e passa para a próxima linha…

entendeus ???..[’]

B

O que você poderia fazer seria criar uma função genérica de validação, ou algumasa funções e usá-las para validar seus campos, sem ter que ficar repetindo os if´s ou switch´s.
Mas dentro das funções vai ser inevitável ou uso dos mesmos.

Com certeza a criação de uma função de validação genérica chamando outros métodos de validação dentro dela será melhor do que ficar reescrevendo os if´s … até porque quando você decidir alterar alguma regra de validação… se estiver modularizado ficará mais fácil…

Espero ter ajudado
Att

B

Veja só … vamos partir para um exemplo …
Esse é o menor de todos que foi implementado …

[color=blue][size=9] public void validarRegistro(String linha, String codigoEntidade, int numeroLinha) {

FonteRecurso fonteRecurso = new FonteRecurso();

	int tamanhoListaErroInicio = relatorioImportacaoArquivo.getMensagensErro().size();
	
	String codigoEntidadeTemp = StringUtils.strip(linha.substring(1, 5));
	String codigo = StringUtils.strip(linha.substring(9, 13));
	String descricao = StringUtils.strip(linha.substring(13, 93));
	String ano = StringUtils.strip(linha.substring(93, 97));
	numeroSequencialRegistros = StringUtils.strip(linha.substring(97, 107));
	
	

	// Valida a Entidade fornecida pelo registro
	if (codigoEntidade.equals(codigoEntidadeTemp)) {

		Entidade entidadeTemp = daoFactory.createEntidadeDAO().findByCodigo(codigoEntidadeTemp);

		// Caso a entidade do registro esteja cadastrada
		if (entidadeTemp != null) {

			fonteRecurso.setEntidade(entidadeTemp);

			// Valida o código fornecido pelo registro
			if (!codigo.equalsIgnoreCase("")) {

				if (validarNumero(codigo)) {

					fonteRecurso.setCodigo(Integer.parseInt(codigo));

					// Valida o ano fornecido pelo registro
					if (!ano.equalsIgnoreCase("")) {

						if (validarNumero(ano)) {

							fonteRecurso.setAno(ano);

							// Valida o campo descricao fornecido pelo
							// registro
							if (!descricao.equalsIgnoreCase("")) {

								fonteRecurso.setDescricao(descricao);

							} else {

								relatorioImportacaoArquivo.getMensagensErro().add("Linha: " + numeroLinha + ", Erro:  Descricao inexistente.");

							}

							// Valida se a linha condiz com a especificada
							// no registro
							if (validarNumero(numeroSequencialRegistros)) {

								if (Integer.parseInt(numeroSequencialRegistros) != numeroLinha) {

									relatorioImportacaoArquivo.getMensagensErro().add(
											"Linha: " + numeroLinha + ", Erro:  Número Sequencial diferente do número da linha.");

								}

							} else {

								relatorioImportacaoArquivo.getMensagensErro().add(
										"Linha: " + numeroLinha + ", Erro:  Tipo de Número Sequencial com formato inválido.");

							}

							if (tamanhoListaErroInicio == relatorioImportacaoArquivo.getMensagensErro().size()) {

								// Verifica se a Fonte Recurso já existe
								FonteRecurso fonteRecursoTemp = daoFactory.createFonteRecursoDAO().findByCodigoAnoEntidade(fonteRecurso.getCodigo(), 
										fonteRecurso.getAno(), fonteRecurso.getEntidade());

								// Caso a Fonte de Recurso ainda não exista no Banco
								// cadastre-o
								if (fonteRecursoTemp == null) {

									numeroDeLinhaCorretas += 1;

									registrosParaSalvar.add(fonteRecurso);

									// Caso a Fonte de Recurso já exista, atualize
								} else {

									fonteRecursoTemp.setAno(ano);
									fonteRecursoTemp.setCodigo(fonteRecurso.getCodigo());
									fonteRecursoTemp.setDescricao(descricao);
									fonteRecursoTemp.setEntidade(fonteRecurso.getEntidade());

									numeroDeLinhaCorretas += 1;

									registrosParaAtualizar.add(fonteRecursoTemp);

								}

							}

						} else {

							relatorioImportacaoArquivo.getMensagensErro().add("Linha: " + numeroLinha + ", Erro:  Ano com formato inválido.");

						}

					} else {

						relatorioImportacaoArquivo.getMensagensErro().add("Linha: " + numeroLinha + ", Erro:  Ano inexistente.");

					}

				} else {

					relatorioImportacaoArquivo.getMensagensErro().add("Linha: " + numeroLinha + ", Erro:  Código com formato inválido.");

				}

			} else {

				relatorioImportacaoArquivo.getMensagensErro().add("Linha: " + numeroLinha + ", Erro:  Código inexistente.");

			}

		} else {

			relatorioImportacaoArquivo.getMensagensErro().add("Linha: " + numeroLinha + ", Erro:  Entidade não cadastrada.");

		}

	} else {

		relatorioImportacaoArquivo.getMensagensErro().add("Linha: " + numeroLinha + ", Erro:  Código da Entidade incorreto.");

	}

}[/size]

[/color]

Criado 21 de janeiro de 2008
Ultima resposta 21 de jan. de 2008
Respostas 4
Participantes 4