Accueil > Forum > > > > comparer deux fichiers
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
|
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
|
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
|
mercredi 26 août 2009 à 18:34:40 |
Re : comparer deux fichiers

CptPingu
|
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
|
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
|
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
|
|
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
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|