begin process at 2012 05 28 18:43:02
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

comparer deux fichiers


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

comparer deux fichiers

mardi 25 août 2009 à 20:14:52 | comparer deux fichiers

boualiasma

Bonjour,

J'ai deux fichiers "exemple.txt" et "essai.txt"
J'aime afficher les lignes qui existent dans "exemple.txt" et qui n'existent pas dans "essai.txt"
c'est comme une sorte de la différence.

Chaque ligne de fichier contient une chaine de caractère.
Mon idée :
pour chaque ligne de "exemple.txt" je teste si elle existe dans "essai.txt".
Si oui je l'affiche.

Le problème que on peut trouver la même chaine de caractère de "exemple.txt" mais dont l'ordre des mots formant cette chaine est différent de celui dans "essai.txt"

on affiche la chaine autant qui se compose de mêmes mots.

Soit le fichier "exemple.txt"

nom prenom
nom age
nom prenom age
nom emploi
age emploi
prenom age empoi
nom age emploi
nom prenom emploi
nom prenom age emploi


Soit le fichier "essai.txt"

nom
prenom
age
emploi
age nom
nom age prenom
nom emploi
age emploi
prenom age empoi
nom prenom emploi
nom prenom age emploi


le résultat souhaité est:

nom prenom
nom age
nom age emploi


Comment on obtient ce résultat ?

Merci.

mardi 25 août 2009 à 20:49:43 | Re : comparer deux fichiers

nhervagault

Administrateur CodeS-SourceS

Salut,

Ton résultat semble faut.

En c#, je chargerai les données dans un hastable
ou un autre type de collections

Et je regarderais si la premiere collection contient l'élément courant.

Apres pour l'ordre il y a plusieurs possibilités.
Tu compares les valeurs des tableaux

par exemple.

Désolé c'est en c# mais les collections existent en C++
alors il reste plus que les algos a faire.

Bon dev.

mercredi 26 août 2009 à 09:03:03 | Re : comparer deux fichiers

boualiasma

bonjour,
Je vous explique ma demande.
Soit le premier fichier fichier "f.txt":
nom prenom
nom age
nom prenom age
nom emploi
age emploi
prenom age emploi
nom age emploi
nom prenom emploi
nom prenom age emploi

Soit le deuxième fichier "f2.txt":

nom
prenom
age
emploi
age nom
nom age prenom
nom emploi
age emploi
prenom age emploi
nom prenom emploi
nom prenom age emploi

votre solution donne:
nom prenom
nom age
nom prenom age

C'est à dire les lignes qui appartiennent à "f.txt" et n'appartiennent pas à "f2.txt"


Mais, moi je cherche les lignes qui appartiennent à "f.txt" et n'appartiennent pas à "f2.txt"
avec les mots de chaque ligne ne sont pas les mêmes
quelque soit l'ordre.

par exemple,
Dans la ligne de "f.txt":
nom age
est le même que dans "f2.txt" :
age emploi

car les deux lignes ont le même ensemble des mots {nom, age}

Donc le résultat ne contient pas la ligne: nom age


de même Dans la ligne de "f.txt":
nom prenom age
est le même que dans "f2.txt" :
nom age prenom


Enfin en se basant sur l'hypothèse que on compare les lignes qui ont les mêmes mots quelque soit l'ordre

Donc on obtient comme résultat:
nom prenom
nom age emploi

Avez-vous une proposition car j'ai trouvé une difficulté de dire deux lignes sont les mêmes avec leurs mots qui forment ces deux lignes dans un ordre différent ?


Merci.

mercredi 26 août 2009 à 10:37:34 | Re : comparer deux fichiers

CptPingu

Administrateur CodeS-SourceS

Voici une l'une des méthodes possibles:

- Créer une fonction "bool diffLine(std::vector<std::string> > a, std::vector<std::string> > b)" qui compare deux tableaux de string. Celle-ci tri par ordre alphabétique les deux tableaux, avant de vérifier qu'ils sont identiques.
- Créer une fonction "std::string getLine(std::ifstream file, int pos)" qui récupère une ligne d'un fichier.
- Créer une fonction "std::vector<std::string> > split(std::string s, char delim = " ")" qui découpe les mots d'une ligne en fonction d'un délimiteur.

Enfin applique la méthode suivante:

Code :
Pour la premiere a la derniere ligne du premier fichier (ligneCouranteFichier1) faire

tableau1 = split(ligneCouranteFichier1);
Pour la premiere a la derniere ligne du deuxieme fichier (ligneCouranteFichier2) faire
tableau2 = split(ligneCouranteFichier2);
Si (diffLine(tableau1, tableau2))
// les lignes sont identiques
Sinon
// les lignes sont differentes
fin si
fni pour
fin pour


Ce n'est pas la meilleure méthode, ni la plus optimisé. C'est juste une des méthodes possibles. Il y a dans la STL des transformateur intéressants, pense à y jeter un oeil (notamment pour le tri).

mercredi 26 août 2009 à 18:31:42 | Re : comparer deux fichiers

boualiasma

Bonjour,

Mon programme est en C.

mercredi 26 août 2009 à 18:34:40 | Re : comparer deux fichiers

CptPingu

Administrateur CodeS-SourceS

Oui, et alors ? Je te donne une méthode pour réaliser ce que tu veux. Je ne vais pas le coder à ta place. A toi de l'adapter. Si tu bloques sur un morceau de code, poste ce qui pose problème mais à toi d'essayer de le faire par toi même en t'aidant si tu le désires de la démarche que je viens de décrire dans mon précédent post.

mercredi 26 août 2009 à 18:36:22 | Re : comparer deux fichiers

CptPingu

Administrateur CodeS-SourceS

Pour les méthodes du C++, il suffit de les remplacer par du C.

std::string => char*
std::vector<std::string> => char**
std::ifstream => FILE

La méthode reste exactement la même.

jeudi 27 août 2009 à 09:43:46 | Re : comparer deux fichiers

boualiasma

Bonjour,

Je vous explique ma demande.
Je cherche les lignes qui appartiennent à "f.txt" et non pas "f2.txt"
C'est une sorte de différence lignes de "f.txt" moins lignes de "f2.txt"
à condition:
Une ligne de "f.txt" est identique à une ligne de "f2.txt"
si les deux lignes ont la même valeur et le même nombre des mots qui forment les deux lignes quelque soit l'ordre des mots puisque l'ordre des mots n'est pas important dans mon problème.
le plus important c'est : la même valeur et le même nombre

Sinon c'est à dire les deux lignes n'ont pas la même valeur et le même nombre des mots alors dans ce cas les deux lignes sont différentes.

par exemple:
"nom prenom age" = "nom age prenom"

et donc l'ordre est ignoré.

J'espère que je le problème est clair sinon je vous explique encore.

Sachant que chaque ligne du deux fichiers "f.txt" et "f2.txt" est composé d'un seul champ (une chaine de caractères)
Le remplissage de deux fichiers se fait par:

Code C/C++ :

fprintf(fp,"%s",s); //le fichier "f.txt"
fprintf(fp2,"%s",s); //le fichier "f2.txt"


Je n'arrive pas à implémenter votre solution

J'ai besoin de vos aides

Merci.

jeudi 27 août 2009 à 09:51:03 | Re : comparer deux fichiers

CptPingu

Administrateur CodeS-SourceS

J'avais bien compris le problème, inutile de le réexpliquer. La méthode que je t'ai donné peut résoudre celui-ci. A toi de commencer à la coder. Je t'ai découpé cette méthode en plusieurs fonctions. Commence déjà par implémenter celles-ci, et poste les morceaux de code qui pourraient poser problème.

jeudi 27 août 2009 à 10:01:36 | Re : comparer deux fichiers

boualiasma

Bonjour,
Voici un exemple:

Soit le premier fichier fichier "f.txt":
nom prenom
nom age
nom prenom age
nom emploi
age emploi
prenom age emploi
nom age emploi
nom prenom emploi
nom prenom age emploi

Soit le deuxième fichier "f2.txt":

nom
prenom
age
emploi
age nom
nom age prenom
nom emploi
age emploi
prenom age emploi
nom prenom emploi
nom prenom age emploi

Le résultat souhaité:
nom prenom
nom age emploi


1 2 3 4 5 6 7 8 9 10 11

Cette discussion est classée dans : age, txt, exemple, prenom, emploi


Répondre à ce message

Sujets en rapport avec ce message

Calcul des combinaisons des chaines de caracteres [ par boualiasma ] Bonsoir, J'ai un fichier texte "exemple.txt" qui contient dans chaque une seule chaine de caractère(attribut). On sait en avance le nombre d'attribut Problèmes de pointeur pour un tableau de structure [ par fantaorange ] Bonjour à tous,Me voilà débutant en C, et je galère un peu avec les pointeurs pour un tableau de structure...Je me suis fixé un petit exercice qui con un pti prob ... :s help [ par meksoft002 ] Bonjour, c'est ma première participation en vue que vous pourrez resoudre mon problème ..voila...je vouderais mettre en oeuvre un tableau d'objets "pe ouvrir un fichier avec devcpp [ par anek971 ] lut tout le monde,Bon j'ai fait un petit programme tout bete juste pour pouvoir ecrire une donné sur une personne ,dans le but d'agrementer ca plustar Erreur conversion from `Sportif*' to non-scalar type `Sportif' requested [ par lordskyser1 ] Bonjour,je débute en C++ et je tente de compiler ma première classe sans y arriver, car je n'arrive pas à comprendre le message d'erreur de dev c++.he DeleteFile [ par oh81 ] Bonjour tout le monde,   En utilisant les sockets, j'ai fait un serveur et un client (que j'ai dupliqué par la suite). Le serveur attend une connexion Connaître le résultat retournée par la commande system [ par pcmanprogrammeur ] Bonjour! Je suis actuellement en train de créer un programme en C sous LINUX où je dois aller visiter un fichier texte. Je crée une variable : char co Valeur dans un fichier TXT [ par norton ] Bonjour, Mon programme doit affecter une valeur à une variable, cette valeur se trouve dans un fichier txt.jusque la ok, mais une fois que mon program ecriture saut de ligne dans un fichier [ par mogwai93 ] j'essaie d'ecrire un saut de ligne dans un fichier sauf qu'il ne m'ecrit que 0A au lieu de 0D 0A comment corriger ? merci     hFile = CreateFile(Mon_ Lecture de fichier TXT [ par beb30 ] Voila je souhaite faire un programme en C qui me permette de retrouver une information de type Char rentrée manuellement. Je souhaite aller lire ds un


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,430 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales