Comparer le contenu de deux fichier txt(ligne par ligne)

Signaler
Messages postés
5
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
1 avril 2008
-
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
-
Bonjour,
je veux comparer le contenu de deux fichier1.txt et fichier2.txt pour obtenir le resultat dans un fichier3.txt
j'ai reussi a compter le nombre de ligne par fichier.
mon sousci est de comparer chaque ligne dans le fichier1 avec toutes les lignes du fichier2 si elle existe je fais rien et si elle n'existe pas je dois la copier dans le fichier3 (dans un seul sens).

Merci d'avance pour vos réponses et aides.
(en c# sinon en vbs)
Karim

8 réponses

Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
36
Si tu veux tu peux le faire en powershell, plus performant que VBS

http://www.microsoft.com/technet/scriptcenter/topics/msh/cmdlets/compare-object.mspx

Bon coding
Messages postés
5
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
1 avril 2008

Merci pour le réponse , mais je cherche vraiment en c#
le pb que j'arrive bien a compter le nombre de ligne de chaque fichier, mon grand souci est de pouvoir comprer le contenu de chaque ligne du fichier 1 avec ttes les lignes du fichier2 .

Karim
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
36
Messages postés
5
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
1 avril 2008

Bonjour nhervagault,
Merci pour les liens mais ca ne marche pas!

voici une partie de mon code pour pouvoir m'aider.

StreamReader fileReader2 = new StreamReader("c:\\fichier2.txt");
   StreamReader fileReader1 = new StreamReader("c:\\fichier1.txt");
   TextWriter fileWriter3 = new StreamWriter("c:\\fichier3.txt");
   while((findLine=fileReader1.ReadLine())!=null)
   {
    ++nb_line;
   }
    //StreamReader fileReader2 = new StreamReader("c:\\eqdw10010.txt");
    //TextWriter fileWriter3 = new StreamWriter("c:\\test3.txt");
   while((findLine2 = fileReader2.ReadLine())!=null)
   {
    ++nb_line2;
   }


   Console.WriteLine("le nombre de ligne file1  est : " +nb_line2);
   Console.WriteLine("le nombre de ligne file2 est : " +nb_line);
   
   fileReader1.Close();
   //fileWriter3.Close();
   fileReader2.Close();
   
   
   //La partie que je ne maitrise pas...en bas
   //comment faire pour comparer chaque ligne du fichier1 avec toute les lignes du fichier2
   //si la lignefichier1 n'existe pas dans le fichier2 je la copier dans fichier3 sinon je fai rien
   
   for (i=0;i<nb_line2;i++)
   //{
    while((findLine=fileReader1.ReadLine())!=null)
    {
     for (i=0;i<nb_line2;i++)
     //findLine4[i]=findLine;


     // if (findLine4[i]!=findLine)
     //{    
      //findLine=fileReader.ReadLine();
      
      fileWriter3.WriteLine(findLine);
     //}
     //else
      //fileWriter3.WriteLine(findLine);
     i++;
    }
   //}
   fileWriter3.Close();
   fileReader.Close();
   //fileWriter3.Close();
   fileReader2.Close();
Messages postés
5
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
1 avril 2008

Bonjour nhervagault,
Merci pour les liens mais ca ne marche pas!

voici une partie de mon code pour pouvoir m'aider.

StreamReader fileReader2 = new StreamReader("c:\\fichier2.txt");
   StreamReader fileReader1 = new StreamReader("c:\\fichier1.txt");
   TextWriter fileWriter3 = new StreamWriter("c:\\fichier3.txt");
   while((findLine=fileReader1.ReadLine())!=null)
   {
    ++nb_line;
   }

   
   while((findLine2 = fileReader2.ReadLine())!=null)
   {
    ++nb_line2;
   }


   Console.WriteLine("le nombre de ligne file1  est : " +nb_line2);
   Console.WriteLine("le nombre de ligne file2 est : " +nb_line);
   
   fileReader1.Close();
   //fileWriter3.Close();
   fileReader2.Close();
   
   
   //La partie que je ne maitrise pas...en bas
   //comment faire pour comparer chaque ligne du fichier1 avec toute les lignes du fichier2
   //si la lignefichier1 n'existe pas dans le fichier2 je la copier dans fichier3 sinon je fai rien
   
   for (i=0;i<nb_line2;i++)
   //{
    while((findLine=fileReader1.ReadLine())!=null)
    {
     for (i=0;i<nb_line2;i++)
     //findLine4[i]=findLine;


     // if (findLine4[i]!=findLine)
     //{    
      //findLine=fileReader.ReadLine();
      
      fileWriter3.WriteLine(findLine);
     //}
     //else
      //fileWriter3.WriteLine(findLine);
     i++;
    }
   //}
   fileWriter3.Close();
   fileReader.Close();
   //fileWriter3.Close();
   fileReader2.Close();
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
36
Peux-tu préciser ton besoin.

Je pense que si tu charges des deux fichiers dans une collection,
et que le troisieme fichier est une collection aussi tu devrais y arriver

Exemple en algo grossier

List<String> contenu1 = chargementFichier(filename1);
List<String> contenu2 = chargementFichier(filename2);

Ensuite

if (contenu1.count == contenu2.count) --> meme nombre de ligne

Ensuite

parcours des collections
foreach (string ligne in contenu1)
{
if (contenu2.contains(ligne)) --> ok
contenu3.add(ligne)
sinon
A toi de gérer je ne connais pas ton besoin

}

ecriturefichierresultat(contenu3, filename3)

Apres si l'ordre est important utilise des sortedcollection

Cette methode, te permet d'etre découpler des fichiers au passage

Bon courage
Messages postés
5
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
1 avril 2008

mon besoin c'est apartir de deux fichier txt (fichier1 et fichier2) de chercher chaque ligne du fichier 1 dans le fichier 2
le permier ponit : fichier1 et fichier 2 ont pas le meme nombre de ligne.
le sens de recherche est important.
le besoin c'est d'obtenir les lignes du fichier1 qu'il n'existe pas dans le fichier2 .

je te remercie pour tes réponses.

Karim
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
36
En utilisant des collections triées ca doit repondre à ton problème.
Aprs tu as peut etre un identifiant sur chaque ligne c'est encore plus simple je pense.