problème de comparaison de deux fichiers - C - Programmation
Marsh Posté le 27-08-2009 à 11:27:44
Bonjour,
Voici un premier essai:
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.
Marsh Posté le 27-08-2009 à 16:22:37
Je ne crois pas qu'une telle fonction existe telle quelle. Il va falloir que tu découpes chaque chaîne de caractère en trois champs "à la main" et que tu vérifies successivement :
Marsh Posté le 27-08-2009 à 23:18:53
Sebxoii a écrit : Je ne crois pas qu'une telle fonction existe telle quelle. |
Exact - Ca n'existe pas
Sebxoii a écrit : Il va falloir que tu découpes chaque chaîne de caractère en trois champs "à la main" et que tu vérifies successivement :
|
Super algo. Et si t'avais 10 champs, tu ferais une à une les 55 comparaisons ???
Tu mets tes data du fichier 1 dans un tableau X, tes datas du fichier 2 dans un tableau Y. Puis tu tries les 2 tableaux par ordre alphabétique (qsort(..., ..., ..., strcmp)) puis tu compares les tableaux champ [n] tableau X avec champ[n] tableau Y avec sortie immédiate si différents...
Marsh Posté le 28-08-2009 à 00:08:50
Sve@r a écrit : Super algo. Et si t'avais 10 champs, tu ferais une à une les 55 comparaisons ??? |
Je réfléchis un peu dans ce cas !
Sve@r a écrit : Tu mets tes data du fichier 1 dans un tableau X, tes datas du fichier 2 dans un tableau Y. Puis tu tries les 2 tableaux par ordre alphabétique (qsort(..., ..., ..., strcmp)) puis tu compares les tableaux champ [n] tableau X avec champ[n] tableau Y avec sortie immédiate si différents... |
J'aime bien la méthode en tout cas, je note ça dans un coin de cerveau.
Marsh Posté le 28-08-2009 à 08:37:45
Sebxoii a écrit : Je réfléchis un peu dans ce cas ! |
Arf, faut réfléchir tout le temps
Sebxoii a écrit : J'aime bien la méthode en tout cas, je note ça dans un coin de cerveau. |
Au plaisir
Marsh Posté le 28-08-2009 à 10:39:56
Bonjour,
J'ai testé le code suivant :
Code :
|
La compilation se passe bien. Mais, l'exécution ne passe pas bien puisque il y a une génération de l'exception suivante:
Citation : |
D'où vient cette erreur ?
Merci.
Marsh Posté le 28-08-2009 à 11:41:16
Bonjour,
J'ai modifié un peu le code :
#
Code :
|
Après l'exécution, il m'affiche :
Unable to open file f
Mais, les deux fichiers existent.
Marsh Posté le 28-08-2009 à 12:01:18
Salut
C'est mieux avec la gestion des erreurs
Il faut toujours vérifier les appels système.
fgets ajoute \0 à la fin de la chaine, je ne suis plus sûr (voir la doc) mais je pense qu'avec un tableau de 1000, il ne faut demander que 999 caractères à fgets pour qu'il puisse placer \0 au cas où le tableau soit effectivement rempli.
Attention strcmp renvoie 0 si les chaîne sont identiques. Ta comparaison fait bien ce que tu veux?
essaie:
Code :
|
cela déclare un tableau de caractères. char* ce n'est qu'un pointeur sur 1 caractère.
remarque cela devrait te faire une zone temporaire contenant ta chaîne et un pointeur qui pointe dessus... Je n'ai jamais créé de chaînes comme cela, toujours avec des tableaux, cela me fait douter pour le coup. Sinon pour vérifier s'il trouve bien tes fichiers:
Code :
|
comme dans ton premier essai mais en ajoutant la vérification des erreurs.
Marsh Posté le 27-08-2009 à 10:04:38
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ê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:
fprintf(fp,"%s",s); //le fichier "f.txt"
fprintf(fp2,"%s",s); //le fichier "f2.txt"
J'ai besoin de vos aides.
Merci.