comparer deux fichiers

Le
programmation
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.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
programmation
Le #19991031
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.
jerome
Le #19991021
"programmation"
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.
..
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.



Utilise un tableau pour chaque fichier.
Ensuite, ce n'est plus que des recherches de chaines ou parties de chaines
dans les tableaux.
programmation
Le #19997231
bonjour,

Je vous explique mon problème.
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

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êm e
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:

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

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

J'ai besoin de vos aides.

Merci.
programmation
Le #19998141
Bonjour,
Voici un premier essai:

[code=cpp]#include #include #include
int main()
{

FILE *f,*f2 ;
char s[1000], s2[1000];

f = fopen("f.txt", "r");
f2 = fopen("f2.txt", "r");
while(fgets(s, 1000, f)!= NULL)
{

rewind(f2);
while(fgets(s2, 1000, f2)!= NULL)
if(strcmp(s, s2))
printf("%sn",s);

}
fclose(f);
fclose(f2);
return 0;
}
[/code]

Mais cette solution tient de l'ordre des mots de deux lignes pour
chaque fichier.
"nom prenom age" est différent " nom age prenom"

j'ai dit il suffit de changer cette condition: if(!strcmp(s, s2))
par un truc comme if(same_word(s, s2)) .
mais, je trouve difficulté de implémenter
la fonction same_word(s, s2)

Comment je vais modifier cette solution pour ignorer l'ordre.
pour obtenir:

"nom prenom age" = " nom age prenom"

Merci.
marc
Le #19998651
programmation a écrit :
//
Comment je vais modifier cette solution pour ignorer l'ordre.
pour obtenir:

"nom prenom age" = " nom age prenom"



Découpe en mots et pour chacun appelle strstr() pour savoir s'il est
dans l'autre chaine
programmation
Le #20022271
On 27 août, 11:52, marc
programmation a écrit :

> //
> Comment je vais modifier cette solution pour ignorer l'ordre.
> pour obtenir:

>  "nom prenom age" = " nom age prenom"

Découpe en mots et pour chacun appelle strstr() pour savoir s'il est
dans l'autre chaine



Bonjour,
Mon problème concernant le critère de la comparaison de deux fichiers
a été modifié.
Je vous explique :
On n'affiche pas dans la console les lignes identiques.
la condition que deux lignes sont identiques ne tient pas de l'ordre
par exemple:
"a b c" = "b c a"

Mais, une autre condition qui s'ajoute :on n'affiche pas les lignes de
"f.txt" qui sont inclus dans "f2.txt"
par exemple:
"a c" est inclue dans "b c a"
"b c" est inclue dans "b c a"

Donc ou lieu d'obtenir comme résultat :
a b
b c
b d
c d
a b d
b c d
a c d
a b c d

Alors si on ajoute la condition d'inclusion, on va obtenir le résultat
suivant:

b d
c d
a b d
b c d
a c d
a b c d

Ceci c'est comment on fait la comparaison entre deux fichiers.

J'ai voulu composer mon problèmes en sous problèmes pour que soit
lisible.

Je vous explique le problème en totalité:

J'ai un fichier de base qui doit être exister qui s'appelle "f.txt"
Soit le fichier "f.txt":
a b
a c
a d
b c
b d
c d
a b c
a b d
b c d
a c d
a b c d

et j'ai d'autres fichiers qui leur nombre varie. Mais au moins j'ai un
et je peux avoir N fichiers.
Supposons que on a N=3.
Donc on a 3 fichiers respectivement: "f1.txt", "f2.txt" et "f3.txt"
Soit "f1.txt" :
a
d a
c a
b c a

Soit "f2.txt" :
a
c
b
d
b a
d a
b c
d c
b c a

Soit "f3.txt" :
a
b
c
c a
d a
b a
b c
b c a

Je voudrais chercher comme j'ai dit avant les lignes qui appartiennent
au "f.txt" et qui vérifient les deux conditions c'est à dire :
l'ignorance de l'ordre et inclusion.

Je vais appliquer votre idée successivement entre:
- "f.txt" et "f1.txt"
- "f.txt" et "f2.txt"
- "f.txt" et "f3.txt"

C'est bon j'obtiens le résultat pour:
- "f.txt" et "f1.txt"
b d
c d
a b d
b c d
a c d
a b c d

- "f.txt" et "f2.txt"
b d
a b d
b c d
a c d
a b c d

- "f.txt" et "f3.txt"
b d
c d
a b d
b c d
a c d
a b c d

Le travail est de chercher l'intersection entre ces résultats obtenus.


Le résultat souhaité obtenu à la fin est :
b d
a b d
b c d
a c d
a b c d

Enfin, nous cherchons dans ce résultat la ligne qui n'est pas incluse
dans les autres lignes de ce même résultat.
on a :
"a b d" contient "b d"
"b c d" contient "b d"
"a b c d" contient "b d"

Et donc nous obtenons le résultat final de ce problème:
b d
a c d

Que pensez vous de cette idée ?
Que proposez vous comme structure de donnée pour sauvegarder les
résultats obtenus entre deux fichiers puis pour faire l'intersection
entre ces résultats ?
Pouvez vous poster votre solution pour que je vois comment je vais
l'exploiter ?

J'ai besoin de vos aides.

Merci.
Publicité
Poster une réponse
Anonyme