VERIFICANDO DADOS DUPLICADOS TXT

LUIS.FLAVIO 16/05/2010 10:24:40
#341873
Bom dia pessoal,

Estou precisando verificar em um txt dados duplicados, da seguinte forma.

1, 1254, 45879, 256
2, 5845, 45878, 698
3, 4587, 58744, 698
4, 5845, 45878, 698

Preciso comparar as três colunas finais, observem que os a Linha 2 a Linha 4 são iguais e preciso deletar uma delas, na média esse arquivo deve ter umas 300 linhas.

Como poderia fazer essa comparação e depois deletar, pensei em alguma coisa com ARRAY mas não consegui fazer nada.

Abraço
TECLA 16/05/2010 11:00:37
#341874
Segue uma dica possível:

1. Crie uma base MDB e uma tabela TEMP com a mesma estrutura do arquivo TXT
2. Percorra o arquivo TXT e insira as linhas na tabela TEMP
3. Assim que concluir, percorra novamente o arquivo TXT fazendo uma QUERY à cada iteração
4. Caso encontre mais de uma linha, exclua uma delas e continue na iteração
5. Assim que finalizar, gere um novo arquivo com os registros da tabela TEMP
LUIS.FLAVIO 16/05/2010 15:19:27
#341881
Existiria uma outra forma sem usar MDB?
EDERMIR 16/05/2010 17:03:16
#341884
Sim existe.

Crie uma MATRIZ e pesquise nesta matriz a cada linha inserida. Demora um pouco mas resolve.

Você pode alimentar um LIST com SORT automático. Mas a demora é a mesma.
XXXANGELSXXX 16/05/2010 17:11:08
#341885
vou colocar para voce uma rotina feita no DAO, mas e so adaptar para ADO, veja se entende.


   
Sub ImportarArquivodeClientes()
If txtAnexo.Text = Empty Then
MsgBox [Ô]Selecione o Arquivo para Importação![Ô], vbCritical, [Ô]Tech Size[Ô]
Call ProcurarArquivo
Exit Sub
Else
Dim Coluna() As String
Dim Verifica() As String
Dim F As Long, sLine As String
Dim DB As Database, RS As Recordset, Proc As Recordset
Dim StrSql As String

On Error Resume Next
[ô]On Error GoTo trata_erro

F = FreeFile
Open txtAnexo.Text For Input As F

Do While Not EOF(F)
Line Input #F, sLine
Coluna = Split(sLine, [Ô];[Ô])

caminho = ReadINI([Ô]Geral[Ô], [Ô]Caminho[Ô], App.Path & [Ô]\Config.ini[Ô])
Set DB = DBEngine(0).OpenDatabase(caminho)
[ô]Aqui verifico na tabela se ja tem a informaçao comparando com o arquivo txt.. ok
StrSql = ([Ô]SELECT * FROM CadClientes Where CliCodigo = [ô][Ô] & Coluna(0) & [Ô][ô][Ô])
Set RS = DB.OpenRecordset(StrSql)

If RS.EOF Then

RS.AddNew

RS(0) = Coluna(0)
RS(1) = f_RemoveAcento(MMCase(Coluna(1)))
RS(2) = f_RemoveAcento(MMCase(Coluna(2)))

If Len(Coluna(3)) <= 11 Then
Coluna(3) = Format(Coluna(3), [Ô]@@@.@@@.@@@-@@[Ô])
RS(26) = [Ô]-1[Ô]
Else
Coluna(3) = Format(Coluna(3), [Ô]@@.@@@.@@@/@@@@-@@[Ô])
RS(27) = [Ô]-1[Ô]

End If

RS(3) = f_RemoveAcento(MMCase(Coluna(3)))
RS(4) = f_RemoveAcento(MMCase(Coluna(4)))
RS(5) = [Ô]([Ô] & Left(Coluna(5), 2) & [Ô])[Ô] & Mid(Coluna(5), 3, 4) & [Ô]-[Ô] & Right(Coluna(5), 4)
RS(6) = f_RemoveAcento(MMCase(Coluna(6)))
RS(7) = f_RemoveAcento(MMCase(Coluna(7)))
RS(8) = f_RemoveAcento(MMCase(Coluna(8)))
RS(9) = f_RemoveAcento(MMCase(Coluna(9)))
RS(10) = f_RemoveAcento(MMCase(Coluna(10)))
RS(11) = Left(Coluna(11), 5) & [Ô]-[Ô] & Mid(Coluna(11), 6, 8)
RS(12) = f_RemoveAcento(MMCase(Coluna(12)))
RS(13) = f_RemoveAcento(MMCase(Coluna(13)))
RS(14) = f_RemoveAcento(MMCase(Coluna(14)))
RS(15) = f_RemoveAcento(MMCase(Coluna(15)))
RS(16) = f_RemoveAcento(MMCase(Coluna(16)))
RS(17) = f_RemoveAcento(MMCase(Coluna(17)))
RS(18) = f_RemoveAcento(MMCase(Coluna(18)))
RS(34) = (Coluna(15))

If Len(Coluna(16)) Then
Coluna(16) = Format(Coluna(16), [Ô]@@@@@@@@[Ô])
End If
RS(34) = (Coluna(16))
RS(35) = [Ô]CLI[Ô]


RS.Update

End If
bar.Visible = True
bar.Value = bar.Value + 1
Loop

DB.Execute ([Ô]Delete * from CadClientes where clicodigo=[ô][Ô] & [Ô]Cliente[Ô] & [Ô][ô][Ô])
DB.Execute ([Ô]DELETE * FROM CADCLIENTES WHERE CLICODIGO=[ô][Ô] & [Ô][Ô] & [Ô][ô][Ô])


RS.Close
DB.Close

Close #F

frmCadClientes.Data1.Refresh

frmAviso.Label2 = [Ô]Arquivo Importado com Sucesso![Ô]
frmAviso.Show 1

MsgBox [Ô]Arquivo Importado com Sucesso !! [Ô], vbInformation, [Ô]Tech Size[Ô]
bar.Visible = False

Exit Sub
If Err.Number <> 0 Then
trata_erro:
MsgBox [Ô]Um Erro Inesperado Ocorreu, Descrição do Erro : > [Ô] & Err.Description
End If
End If
End Sub
EPISCOPAL 17/05/2010 08:18:43
#341916
bem que eu tava precisando de um codigo destes ........ só que no meu caso são mais de 700.000 palavras ....
LUIS.FLAVIO 17/05/2010 08:25:24
#341917
LVFIOROT show de bola!

Melhor não poderia ser! RSRS

Abraço
EPISCOPAL 21/06/2010 23:33:54
#345433
aki é 4gb ...... eu acho que o meu problema é tempo .......... e naum memoriaaaa ........
Tópico encerrado , respostas não são mais permitidas