TXT - Eliminar linhas repetidas

Boa tarde a todos,

eu tenho um arquivo TXT com quase 2milhões de linhas, uns 25% destas linhas são repitidas.

O que eu preciso da ajuda dos srs., como eliminar estas linhas repetidas?

Atenciosamente

Nilson

O programa abaixo remove linhas que já apareceram alguma vez no arquivo. Não sei qual é a sua definição de “linhas repetidas”. Pode ser que não faça o que você quer :frowning:

import java.util.*;
import java.io.*;
import java.security.*;

class RemoveLinhasRepetidas {
	static class Hash {
		public Hash (byte[] linha) { 
			digest.reset();
			bytes = digest.digest (linha);
		}
		public boolean equals (Object obj) {
			if (obj instanceof Hash) {
				return Arrays.equals (bytes, ((Hash)obj).bytes);
			}
			return false;
		}
		public int hashCode () {
			int hash = 0;
			for (int i = 0; i < bytes.length; ++i) {
				hash = hash * 37 + (bytes[i] & 0xFF);
			}
			return hash;
		}
		private byte[] bytes = new byte[16];
		private static MessageDigest digest;
		static {
			try { digest = MessageDigest.getInstance ("MD5"); } catch (NoSuchAlgorithmException ex) { }
		}
	}

    public static void main (String[] args) throws Exception {
		Set<Hash> hashes = new HashSet<Hash>();
		BufferedReader br = new BufferedReader (new FileReader (args[0]));
		BufferedWriter bw = new BufferedWriter (new FileWriter (args[1]));
		String linha;
		while ((linha = br.readLine ()) != null) 
		{
			Hash hashLinha = new Hash (linha.getBytes());
			if ( ! hashes.contains (hashLinha)) {
				bw.write (linha); bw.newLine();
				hashes.add (hashLinha);
			}
		}
		bw.close();
		br.close();
	}
}

Desculpe não ter especificado corretamente.

A questão é que eu tenho uma linha delimitada por #, e justamente na primeira coluna eu tenho um campo (“chave primaria”) que se repete.

A posição dentro da leitura deste campo é a posição (0,12) de cada linha. A grande questão é este pequeno espaço que dita as linhas repetidas.

Fui um pouco mais claro em relação a isso?

Att

Nilson

Você pode pegar o programa acima e modificá-lo para considerar apenas a parte que você quer usar como chave :slight_smile:
Isto supondo que você pode considerar apenas a primeira linha que tiver esse valor de chave, e desprezar as linhas seguintes que tiverem esse mesmo valor. Se seu problema é pegar a ÚLTIMA então você precisa reformular o programa acima.