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
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
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
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.