Usuário com melhor resposta
Comparacao de arquivos de texto

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.
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
-
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.- Sugerido como Resposta Rodrigo Campos Santana terça-feira, 7 de julho de 2009 21:01
- Marcado como Resposta Jacson Nonato quarta-feira, 8 de julho de 2009 12:32
- Marcado como Resposta Jacson Nonato quarta-feira, 8 de julho de 2009 12:32
-
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
-
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
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();
}
{
-
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.- Sugerido como Resposta Rodrigo Campos Santana terça-feira, 7 de julho de 2009 21:01
- Marcado como Resposta Jacson Nonato quarta-feira, 8 de julho de 2009 12:32
- Marcado como Resposta Jacson Nonato quarta-feira, 8 de julho de 2009 12:32
-
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
-
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
-
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
-
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] -
-
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. -
-