none
Comparar conteudo de arquivos texto. RRS feed

  • 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.
    domingo, 11 de dezembro de 2011 14:52

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 next

    strArquivo1 = "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 If

      nLinha = 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 & " )"

     

    quarta-feira, 14 de dezembro de 2011 11:07

Todas as Respostas

  • Tem o link dos lugares onde você viu algum código?
    Fábio de Paula Junior
    segunda-feira, 12 de dezembro de 2011 11:51
    Moderador
  • 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
    segunda-feira, 12 de dezembro de 2011 15:54
    Moderador
  • Fabio,

    Já vi alguns aplicativos com este recurso, mas realmente preciso do código, pois vou comparar logs em maquinas e receber a resposta dessa forma.

    segunda-feira, 12 de dezembro de 2011 17:49
  • 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.

    segunda-feira, 12 de dezembro de 2011 18:50
  • 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.

     

    segunda-feira, 12 de dezembro de 2011 23:39
  • Então você quer comparar a linha 1 do arquivo1.txt com a linha 1 do arquivo2.txt e saber se tem diferenças?
    terça-feira, 13 de dezembro de 2011 10:09
  • 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.

    terça-feira, 13 de dezembro de 2011 23:24
  • 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
    quarta-feira, 14 de dezembro de 2011 10:39
    Moderador
  • 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 next

    strArquivo1 = "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 If

      nLinha = 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 & " )"

     

    quarta-feira, 14 de dezembro de 2011 11:07
  • 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 next

    strArquivo1 = "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 If

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

     

    quarta-feira, 14 de dezembro de 2011 22:40
  • 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?

    quarta-feira, 31 de agosto de 2016 17:03