[RESOLVIDO]Ler entrada comparar conteudo do txt com a entrada e salvar caso a entrada na e

2 respostas
jeferson.januario

Pessoal, bom dia!
Estou com o seguinte problema aqui tenho um txt para ler mas tenho que filtrar ele, porem quando, estou lendo o mesmo, eu pego o nome do meu cliente e comparo linha a linha se ele ja existe em minha saida, porem nao esta rolando, ele esta gravando mesmo contendo o nome na saida.
Segue a baixo o codigo do meu programa, Estou tentando comparar com o String.contains(). Desde já obrigado.

meu txt
Data,Cartao,Sexo,Nome,Area,Fone,RG,Email,Aniversario,V.Ingreso,Total
12/11/2010,1-00309,F,jeferson,11,75430154, [email removido], 51278,01/01, 0.00, 182.60
12/11/2010,1-00309,F,jeferson,11,75430154, [email removido], 51278,01/01, 0.00, 170.60
12/11/2010,1-00309,F,11,75430154, [email removido], 51278,01/01, 0.00, 182.60
12/11/2010,1-00309,F,jeferson,11,75430154, [email removido], 51278,01/01, 0.00, 19.60
12/11/2010,1-00309,F,januario,11,75430154, [email removido], 51278,01/01, 0.00, 182.60
12/11/2010,1-00309,F,11,75430154, [email removido], 51278,01/01, 0.00, 182.60
12/11/2010,1-00309,F,jeferson,11,75430154, [email removido], 51278,01/01, 0.00, 15.60

package br.com.asterix;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Fidelidade {
	static Logger logger = LoggerFactory.getLogger(Fidelidade.class);
	static boolean contem = false;

	public static void main(String[] args) throws IOException {

		String pathNameIn = "/home/jeferson/Downloads/HJ.1.TXT";
		String pathNameOut = "/home/jeferson/Desktop/HJSaida.txt";
		File inFile = new File(pathNameIn);
		File outFile = new File(pathNameOut);
		String linhaSelecionada = null;
		String nomeCliente = null;
		double filtro = 99.99;
		String linha;
		String linhaFinal;
		int totalFatura;
		int tamanhoLinha;

		FileReader reader = new FileReader(inFile);
		FileWriter writer = new FileWriter(outFile);
		BufferedReader leitor = new BufferedReader(reader);
		BufferedWriter escritor = new BufferedWriter(writer);
		FileReader readerFinal = new FileReader(outFile);
		BufferedReader leitorFinal = new BufferedReader(readerFinal);

		try {

			linha = leArquivoOrigem(filtro, leitor, escritor, leitorFinal);

			reader.close();
			writer.close();
			leitor.close();
			escritor.close();
			readerFinal.close();
			leitorFinal.close();
		} catch (IOException e) {

			logger.info("deu erro");
			logger.info(e.getMessage());

		}
	}

	private static String leArquivoOrigem(double filtro, BufferedReader leitor,
			BufferedWriter escritor, BufferedReader leitorFinal)
			throws IOException {
		String linhaSelecionada;
		String nomeCliente;
		String linha;
		int totalFatura;
		int tamanhoLinha;
		while ((linha = leitor.readLine()) != null) {
			tamanhoLinha = linha.split(",").length;
			tamanhoLinha = (tamanhoLinha - 1);

			nomeCliente = linha.trim().split(",")[3];

			linhaSelecionada = linha.trim().split(",")[tamanhoLinha];
			totalFatura = (int) Double.parseDouble(linhaSelecionada.trim());
			logger.info("Nome do Cliente " + nomeCliente);
			filtraTotalFatura(nomeCliente, filtro, linha, totalFatura,
					tamanhoLinha, escritor, leitorFinal);
		}
		return linha;
	}

	private static void filtraTotalFatura(String nomeCliente, double filtro,
			String linha, int totalFatura, int tamanhoLinha,
			BufferedWriter escritor, BufferedReader leitorFinal)
			throws IOException {
		String linhaFinal;
		if (nomeCliente.trim() != null) {
			if (nomeCliente.length() > 4) {
					if (totalFatura > filtro) {
						logger.info("Numero decrementado: "
								+ tamanhoLinha);
						logger.info("Linha Split "
								+ linha.trim().split(",")[tamanhoLinha]);
						
														
						linhaFinal = leArquivoGravado(nomeCliente,
								leitorFinal);

						grava(linha, escritor, contem);
					}
				
			}
		}
	}

	private static String leArquivoGravado(String nomeCliente,
			BufferedReader leitorFinal) throws IOException {
		String linhaFinal;
		while ((linhaFinal = leitorFinal.readLine()) != null) {
			logger.info("Estamos dentro do while agora:::::");
			buscaNome(nomeCliente, linhaFinal);
		}
		return linhaFinal;
	}

	private static void buscaNome(String nomeCliente, String linhaFinal) {
		if (linhaFinal != null) {
			if ( linhaFinal.trim().contains(nomeCliente.trim())) {
					contem = true;
			}
		}
	}

	private static void grava(String linha, BufferedWriter escritor,
			boolean contem) throws IOException {
		if (!contem) {
			escritor.write(linha + "\n");
			logger.info("Gravado: " + linha);
		}
	}

}

2 Respostas

jeferson.januario
jeferson.januario:
Pessoal, bom dia! Estou com o seguinte problema aqui tenho um txt para ler mas tenho que filtrar ele, porem quando, estou lendo o mesmo, eu pego o nome do meu cliente e comparo linha a linha se ele ja existe em minha saida, porem nao esta rolando, ele esta gravando mesmo contendo o nome na saida. Segue a baixo o codigo do meu programa, Estou tentando comparar com o String.contains(). Desde já obrigado.

meu txt
Data,Cartao,Sexo,Nome,Area,Fone,RG,Email,Aniversario,V.Ingreso,Total
12/11/2010,1-00309,F,jeferson,11,75430154, [email removido], 51278,,01/01, 0.00, 182.60
12/11/2010,1-00309,F,jeferson,11,75430154, [email removido], 51278,,01/01, 0.00, 170.60
12/11/2010,1-00309,F,,11,75430154, [email removido], 51278,,01/01, 0.00, 182.60
12/11/2010,1-00309,F,jeferson,11,75430154, [email removido], 51278,,01/01, 0.00, 19.60
12/11/2010,1-00309,F,januario,11,75430154, [email removido], 51278,,01/01, 0.00, 182.60
12/11/2010,1-00309,F,,11,75430154, [email removido], 51278,,01/01, 0.00, 182.60
12/11/2010,1-00309,F,jeferson,11,75430154, [email removido], 51278,,01/01, 0.00, 15.60

package br.com.asterix;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Fidelidade {
	static Logger logger = LoggerFactory.getLogger(Fidelidade.class);
	static boolean contem = false;

	public static void main(String[] args) throws IOException {

		String pathNameIn = "/home/jeferson/Downloads/HJ.1.TXT";
		String pathNameOut = "/home/jeferson/Desktop/HJSaida.txt";
		File inFile = new File(pathNameIn);
		File outFile = new File(pathNameOut);
		String linhaSelecionada = null;
		String nomeCliente = null;
		double filtro = 99.99;
		String linha;
		String linhaFinal;
		int totalFatura;
		int tamanhoLinha;

		FileReader reader = new FileReader(inFile);
		FileWriter writer = new FileWriter(outFile);
		BufferedReader leitor = new BufferedReader(reader);
		BufferedWriter escritor = new BufferedWriter(writer);
		FileReader readerFinal = new FileReader(outFile);
		BufferedReader leitorFinal = new BufferedReader(readerFinal);

		try {

			linha = leArquivoOrigem(filtro, leitor, escritor, leitorFinal);

			reader.close();
			writer.close();
			leitor.close();
			escritor.close();
			readerFinal.close();
			leitorFinal.close();
		} catch (IOException e) {

			logger.info("deu erro");
			logger.info(e.getMessage());

		}
	}

	private static String leArquivoOrigem(double filtro, BufferedReader leitor,
			BufferedWriter escritor, BufferedReader leitorFinal)
			throws IOException {
		String linhaSelecionada;
		String nomeCliente;
		String linha;
		int totalFatura;
		int tamanhoLinha;
		while ((linha = leitor.readLine()) != null) {
			tamanhoLinha = linha.split(",").length;
			tamanhoLinha = (tamanhoLinha - 1);

			nomeCliente = linha.trim().split(",")[3];

			linhaSelecionada = linha.trim().split(",")[tamanhoLinha];
			totalFatura = (int) Double.parseDouble(linhaSelecionada.trim());
			logger.info("Nome do Cliente " + nomeCliente);
			filtraTotalFatura(nomeCliente, filtro, linha, totalFatura,
					tamanhoLinha, escritor, leitorFinal);
		}
		return linha;
	}

	private static void filtraTotalFatura(String nomeCliente, double filtro,
			String linha, int totalFatura, int tamanhoLinha,
			BufferedWriter escritor, BufferedReader leitorFinal)
			throws IOException {
		String linhaFinal;
		if (nomeCliente.trim() != null) {
			if (nomeCliente.length() > 4) {
					if (totalFatura > filtro) {
						logger.info("Numero decrementado: "
								+ tamanhoLinha);
						logger.info("Linha Split "
								+ linha.trim().split(",")[tamanhoLinha]);
						
														
						linhaFinal = leArquivoGravado(nomeCliente,
								leitorFinal);

						grava(linha, escritor, contem);
					}
				
			}
		}
	}

	private static String leArquivoGravado(String nomeCliente,
			BufferedReader leitorFinal) throws IOException {
		String linhaFinal;
		while ((linhaFinal = leitorFinal.readLine()) != null) {
			logger.info("Estamos dentro do while agora:::::");
			buscaNome(nomeCliente, linhaFinal);
		}
		return linhaFinal;
	}

	private static void buscaNome(String nomeCliente, String linhaFinal) {
		if (linhaFinal != null) {
			if ( linhaFinal.trim().contains(nomeCliente.trim())) {
					contem = true;
			}
		}
	}

	private static void grava(String linha, BufferedWriter escritor,
			boolean contem) throws IOException {
		if (!contem) {
			escritor.write(linha + "\n");
			logger.info("Gravado: " + linha);
		}
	}

}
jeferson.januario
hashMap.put(nomeCliente, linha);
list.add(nomeCliente);

limpando a lista

List<String> nList = new ArrayList(new HashSet(list));

Como meu arquivo nao tem mais de 2G eu pude fazer isso mas se tivesse ?

Criado 3 de junho de 2012
Ultima resposta 4 de jun. de 2012
Respostas 2
Participantes 1