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 & ecrire la difference dans un 3ème fichier


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut comparer deux fichiers & ecrire la difference dans un 3ème fichier
    bonjour,


    debutant en programmation en c, j'ai besoin de votre aide.

    je cherche un creer un petit programme pour comparer deux fichier txt et ecrire la difference dans un troisiemme fichier.
    j'ai fai un petit programme, j'arrive a faire la comparaison mais il ecrit plusieur fois la difference dans mon troisiemme fichier.

    en gros ce que je cherche a faire c'est:
    je lis la premiere ligne de mon premier fichier
    et je la compare avec toute les ligne de mon deuxiemme fichier
    si la ligne de mon fichier1 et != de toute les ligne de mon fichier2 je l'ecris dans mon fichier 3
    et je continue avec la seconde ligne de mon fichier1 etc etc etc.......

    voila ce que j'ai deja fait:

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    #include <stdio.h> 
    #include <stdlib.h> 
    #include <string.h> 
     
    int main() 
     
    { 
     
    FILE *resultats, *impaire, *final; 
     
    printf("Debut du programme\nPatientez...\n\n"); 
     
     
    char s[100], s2[100],s3[100]; 
     
    char* filename1 = "resultats.txt"; 
     
    char* filename2 = "impaire.txt"; 
     
    char* filename3 = "final.txt"; 
     
    resultats = fopen(filename1, "r" ); 
     
    if (resultats == NULL) 
     
    { 
     
    printf("Unable to open file %s\n", filename1); 
     
    return 1; 
     
    } 
     
     
     
    impaire = fopen(filename2, "r" ); 
     
    if (impaire == NULL) 
     
    { 
     
    printf("Unable to open file %s\n", filename2); 
     
    return 1; 
     
    } 
     
    final = fopen(filename3, "w" ); 
     
     
    if (final == NULL) 
     
    { 
     
    printf("Unable to open file %s\n", filename3); 
     
    return 1; 
     
    } 
     
     
     
     
    while (fgets(s, 100, resultats) != NULL) 
     
    { 
     
    rewind(impaire); 
     
    while (fgets(s2, 100, impaire) != NULL) 
     
    { 
    printf ("%s",s); 
    printf ("%s\n",s2); 
     
     
     
    if(strcmp(s2, s) !=0) 
    { 
    strcpy(s3,s); 
    fprintf(final,"%s",s3); 
     
    } 
     
     
     
     
    } 
     
     
     
    } 
     
     
     
     
     
     
    fclose(resultats); 
     
    fclose(impaire); 
     
    fclose(final); 
     
    return 0; 
     
    }
    help me please merci

  2. #2
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    si la ligne de mon fichier1 et != de toute les ligne de mon fichier2 je l'ecris dans mon fichier 3
    Ton code ne fait pas ça.

    Il compare chaque ligne du fichier 1 à chaque ligne du fichier 2 et, à chaque fois que les lignes sont différentes, il écrit la ligne du fichier 1 dans le fichier 3.

    C'est pour cela que tu retrouves "plein" de fois la même chose.

    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
    while (fgets(s, 100, resultats) != NULL) 
    { 
        rewind(impaire); 
        while (fgets(s2, 100, impaire) != NULL) 
        { 
            printf ("%s",s); 
            printf ("%s\n",s2); 
            if(strcmp(s2, s) !=0) 
            {
                // a chaque fois que s est différente de s2
                // les lignes suivantes sont exécutées
                // si s n'est pas présente dans le fichier 2, elle
                // apparaitra <nombre de lignes fichier 2> fois ...
                strcpy(s3,s);
                fprintf(final,"%s",s3);
            }
        }
    }
    Une solution peut être d'utiliser une variable où tu mémorises le fait que tu as trouvé (ou pas) ta ligne s dans le fichier 2 et, une fois sorti de la 2ieme boucle while, tu écris (ou pas) la chaine dans le fichier 3 :

    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
    while (fgets(s, 100, resultats) != NULL) 
    { 
        int found = 0; // pas trouvee a priori
     
        rewind(impaire); 
        while (fgets(s2, 100, impaire) != NULL) 
        { 
            if(strcmp(s2, s) ==0) 
            {
                found = 1;  // trouve !
                break;      // pas la peine de continuer
            }
        }
        if (found == 0)
            // pas la peine de passer par une autre variable, type s3 !
            fprintf(final,"%s",s);
     
    }
    si j'ai bien compris ce que tu veux faire (une comparaison classique de deux fichiers texte est un tantinet plus élaborée)
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

Discussions similaires

  1. Ecrire des instructions dans un autre fichier sh
    Par Elodie11 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 03/01/2012, 16h51
  2. Comparer deux lignes d'une même table dans une bdd
    Par Pierrot33 dans le forum Général Java
    Réponses: 3
    Dernier message: 19/11/2011, 19h04
  3. [XL-2003] Comparer deux feuilles et insérer les occurences dans une troisième
    Par Newbie_vba dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 03/09/2011, 11h55
  4. Réponses: 6
    Dernier message: 28/05/2010, 14h33
  5. Réponses: 0
    Dernier message: 28/02/2009, 16h47

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