Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1759 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  comparaison de deux fichiers

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

comparaison de deux fichiers

n°1376365
lei lyrken
Posté le 28-05-2006 à 22:03:58  profilanswer
 

Bonjour bonjour, bon je galere un peu en c++, alors je demande de l'aide vu que jai pas vraiment trouver d'exemple pouvant m'aider sur le net.
 
je dois ecrire deux fonction pour comparer des fichiers, une en utilisant la commande strcmp et l'autre avec la commande diff (sous linux le tout)
 
la premiere fonction, en fait j'ai pas pu la testé (pas linux sur ce pc) donc dite si ca tient la route svp.

Code :
  1. bool fichiers_identiques_strchr(string fichier1, string fichier2)
  2. {
  3. bool equal=1;
  4. std::ifstream fich1( fichier1 );
  5. std::ifstream fich1( fichier2 );
  6. if (fich1 && fich2 )
  7.  {
  8.  std::string lignef1;
  9.  std::string lignef2;
  10.  while ( std::getline( fich1, lignef1) && std::getline( fich2, lignef2) && equal)
  11.   {
  12.   if (strcmp(lignef1,lignef2)!=0
  13.    {
  14.    equal = 0;
  15.    }
  16.   }
  17.  }
  18. return equal;
  19. }

jme suis inspiré de ce lien.
 
 
Et pour le DIFF je dois avouer que j'en ai aucune idée. J'ai pas trouvé d'exemple concret. Donc je suis ouvert a tte proposition.
 
 
 
Merci d'avance en esperant qu'on puisse m'aider, je vais continué a cherché de mon coté.

mood
Publicité
Posté le 28-05-2006 à 22:03:58  profilanswer
 

n°1376371
Sve@r
Posté le 28-05-2006 à 22:22:43  profilanswer
 

lei lyrken a écrit :

Bonjour bonjour, bon je galere un peu en c++, alors je demande de l'aide vu que jai pas vraiment trouver d'exemple pouvant m'aider sur le net.
 
je dois ecrire deux fonction pour comparer des fichiers, une en utilisant la commande strcmp et l'autre avec la commande diff (sous linux le tout)
 
la premiere fonction, en fait j'ai pas pu la testé (pas linux sur ce pc) donc dite si ca tient la route svp.

Code :
  1. bool fichiers_identiques_strchr(string fichier1, string fichier2)
  2. {
  3. bool equal=1;
  4. std::ifstream fich1( fichier1 );
  5. std::ifstream fich1( fichier2 );
  6. if (fich1 && fich2 )
  7.  {
  8.  std::string lignef1;
  9.  std::string lignef2;
  10.  while ( std::getline( fich1, lignef1) && std::getline( fich2, lignef2) && equal)
  11.   {
  12.   if (strcmp(lignef1,lignef2)!=0
  13.    {
  14.    equal = 0;
  15.    }
  16.   }
  17.  }
  18. return equal;
  19. }

jme suis inspiré de ce lien.
Merci d'avance en esperant qu'on puisse m'aider, je vais continué a cherché de mon coté.


 
Ligne 12, il te manque une parenthèse fermante
Personnellement j'utiliserais les mots clefs "false" et "true" plutôt que "0" et "1" pour une question de lisibilité
Sinon à vue de nez, il a l'air correct. Tu lis les 2 fichiers en parallèle ligne par ligne et tu compares chaque ligne donc c'est good
 

lei lyrken a écrit :

Et pour le DIFF je dois avouer que j'en ai aucune idée. J'ai pas trouvé d'exemple concret. Donc je suis ouvert a tte proposition.


Je suis un peu étonné qu'on te fasse utiliser une commande externe pour ton programme.
La seule chose qu'il me vienne à l'idée, c'est de faire un FILE *flux=popen("diff fic1 fic2", "r" ) et voir si un fgetc(flux) renvoie "EOF" => oui => identiques, non => différents
 
 
 
 


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1376373
skelter
Posté le 28-05-2006 à 22:27:32  profilanswer
 

std::ifstream fich1( fichier1 );
=>
std::ifstream fich1( fichier1.c_str() );
 
strcmp(lignef1,lignef2)
=>
strcmp(lignef1.c_str(),lignef2.c_str())
 
mais pourquoi ne pas utiliser l'operateur == ?
 
aussi ca se fait en une instruction avec std::equal
 

Code :
  1. if( fich1 && fich2 )
  2. {
  3.     equal = std::equal(std::istream_iterator<char>(fich1),
  4.                              std::istream_iterator<char>(),
  5.                              std::istream_iterator<char>(fich2));
  6. }

n°1376403
lei lyrken
Posté le 29-05-2006 à 00:21:51  profilanswer
 

Citation :

Je suis un peu étonné qu'on te fasse utiliser une commande externe pour ton programme.
La seule chose qu'il me vienne à l'idée, c'est de faire un FILE *flux=popen("diff fic1 fic2", "r" ) et voir si un fgetc(flux) renvoie "EOF" => oui => identiques, non => différents

en fait c plutot pour un cours de systeme :p
merci en tout cas pour le DIFF jvais voir ce que je peu faire
 

Citation :

mais pourquoi ne pas utiliser l'operateur == ?
 
aussi ca se fait en une instruction avec std::equal

paske je suis une bouse en c++ et donc j'ai trouvé strcmp, j'utilise strcmp ^^. Merci en tout cas pour le code

Message cité 1 fois
Message édité par lei lyrken le 29-05-2006 à 00:22:38
n°1376465
SBAM
Best recording of rach 3.
Posté le 29-05-2006 à 10:29:35  profilanswer
 

lei lyrken a écrit :

en fait c plutot pour un cours de systeme :p
merci en tout cas pour le DIFF jvais voir ce que je peu faire


Regarde du cote de : execvp, wait

n°1376566
breizhbugs
Posté le 29-05-2006 à 11:43:57  profilanswer
 

lei lyrken a écrit :


Code :
  1. bool fichiers_identiques_strchr(string fichier1, string fichier2)
  2. {
  3. bool equal=1;
  4. std::ifstream fich1( fichier1 );
  5. std::ifstream fich1( fichier2 );
  6. if (fich1 && fich2 )
  7. {
  8.  std::string lignef1;
  9.  std::string lignef2;
  10.  while ( std::getline( fich1, lignef1) && std::getline( fich2, lignef2) && equal)
  11.  {
  12.   if (strcmp(lignef1,lignef2)!=0)
  13.   {
  14.    equal = 0;
  15.   }
  16.  }
  17. }
  18. return equal;
  19. }




Erreur de logique selon moi:
Si l'un des fichiers est plus volumineux que l'autre, le test s'arrete a la fin du fichier le plus court et s'ils ont ete identiques jusque la renvoie vrai alors que cela devrait renvoyer faux, non?  


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  comparaison de deux fichiers

 

Sujets relatifs
comparaison de fichiers textes avec des tableaux en mémoire.Cryptage d'un mot de passe puis comparaison
C++ comment travailler sur des fichiers .txt (débutant)Fusionner des fichiers texte et les envoyer dans une base SQL
Comparaison de 2 fichiersComparaison d edeux fichiers, formatage
comparaison de deux fichiers!! SOSShell - comparaison de fichiers de deux répertoires
[MSDOS]Comparaison de fichiers sous dos (comp)Comparaison de 2 fichiers ?
Plus de sujets relatifs à : comparaison de deux fichiers


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR