IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

comparer deux fichiers


Sujet :

C

  1. #1
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut
    Bonjour,

    Je vous explique mon problème.
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    fprintf(fp,"%s",s);  //le fichier "f.txt"
     
    fprintf(fp2,"%s",s); //le fichier "f2.txt"
    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

    J'ai besoin de vos aides.

    Merci.

  2. #2
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut
    Bonjour,
    Voici un premier essai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    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("%s\n",s);
     
       }
    fclose(f);
    fclose(f2);
    return 0;
    }
    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.

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 102
    Billets dans le blog
    146
    Par défaut
    Pour le dernier problème, j'implementerai bien un système de "listes"
    Du moins un conteneur, qui contient plusieurs tableau de caractères ( donc des mots ).
    Et que en comparant les deux conteneurs, on regarde si tous les mots du premier sont présents dans le deuxième.
    Pour l'ordre, bah ça serait un strcmp() de la chaine globale.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Pour le dernier problème, j'implementerai bien un système de "listes"
    Du moins un conteneur, qui contient plusieurs tableau de caractères ( donc des mots ).
    Et que en comparant les deux conteneurs, on regarde si tous les mots du premier sont présents dans le deuxième.
    Faut d'abord trier les mots des 2 cotés. Comme ça, le problème de l'ordre n'a plus d'importance et on peut comparer les mots un à un.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut
    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.

Discussions similaires

  1. comparer deux fichier .xls
    Par oursquetaire dans le forum Excel
    Réponses: 6
    Dernier message: 06/07/2006, 16h52
  2. [JDOM] Comparer deux fichiers XML en Java
    Par calimero2611 dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 30/06/2006, 11h19
  3. Comparer deux fichier
    Par Taz_8626 dans le forum Langage
    Réponses: 3
    Dernier message: 20/06/2006, 11h46
  4. comparer deux fichiers avec une api windows
    Par sweetdreamer dans le forum Windows
    Réponses: 4
    Dernier message: 25/05/2006, 22h10
  5. Fonction c qui compare deux fichiers ???
    Par babyface dans le forum C
    Réponses: 4
    Dernier message: 19/11/2005, 13h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo