Usuário com melhor resposta
Comparar conteudo de arquivos texto.

Pergunta
-
Senhores,
Gostaria da ajuda dos senhores para um código em vbs.
Estou precisando de um código que compara linha a linha de dois arquivos texto e me gere um terceiro arquivo com o número das linhas e o conteudo destas que forem diferentes.
Vi alguns scripts na net, porém sou novo com vbscript e não estou sabendo adapta-los as minhas nescessidades.
Ficarei grato com vossa ajuda.
Respostas
-
Bom, se é só comprar a linha 1 do arquivo2 com a senha 1 do arquivo1, será facil. Se tiver que pesquisar no arquivo1 cada linha do arquivo2 ai será mais dificil e bem mais demorado. Nada impossivel.
Veja se é algo assim que você quer:
'
' script: compara-linhas.vbs
' descricao: Faz a comparação da linha 1 do arquivo2 com a linha 1 do arquivo1
'
'
on error resume nextstrArquivo1 = "arquivo1.txt"
strArquivo2 = "arquivo2.txt"Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objArquivo1 = objFSO.OpenTextFile(strArquivo1, 1)
Set objArquivo2 = objFSO.OpenTextFile(strArquivo2, 1)nTotalLinha1 = UBound(Split(objFSO.OpenTextFile(strArquivo1).ReadAll, vbLf))
nTotalLinha2 = UBound(Split(objFSO.OpenTextFile(strArquivo2).ReadAll, vbLf))if ( nTotalLinha2 > nTotalLinha1 ) Then nTotal = nTotalLinha2 else nTotal = nTotalLinha1 End If
wscript.echo "[+] Comparando linhas dos arquivos..."
nLinha = 0
Do Until objArquivo2.AtEndOfStream
strLinha2 = objArquivo2.ReadLine
strLinha1 = objArquivo1.ReadLine
if err.number <> 0 Then strLinha1 = "" End IfnLinha = nLinha + 1
If strLinha2 <> strLinha1 Then
Wscript.echo nLinha & ";" & strLinha2
End If
Loop
wscript.echo "---------------------------------------------"
wscript.echo " Arquivo 1: ( " & nTotalLinha1 & " )"
wscript.echo " Arquivo 2: ( " & nTotalLinha2 & " )"- Sugerido como Resposta Fábio JrModerator sexta-feira, 16 de dezembro de 2011 13:27
- Marcado como Resposta Fábio JrModerator sexta-feira, 16 de dezembro de 2011 23:39
Todas as Respostas
-
-
Existe o diffutils que são ferramentas que pode te ajudar.
http://sourceforge.net/projects/gnuwin32/files/diffutils/2.8.7-1/diffutils-2.8.7-1-bin.zip/download
Fábio de Paula Junior -
-
Eli,
Comparar linhas de arquivos de Logs não é tão complicado (formato csv). Só preciso saber o que exatamente você quer comparar pois os arquivos provavelmente serão bem diferentes em cada linha.
Exemplo:Information,12/12/2011 16:21:10,vmStatsProvider,256,General,"The ""vmStatsProvider"" is successfully initialized for this Virtual Machine. WMI namespace: ""root\cimv2""."
Information,12/12/2011 16:21:10,vmStatsProvider,258,Guest Library API,"The ""vmGuestLibrary"" is successfully initialized for this Virtual Machine."Geralmente neste tipo de comparação você usa um arquivo como "master" e faz a pesquisa no outro.
Me mande um exemplo do que você tem ai e como quer o resultado.
-
Bem...
O que eu preciso é o seguinte:
Eu ja tenho um arquivo com o caminho e o nome dos arquivos de uma determinada pasta(arquivo1.txt).
Preciso eventualmente gerar outro arquivo com essas mesmas informações(arquivo2.txt).
Comparar os dois e gerar um terceiro arquivo listando a diferença entre os dois.
O código para gerar os arquivos 1 e 2 eu tenho, só não estou conseguindo o condigo para comparação.
obs: se possível, ignorar as linhas em branco.
grato pelo interesse.
-
-
Sim...
Na verdade a comparação deve ser feita do arquivo2.txt com o arquivo1.txt, pois o arquivo1.txt é fixo(nuca vai variar), o 2 é que pode variar em tamanho, sempre pra maior.
Caso sejam exatamente do mesmo tamanho eles são iguais.
Caso o arquivo 2 seja maior, preciso listar o conteudo dessas linhas que estão a mais em um terceiro arquivo.
grato.
-
Eli,
Tente este em PowerShell (.ps1)
#Adaptado de http://www.myitforum.com/articles/1/view.asp?id=10092 $arrArquivo1 = get-content Arquivo1.txt $arrArquivo2 = get-content Arquivo2.txt New-Item "Arquivo3.txt" -Type file Foreach ($Linha in $arrArquivo2) { If (!($arrArquivo1 -contains $Linha)){Add-content "Arquivo3.txt" $Linha} }
Fábio de Paula Junior -
Bom, se é só comprar a linha 1 do arquivo2 com a senha 1 do arquivo1, será facil. Se tiver que pesquisar no arquivo1 cada linha do arquivo2 ai será mais dificil e bem mais demorado. Nada impossivel.
Veja se é algo assim que você quer:
'
' script: compara-linhas.vbs
' descricao: Faz a comparação da linha 1 do arquivo2 com a linha 1 do arquivo1
'
'
on error resume nextstrArquivo1 = "arquivo1.txt"
strArquivo2 = "arquivo2.txt"Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objArquivo1 = objFSO.OpenTextFile(strArquivo1, 1)
Set objArquivo2 = objFSO.OpenTextFile(strArquivo2, 1)nTotalLinha1 = UBound(Split(objFSO.OpenTextFile(strArquivo1).ReadAll, vbLf))
nTotalLinha2 = UBound(Split(objFSO.OpenTextFile(strArquivo2).ReadAll, vbLf))if ( nTotalLinha2 > nTotalLinha1 ) Then nTotal = nTotalLinha2 else nTotal = nTotalLinha1 End If
wscript.echo "[+] Comparando linhas dos arquivos..."
nLinha = 0
Do Until objArquivo2.AtEndOfStream
strLinha2 = objArquivo2.ReadLine
strLinha1 = objArquivo1.ReadLine
if err.number <> 0 Then strLinha1 = "" End IfnLinha = nLinha + 1
If strLinha2 <> strLinha1 Then
Wscript.echo nLinha & ";" & strLinha2
End If
Loop
wscript.echo "---------------------------------------------"
wscript.echo " Arquivo 1: ( " & nTotalLinha1 & " )"
wscript.echo " Arquivo 2: ( " & nTotalLinha2 & " )"- Sugerido como Resposta Fábio JrModerator sexta-feira, 16 de dezembro de 2011 13:27
- Marcado como Resposta Fábio JrModerator sexta-feira, 16 de dezembro de 2011 23:39
-
Bom, se é só comprar a linha 1 do arquivo2 com a senha 1 do arquivo1, será facil. Se tiver que pesquisar no arquivo1 cada linha do arquivo2 ai será mais dificil e bem mais demorado. Nada impossivel.
Veja se é algo assim que você quer:
'
' script: compara-linhas.vbs
' descricao: Faz a comparação da linha 1 do arquivo2 com a linha 1 do arquivo1
'
'
on error resume nextstrArquivo1 = "arquivo1.txt"
strArquivo2 = "arquivo2.txt"Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objArquivo1 = objFSO.OpenTextFile(strArquivo1, 1)
Set objArquivo2 = objFSO.OpenTextFile(strArquivo2, 1)nTotalLinha1 = UBound(Split(objFSO.OpenTextFile(strArquivo1).ReadAll, vbLf))
nTotalLinha2 = UBound(Split(objFSO.OpenTextFile(strArquivo2).ReadAll, vbLf))if ( nTotalLinha2 > nTotalLinha1 ) Then nTotal = nTotalLinha2 else nTotal = nTotalLinha1 End If
wscript.echo "[+] Comparando linhas dos arquivos..."
nLinha = 0
Do Until objArquivo2.AtEndOfStream
strLinha2 = objArquivo2.ReadLine
strLinha1 = objArquivo1.ReadLine
if err.number <> 0 Then strLinha1 = "" End IfnLinha = nLinha + 1
If strLinha2 <> strLinha1 Then
Wscript.echo nLinha & ";" & strLinha2
End If
Loop
wscript.echo "---------------------------------------------"
wscript.echo " Arquivo 1: ( " & nTotalLinha1 & " )"
wscript.echo " Arquivo 2: ( " & nTotalLinha2 & " )"
Pelo que vi do código acima ele compara as linhas... beleza.Vou tentar adaptar o resto a minha necessidade.
-
Tem como esse script fazer uma espécie de PROCV ?
Pegar a primeira linha do arquivo 1 e procurar o mesmo conteudo em todas as linhas do arquivo 2, se encontrar, OK, se não encontrar, dá um alerta ou escreve quem ele não encontrou em um LOG.
Alguem pode ajudar?