Comparaison de 2 fichier,AU SECOUUUUURS!!!

ylovechichi Messages postés 41 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 26 septembre 2005 - 12 juin 2005 à 16:30
ylovechichi Messages postés 41 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 26 septembre 2005 - 14 juin 2005 à 18:26
slt tout le monde,je voudrais faire une comparaison entre 2 fichiers.bon je vais vous expliquer cke je veux exactement. j'ai 2 fichiers ville1 et ville2 je lai ouvre en lecture je parcours les valeurs du fichier1 et fichier2 si je trouve une valeur differente je stock ds un autre fichier ke j ouvre en écriture la valeur du fichier1.

par exemple:
fichier ville1 :16y 56 98p 1k
fichier ville2 :78a 9s 2y 56
fichier comp :16y 98p 1k
le fichier comp est le résultat ke je voudrais avoir

merci d'avance

int comparer(char trad_ville1[10],char trad_ville2[10])
{
int i,j;

cout<<"comparaison"<<endl;
ofstream fichier_comp("comparaison.txt",ios::app);
ifstream fichier_ville1("ville1.txt");
if (!fichier_ville1)
{
cerr << "Impossible d'ouvrir le fichier!" << endl;
return (-1);
}

ifstream fichier_ville2("ville2.txt");
if (!fichier_ville2)
{
cerr << "Impossible d'ouvrir le fichier!" << endl;
return (-1);
}

while (!fichier_ville1.eof())
{
fichier_ville1>>trad_ville1;

while (!fichier_ville2.eof())
{
fichier_ville2>>trad_ville2;

if (trad_ville1[i]!=trad_ville2[j])
{
j++;
cout<<trad_ville1[i];
fichier_comp<<trad_ville1;
}

i++;

}
}

fichier_ville1.close();
fichier_ville2.close();
fichier_comp.close();

}

merci d'avance

20 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
12 juin 2005 à 16:45
Je comprend meme pas ce que tu veux faire.

Ton fichier comp, il devrait pas plutot contenir ca:



fichier ville1 :16y 56 98p 1k

fichier ville2 :78a 9s 2y 56

fichier comp :16y 98p 1k 78a 9s 2y



explique toi mieux, ton programme, il a un pb ? j'ai la flemme de regarder, dis nous ce qu'il ne va pas.


Dans tous les cas, c'est étonnant ton code la:

while (!fichier_ville1.eof())

{

fichier_ville1>>trad_ville1;



while (!fichier_ville2.eof())

{

fichier_ville2>>trad_ville2;



if (trad_ville1[i]!=trad_ville2[j]) // <========== tu fais quoi la ? tu veux tester quoi ?

{

j++;

cout<<trad_ville1[i];

fichier_comp<<trad_ville1;

}



i++;



}

}
0
ylovechichi Messages postés 41 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 26 septembre 2005
12 juin 2005 à 17:15
slt , mnt j modifié 1 peu mon code.cki ne marche pas c k il me affiche tout simplement les données ke j'ai stocké ds le fichier ville_1

fichier_ville1 ::16y 56 98p 1k
fichier_ville2 :78a 9s 2y 56
le résultat sera ds fichier comp :16y 98p 1k
seulement les valeurs différente du fichier_ville1.

j espere ke vous comprenez mieux mon code.merci

int comparer()
{
int i,j,k;
cout<<"comparaison"<<endl;
ofstream fichier_comp("comparaison2.txt",ios::out);
ifstream fichier_ville1("ville1.txt",ios::in);
if (!fichier_ville1)
{
cerr << "Impossible d'ouvrir le fichier!" << endl;
return (-1);
}


ifstream fichier_ville2("ville2.txt",ios::in);
if (!fichier_ville2)
{
cerr << "Impossible d'ouvrir le fichier!" << endl;
return (-1);
}


while (!fichier_ville1.eof())


{
i=0;
fichier_ville1>>trad_ville1;
while ( !fichier_ville2.eof() )
{
j=0;
fichier_ville2>>trad_ville2;


if (trad_ville1[i]!=trad_ville2[j]) /*c ici ke je fais la comparaison entre les valeurs du fichier_ville1 et fichier_ville2*/
j++;
}


cout<<trad_ville1<<"\t";
fichier_comp<<trad_ville1<<"\t";
i++;


}
fichier_comp.close();
fichier_ville1.close();
fichier_ville2.close();


}
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
12 juin 2005 à 18:05
Ta la fonction ou tu fais la comparaison ne peux pas marcher.

if (trad_ville1[i]!=trad_ville2[j]) // ici tu compares des caractères et non les chaines comme tu veux le faire.



Personnellement je m'y prendrais autrement.

Déclares un vector ou tu stokes tous les éléments de fichiers 2.



#include <vector>



...



std::vector< std::string > file2;

std::string tmp;

while ( !fichier_ville2.eof() )

{

fichier_ville2 >> tmp;

file2.push_back(tmp);

}



// apres tu passes en revue chaque élément du fichier 1:

std::vector<std::string>::iterator it;

while (!fichier_ville1.eof() )

{

fichier_ville1 >> tmp;

it = file2.begin();

while ( (tmp != *it) && (it != file2.end())

it ++;



if ( it ==
file2.end()) fichier_comp << tmp <<" "; // si il n'a pas
été trouvé.

// tu mets ce que tu veux comme séparateur

}



Bon j'ai pas testé, mais ca doit pas etre loin de fonctionner.

Aller ++
0
ylovechichi Messages postés 41 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 26 septembre 2005
12 juin 2005 à 19:44
#include <vector>

...

std::vector< std::string > file2;
std::string tmp;
while ( !fichier_ville2.eof() )
{
fichier_ville2 >> tmp;
file2.push_back(tmp); //je comprends pas bien cette ligne
}

// apres tu passes en revue chaque élément du fichier 1:
std::vector<std::string>::iterator it;
while (!fichier_ville1.eof() )
{
fichier_ville1 >> tmp;
it = file2.begin();
while ( (tmp != *it) && (it != file2.end())
it ++;

if ( it == file2.end()) fichier_comp << tmp <<" "; // si il n'a pas été trouvé.
// tu mets ce que tu veux comme séparateur
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
12 juin 2005 à 20:04
while ( !fichier_ville2.eof() )

{

fichier_ville2 >> tmp;


file2.push_back(tmp); //je
comprends pas bien cette ligne

}



quand tu fais fichier_ville2 >> tmp

il prend la chaine de caratère a partir de la position courante jusqu'au prochain espace.

16y 56 98p 1k

donc la première fois, fichier_ville2 >> tmp met en fait 16y dans tmp



file2.push_back(tmp) ne fait qu'ajouter la chaine contenu dans tmp dans le vector.
0
ylovechichi Messages postés 41 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 26 septembre 2005
12 juin 2005 à 20:27
merci bcp mais j 'ai 10 erreurs je ne sais pas comment les résoudre .
voici le code:

int comparer()
{
int i,j;



cout<<"comparaison"<<endl;
ofstream fichier_comp("comparaison2.txt",ios::out|ios::app);
ifstream fichier_ville1("ville1.txt",ios::in);
if (!fichier_ville1)
{
cerr << "Impossible d'ouvrir le fichier!" << endl;
return (-1);
}


ifstream fichier_ville2("ville2.txt",ios::in);
if (!fichier_ville2)
{
cerr << "Impossible d'ouvrir le fichier!" << endl;
return (-1);
}


std::vector< std::string > file2;
std::string tmp;
while ( !fichier_ville2.eof() )
{
fichier_ville2 >> tmp; // c ici k il ya erreur
file2.push_back(tmp);
}


std::vector<std::string>::iterator it;
while (!fichier_ville1.eof() )
{
fichier_ville1 >> tmp; // meme ici
it = file2.begin();
while ( (tmp != *it) && (it != file2.end()) // ici ossi
it ++;

if ( it == file2.end()) fichier_comp << tmp <<" "; }



fichier_comp.close();
fichier_ville1.close();
fichier_ville2.close();


}


merci pr votre aide
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
12 juin 2005 à 21:23
Si tu l'as pas mis, il faut

#include <string>

en entete aussi.
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
12 juin 2005 à 21:34
En fait, y avait quelques erreurs qui trainaient, voila une version correct:



int comparer()

{

int i,j;





cout<<"comparaison"<<endl;

ofstream fichier_comp("comparaison2.txt",ios::out|ios::app);

ifstream fichier_ville1("tmp1.txt",ios::in);

if (!fichier_ville1)

{

cerr << "Impossible d'ouvrir le fichier!" << endl;

return (-1);

}



ifstream fichier_ville2("tmp2.txt",ios::in);

if (!fichier_ville2)

{

cerr << "Impossible d'ouvrir le fichier!" << endl;

return (-1);

}



std::vector< std::string > file2;

std::string tmp;

while ( !fichier_ville2.eof() )

{


fichier_ville2 >> tmp; // c ici k il ya erreur

file2.push_back(tmp);

}



std::vector<std::string>::iterator it;



fichier_ville1 >> tmp;

while (!fichier_ville1.eof() )

{

it = file2.begin();

while ((it != file2.end()) && (tmp != *it))

it ++;




if ( it == file2.end()) fichier_comp << tmp <<" ";

fichier_ville1 >> tmp;

}





fichier_comp.close();

fichier_ville1.close();

fichier_ville2.close();



}



Change les noms de fichier par contre.
0
ylovechichi Messages postés 41 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 26 septembre 2005
12 juin 2005 à 22:46
mnt bcp mieux 4 erreurs . voici l 'erreur: c la meme erreur

binary '>>' : no operator defined which takes a right-hand operand of type 'class std::basic_string<char,struct std::char_traits<char>,class st

d::allocator<char> >' (or there is no acceptable conversion)
0
ylovechichi Messages postés 41 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 26 septembre 2005
12 juin 2005 à 22:49
la ligne ou il y a erreur :
fichier_ville2 >> tmp;
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
12 juin 2005 à 23:32
vérifie que toute ces entetes sont déclarés:

#include <string>

#include

#include <vector>

#include <fstream>



si ca marche toujours pas, repost ton programme ici:
0
ylovechichi Messages postés 41 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 26 septembre 2005
13 juin 2005 à 00:01
j vérifié ca existe.
eske le pb é dû a cause des valeurs ki sont stokés ds les 2 fichiers sont des char?????????

remercie
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
13 juin 2005 à 00:09
Chez moi ca marche très bien, donc ... tu compiles avec quoi ?

Tu peux pas poster ton programme entier, il est trop long ?
0
ylovechichi Messages postés 41 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 26 septembre 2005
13 juin 2005 à 00:38
je compile avec visual c++
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
13 juin 2005 à 00:46
repost ton prgm ...
0
ylovechichi Messages postés 41 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 26 septembre 2005
13 juin 2005 à 00:59
#include<conio.h>
#include<stdio.h>
#include <string>
#include
#include <vector>
#include <fstream.h>


char trad_ville1[10],trad_ville2[10];


char trad_indicatif_ville1(char trad_ville1[10])
{
int i=0,quit=0;
char key;


ofstream fichier_ville1("ville1.txt",ios::out|ios::app);
if (!fichier_ville1) {
cerr << "Impossible d'ouvrir le fichier!" <<


endl;
return (-1);
}
do
{


cout<<"Donnez un indicatif: ";
cin>>trad_ville1;
fichier_ville1<<trad_ville1 <<"\t" ;


printf("Autre indicatif o/n? ");
key=getch();
i++;
printf("\n");


if (key=='n') quit=1;


}
while(!quit);



fichier_ville1.close();
}



char trad_indicatif_ville2(char trad_ville2[10])
{
int i=0,quit=0;
char key;


ofstream fichier_ville2("ville2.txt",ios::out|ios::app);
if (!fichier_ville2) {
cerr << "Impossible d'ouvrir le fichier!" <<


endl;
return (-1);
}


do
{
trad_ville2=new char[10];
cout<<"Donnez un indicatif: ";
cin>>trad_ville2;
fichier_ville2<<trad_ville2 <<"\t" ;


printf("Autre indicatif o/n? ");
key=getch();
i++;
printf("\n");


if (key=='n') quit=1;


}
while(!quit);



fichier_ville2.close();
}



int comparer()
{
int i,j;



cout<<"comparaison"<<endl;
ofstream fichier_comp("comparaison2.txt",ios::out|ios::app);
ifstream fichier_ville1("tmp1.txt",ios::in);
if (!fichier_ville1)
{
cerr << "Impossible d'ouvrir le fichier!" << endl;
return (-1);
}


ifstream fichier_ville2("tmp2.txt",ios::in);
if (!fichier_ville2)
{
cerr << "Impossible d'ouvrir le fichier!" << endl;
return (-1);
}


std::vector< std::string > file2;
std::string tmp;
while ( !fichier_ville2.eof() )
{
fichier_ville2 >> tmp; // c ici k il ya erreur
file2.push_back(tmp);
}


std::vector<std::string>::iterator it;


fichier_ville1 >> tmp;
while (!fichier_ville1.eof() )
{
it = file2.begin();
while ((it != file2.end()) && (tmp != *it))
it ++;

if ( it == file2.end()) fichier_comp << tmp <<" ";
fichier_ville1 >> tmp;
}



fichier_comp.close();
fichier_ville2.close();
fichier_ville1.close();


}



void trad1()
{
int choix,quit=0;


do
{
// clrscr();



cout<<"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";


cout<<"\t \t\t \t 1-TRAD 1 VILLE1\n\n";


cout<<"\t \t\t \t 2-TRAD 1 VILLE2\n\n";


cout<<"\t \t\t \t 3-Comparer\n\n";


cout<<"\t \t\t \t 4-Quitter\n\n";



cout<<"\n\t \t\t \t Entrez votre choix: ";
cin>>choix;


switch (choix)
{
case 1:
{
//clrscr();


trad_indicatif_ville1(trad_ville1);
getch();



break;
}


case 2:
{
//clrscr();
trad_indicatif_ville2(trad_ville2);


getch();
break;
}



case 3:
{
//clrscr();
comparer();
getch();
break;
}


case 4:quit=1;break;
}


}
while(!quit);
}



main()
{
int choix,quit=0;


do
{
//clrscr();
cout<<"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";


cout<<"\t \t\t \t 1-TRAD 1\n";


cout<<"\t \t\t \t2-Quitter\n";



cout<<"\n \t \t\t \t Entrez votre choix: ";
cin>>choix;


switch (choix)
{
case 1:
{
// clrscr();
trad1();
getch();
break;
}




case 2:quit=1;break;
}


}
while(!quit);
return 0;
}

voila le code entier
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
13 juin 2005 à 11:29
Je te demande si tu as bien mis les bonnes entetes, tu me dis oui. Mais non, ce ne sont pas les bonnes !

Malgré ca, chez moi ca marche quand meme.



Donc a la place de ca:

#include<conio.h>

#include<stdio.h>

#include <string>

#include

#include <vector>

#include <fstream.h>



tu mets ca:



#include<conio.h>


#include<cstdio>


#include <string>


#include // c'est pas pareil que iostream.h qu'il ne faut plus utiliser


#include <vector>


#include <fstream>



using namespace std; // n'oublie pas cette ligne juste apres les include



Et la, meme si ca marche toujours pas, c'est deja beaucoup mieux.
0
ylovechichi Messages postés 41 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 26 septembre 2005
14 juin 2005 à 00:59
merci bcp mnt ca marche bien au niveau de la compilation mais le problème n'est pas encore résolue.il y a 1 pb au niveau du fichier_comp qui boucle à l'infini
remercie :-)
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
14 juin 2005 à 10:23
Vérifie les noms de fichiers car chez moi, ca marche bien.

Explique ce que fait exactement le programme au moment ou il plante, et ce que contienne les fichiers ville 1 et ville 2.
0
ylovechichi Messages postés 41 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 26 septembre 2005
14 juin 2005 à 18:26
oui tu as raison j'ai oublié de modifier le nom du fichier "temp1" c'est pr cela k'il ne marchait pas. merci bcp pr ton aide

encore un ptit problème, je ne sais pas prkoi ca ne marche pas kand je compile avec BORLAND C++.
l'erreur ke je trouve k'il ne connait pas les bibliothèques :

#include <vector>
#include
#include <ofstream>
using namespace std;

remercie
0
Rejoignez-nous