none
Comparacao de arquivos de texto RRS feed

  • Pergunta

  • Colegas, bom dia. 
    É a primeira vez que entro no fórum e preciso de uma ajuda se for possível. O que acontece:
    Tenho dois arquivos de texto, um é gerado por uma aplicação em .Net e outro numa aplicação VB6, a forma de geração destes arquivos está sendo migrada para .Net e preciso ter a certeza de que não existem diferenças entre eles.
    Não tenho muita experiencia com C# e .Net, esse é meu primeiro emprego,  mas a minha ideia inicial é concentrar esses dois arquivos num determinado diretorio LocalDisk C:\Comparacao_Arquivos por exemplo e declarar duas variaveis 'string' ( string msgVb6, msgNet; ) com o conteudo dos aquivos de texto e fazer uma verificação linha a linha nos dois aquivos, a começar pelo numero de linhas isto é, se o numero de linas for igual nos dois tudo bem caso não seria disparada uma mensagem dizendo que o numero de linhas é diferente. Após isso começaria a ser feita a comparacao linha a linha. Partindo do principio que o numero de linhas é igual nos dois aquivos, precisaria ser disparada uma Exception quando a linha x no arquivo .net for diferente da linha x no arquivo VB6.
    Basicamente eh nisso que eu estou enroscado !!!
    Estou usando Visual Studio 2005
    Caso alguem conheca uma boa forma de seu utilizar aquelas classes de Test do visual studio seria uma boa.

    Galera agradeco a atencao de voces
    Caso alguem possa me ajudar agradeco pra caramba.
    Valleu Abs.
    terça-feira, 7 de julho de 2009 14:31

Respostas

  • Olá Rodrigo, boa tarde.
    Kara muito obrigado pela dica.
    Estive verificando e realmente deu certo, pois o conteudo dos arquivos de texto ja está sendo lido e mostrado na tela.
    Gostaria apenas de saber como faço para comparar o conteudo dos dois arquivos linha a linha e disparar uma exceção quando a linha X no arquivo net.INP for != da linha X do arquivo vb.INP
    Por hora meu codigo está mostrando na tela o conteudo dos arquivos. Como segue:

    using

     

    System;
    using System.IO;
    using System.Collections;

    namespace

     

    Leitura_Arquivos_Texto_Net_VB6_CSharp
    {

    ///
    <summary>
    /// Ler um arquivo de texto de uma msgSwift usando o namespace System.IO
    /// </summary>

    class
    Class1

    {

    static
    void Main(string[] args)
    {
    StreamReader objReader_Net = new StreamReader(@"c:\TestMsgSwift\Comparacao_Arquivos\net.INP");
    string Linha_Arquivo_Net = "";
    ArrayList array_Texto_Arquivo_Net = new ArrayList();
    while (Linha_Arquivo_Net != null)
    {
    Linha_Arquivo_Net = objReader_Net.ReadLine();
    if (Linha_Arquivo_Net != null)
    array_Texto_Arquivo_Net.Add(Linha_Arquivo_Net);
    }

    objReader_Net.Close();

    foreach
    (string str_Mostra_Texto_Net in array_Texto_Arquivo_Net)
    Console.WriteLine(str_Mostra_Texto_Net);
    Console.ReadLine();

     

     

     

    // Leitura do arquivo VB6
    StreamReader objReader_VB6 = new StreamReader(@"c:\TestMsgSwift\Comparacao_Arquivos\vb.INP");
    string Linha_Arquivo_VB6 = "";
    ArrayList array_Texto_Arquivo_VB6 = new ArrayList();
    while (Linha_Arquivo_VB6 != null)
    {
    Linha_Arquivo_VB6 = objReader_VB6.ReadLine();
    if (Linha_Arquivo_VB6 != null)
    array_Texto_Arquivo_VB6.Add(Linha_Arquivo_VB6);
    }

    objReader_VB6.Close();

    foreach
    (string str_Mostra_Texto_VB6 in array_Texto_Arquivo_VB6)
    Console.WriteLine(str_Mostra_Texto_VB6);
    Console.ReadLine();
    }

    }

    }


    Caso você possa me ajudar nesse ultimo detalhe, agradeço.
    Abs.
    Jacson 
     
    • Marcado como Resposta Jacson Nonato quarta-feira, 8 de julho de 2009 12:32
    terça-feira, 7 de julho de 2009 20:47
  • Boa tarde.

    De uma olha nesse artigo.

    http://support.microsoft.com/default.aspx/kb/306777/pt-br

    Observe que o conteúdo do arquivo é lido linha por linha através do método ReadLine.
    Assim você pode atribuit esse valor para uma string e usar o método de comparação Equals().
    Dessa forma você pode testar o arquivo linha por linha.


    Att, Rodrigo Santana.
    terça-feira, 7 de julho de 2009 19:31
  • Uma exceção é levantada quando acontece algum erro.
    No caso do Equals() para você comparar as strings você pode usar o próprio retorno do método. (true ou false)

    if (stringVB.Equals(stringCSharp))
    {
       //Mensagem qualquer
    }
    else
    {
      //Outra Mensagem
    }


    Att, Rodrigo Santana.
    • Marcado como Resposta Jacson Nonato quarta-feira, 8 de julho de 2009 12:32
    terça-feira, 7 de julho de 2009 21:00
  • Valleu Rodrigo.
    Fiz e deu certo.

    Muito obrigado pela ajuda.

    Té +
    • Marcado como Resposta Jacson Nonato quarta-feira, 8 de julho de 2009 12:32
    terça-feira, 7 de julho de 2009 22:10

Todas as Respostas

  • Colegas, bom dia. 
    É a primeira vez que entro no fórum e preciso de uma ajuda se for possível. O que acontece:
    Tenho dois arquivos de texto, um é gerado por uma aplicação em .Net e outro numa aplicação VB6, a forma de geração destes arquivos está sendo migrada para .Net e preciso ter a certeza de que não existem diferenças entre eles.
    Não tenho muita experiencia com C# e .Net, esse é meu primeiro emprego,  mas a minha ideia inicial é concentrar esses dois arquivos num determinado diretorio LocalDisk C:\Comparacao_Arquivos por exemplo e declarar duas variaveis 'string' ( string msgVb6, msgNet; ) com o conteudo dos aquivos de texto e fazer uma verificação linha a linha nos dois aquivos, a começar pelo numero de linhas isto é, se o numero de linas for igual nos dois tudo bem caso não seria disparada uma mensagem dizendo que o numero de linhas é diferente. Após isso começaria a ser feita a comparacao linha a linha. Partindo do principio que o numero de linhas é igual nos dois aquivos, precisaria ser disparada uma Exception quando a linha x no arquivo .net for diferente da linha x no arquivo VB6.
    Basicamente eh nisso que eu estou enroscado !!!
    Estou usando Visual Studio 2005
    Caso alguem conheca uma boa forma de seu utilizar aquelas classes de Test do visual studio seria uma boa.

    Galera agradeco a atencao de voces
    Caso alguem possa me ajudar agradeco pra caramba.
    Valleu Abs.

    public

     

    void TestMethod1()

     

    // metodo mostra como comparar os valores das variaveis que guardam o conteudo de texto 

    string msgVB6 = @"C:\TestMsgSwift\Comparacao_Arquivos\vb.INP";

     

     

    string msgNet = @"C:\TestMsgSwift\Comparacao_Arquivos\net.INP";

     

     

    if (msgVB6.Equals(msgNet))

     

     

    Console.WriteLine("As duas strings são iguais");

     

     

    else

     

    Console.WriteLine("As duas strings são diferentes");

     

     

    Console.ReadKey();

     

    Gostaria de algo que fizesse uma comparacao mais completa entre os arquivos.

    }

    {

     


    terça-feira, 7 de julho de 2009 18:40
  • Boa tarde.

    De uma olha nesse artigo.

    http://support.microsoft.com/default.aspx/kb/306777/pt-br

    Observe que o conteúdo do arquivo é lido linha por linha através do método ReadLine.
    Assim você pode atribuit esse valor para uma string e usar o método de comparação Equals().
    Dessa forma você pode testar o arquivo linha por linha.


    Att, Rodrigo Santana.
    terça-feira, 7 de julho de 2009 19:31
  • Olá Rodrigo, boa tarde.
    Kara muito obrigado pela dica.
    Estive verificando e realmente deu certo, pois o conteudo dos arquivos de texto ja está sendo lido e mostrado na tela.
    Gostaria apenas de saber como faço para comparar o conteudo dos dois arquivos linha a linha e disparar uma exceção quando a linha X no arquivo net.INP for != da linha X do arquivo vb.INP
    Por hora meu codigo está mostrando na tela o conteudo dos arquivos. Como segue:

    using

     

    System;
    using System.IO;
    using System.Collections;

    namespace

     

    Leitura_Arquivos_Texto_Net_VB6_CSharp
    {

    ///
    <summary>
    /// Ler um arquivo de texto de uma msgSwift usando o namespace System.IO
    /// </summary>

    class
    Class1

    {

    static
    void Main(string[] args)
    {
    StreamReader objReader_Net = new StreamReader(@"c:\TestMsgSwift\Comparacao_Arquivos\net.INP");
    string Linha_Arquivo_Net = "";
    ArrayList array_Texto_Arquivo_Net = new ArrayList();
    while (Linha_Arquivo_Net != null)
    {
    Linha_Arquivo_Net = objReader_Net.ReadLine();
    if (Linha_Arquivo_Net != null)
    array_Texto_Arquivo_Net.Add(Linha_Arquivo_Net);
    }

    objReader_Net.Close();

    foreach
    (string str_Mostra_Texto_Net in array_Texto_Arquivo_Net)
    Console.WriteLine(str_Mostra_Texto_Net);
    Console.ReadLine();

     

     

     

    // Leitura do arquivo VB6
    StreamReader objReader_VB6 = new StreamReader(@"c:\TestMsgSwift\Comparacao_Arquivos\vb.INP");
    string Linha_Arquivo_VB6 = "";
    ArrayList array_Texto_Arquivo_VB6 = new ArrayList();
    while (Linha_Arquivo_VB6 != null)
    {
    Linha_Arquivo_VB6 = objReader_VB6.ReadLine();
    if (Linha_Arquivo_VB6 != null)
    array_Texto_Arquivo_VB6.Add(Linha_Arquivo_VB6);
    }

    objReader_VB6.Close();

    foreach
    (string str_Mostra_Texto_VB6 in array_Texto_Arquivo_VB6)
    Console.WriteLine(str_Mostra_Texto_VB6);
    Console.ReadLine();
    }

    }

    }


    Caso você possa me ajudar nesse ultimo detalhe, agradeço.
    Abs.
    Jacson 
     
    • Marcado como Resposta Jacson Nonato quarta-feira, 8 de julho de 2009 12:32
    terça-feira, 7 de julho de 2009 20:47
  • Uma exceção é levantada quando acontece algum erro.
    No caso do Equals() para você comparar as strings você pode usar o próprio retorno do método. (true ou false)

    if (stringVB.Equals(stringCSharp))
    {
       //Mensagem qualquer
    }
    else
    {
      //Outra Mensagem
    }


    Att, Rodrigo Santana.
    • Marcado como Resposta Jacson Nonato quarta-feira, 8 de julho de 2009 12:32
    terça-feira, 7 de julho de 2009 21:00
  • Valleu Rodrigo.
    Fiz e deu certo.

    Muito obrigado pela ajuda.

    Té +
    • Marcado como Resposta Jacson Nonato quarta-feira, 8 de julho de 2009 12:32
    terça-feira, 7 de julho de 2009 22:10
  • Jacson,

    Se mesmo assim, voce quer disparar uma exceção, faça

    if (.....
        throw new Exception("deu erro");

    Não esqueçendo de tratá-la devidamente em bloco try..catch

    try
    {
           MetodoQueDisparaExcecao();
    }
    catch(Exception ex)
    {
           // msg de erro
    }

    []s
    Robson Castilho - MCTS .Net 2.0 Windows/Web Applications [Se o post foi útil, não esqueça de marcá-lo. Obrigado]
    quarta-feira, 8 de julho de 2009 00:01
  • Bacana. Depois marca como resposta para servir de referência para outros usuários.

    Abraços.

    Att, Rodrigo Santana.
    quarta-feira, 8 de julho de 2009 00:55
  • Opa Beleza.

    Então kara, fiz o que o Robson Santana me disse e deu certo, acredito que nesse primeiro momento eu não vou precisar trabalhar com Exception.
    Muito provavelmente eu utilize o que vc me falou mais pra frente, vou guardar para usar concerteza.


    Brigadão.

    Valleu pela ajuda.

    quarta-feira, 8 de julho de 2009 12:37
  • Em tempo... Robsou sou eu, Santana é o Rodrigo :)

    []s
    Robson Castilho - MCTS .Net 2.0 Windows/Web Applications [Se o post foi útil, não esqueça de marcá-lo. Obrigado]
    quarta-feira, 8 de julho de 2009 17:44
  • Ops ,,,  foi mal kara.
    Não vai se repetir.

    Abraço.
    quarta-feira, 8 de julho de 2009 20:48