Comparer 2 fichiers Texte

Signaler
Messages postés
8
Date d'inscription
samedi 13 décembre 2008
Statut
Membre
Dernière intervention
30 janvier 2010
-
Messages postés
8
Date d'inscription
samedi 13 décembre 2008
Statut
Membre
Dernière intervention
30 janvier 2010
-
Bonjour,

Je me permets de poster ce message car j'ai un petit souci dans ma programmation en C.
Je vous expose mon souci : J'ai deux fichiers texte qui sont de taille différente et je dois les comparer.
La première chose que j'ai faite c'est d'ouvrir mes deux fichiers. Mais aprés je ne sais pas du tout comment faire et c'est là que j'ai besoin de votre aide.

Je vous remercie par avance.

Ps: Si vous souhaitez plus d'explication je vous en donnerais.

7 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
"recuperer ligne ..."
pourquoi perdre du temps à chercher des fins de ligne ???


lenfich1 = longueur fichier1
lenfich2 = longueur fichier2
contverif = MIN(lenfich1, lenfich2)


2 buffers de 1 Mo


tant que contverif:
  n = 1Mo;
  if(n > contverif) n = countverif;
  countveirf -= n;
  Aspirer n octets de fich1 dans buffer1
  Aspirer n octets de fich2 dans buffer2
  for(i = 0; i < n; i++) {
    if(buffer1[i] != buffer2[i]) AFFICHER_CE_QUE_TU_VEUX;
  }
fin tant que

ciao...
BruNews, MVP VC++
Messages postés
8
Date d'inscription
samedi 13 décembre 2008
Statut
Membre
Dernière intervention
30 janvier 2010
1
Aprés avoir suivi le post de cptpingu j'ai continué mon programme mais j'ai toujours un petit souci.
Maintenant il y a juste mon fichier texte qui s'ouvre et plus mon fichier dictionnaire. donc la suite ne peut pas se réaliser. Pourquoi ?

Merci pour votre aide

Le code en question :


#include <stdio.h>
#include <stdlib.h>
#define TAILLE_MAX 1000




typedef struct dico
{
char lettre;
char* mot;
struct ARBRE* fils;
struct ARBRE* frere;
}arbredico;




void ouvrir ()
{
    char choix[256];
    char chaine [TAILLE_MAX] = "";


    printf("Quel fichier voulez vous ouvrir? mettre l'extention .txt\n");
    scanf("%s",choix);


  FILE* fichier = NULL;


  fichier = fopen (choix, "r");


  if (fichier != NULL)
  {
      while (fgets(chaine, TAILLE_MAX, fichier) != NULL) // on lit le fichier tant qu'on ne reçoit pas d'erreur NULL
      {
            printf ("%s", chaine); // on affiche la chaine qu'on vient de lire
      }
  }
  fclose (fichier);
}


void dictionnaire ()
{
    char chaine [TAILLE_MAX];


    FILE* arbredico = NULL;
    arbredico =fopen ("dico.txt","r");
     if (arbredico != NULL)
  {
      while (fgets(chaine, TAILLE_MAX, arbredico) != NULL) // on lit le fichier tant qu'on ne reçoit pas d'erreur NULL
      {
            printf ("%s", chaine); // on affiche la chaine qu'on vient de lire
      }
  }
}




int comparer(*fichier, *arbredico)
{
    while (!EOF( fichier) && (!EOF( arbredico)
        {
            for (int i=0; i<256;i++)
                {
                    fgets (ligne[i].fichier);
                    fgets (ligne[i].arbredico);
                    strcmp (ligne[i].fichier && ligne[i].arbredico);
                    if
                        {
                            ligne[i].fichier != ligne[i].arbredico;
                            fclose (fichier);
                            fclose (arbredico);
                        }
                }
        }
}




int main ()
 {
     char choix[256];
     char dico[26];
     ouvrir (choix, TAILLE_MAX);
     dictionnaire (dico);


 }
Messages postés
3829
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
8 janvier 2021
114
Si tu dois juste réaliser une comparaison de ces fichiers, tu peux faire ceci:

Fonction comparer (fichier1, fichier2) : Booléen
  Ouverture de deux fichiers.
  Tant que (non (est à la fin de fichier 1) et non (est à la fin de fichier 2) faire
    Récupérer ligne i du fichier 1
    Récupérer ligne i du fichier 2
    Comparer ces deux lignes, avec strcmp.
    Si les lignes sont différentes, fermer les deux fichiers et retourner Faux.
    Sinon ne rien faire, et continuer.
  Fin tant que
  Si fichier1 ou fichier2 n'est pas à la fin
     alors l'un des deux fichiers est plus grand que l'autre,
     donc on ferme les deux fichiers et on retourne Faux
  Sinon
     Fermeture de deux fichiers.
     Retourner Vrai
  Fin Si
Fin fonction
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
28
SAlut,

Il y a winmerge qui le fait bien?
Messages postés
3829
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
8 janvier 2021
114
Il y a surtout "Kompare" (que je trouve vraiment mieux), mais je pense que le but est juste de coder une fonction de comparaison, pas d'utiliser un outil de "diff".
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
BruNews, en fait ca dépend du type de comparaison que tu veux faire. Par exemple WinMerge te permet de comparer des fichiers en affichant des insertions/suppressions de lignes d'un fichier par rapport à l'autre, du coup tu es obligé de raisonner sur des lignes.
Un lien pour répondre à la question de départ : http://en.wikipedia.org/wiki/Longest_common_subsequence

_____________________________________
Messages postés
8
Date d'inscription
samedi 13 décembre 2008
Statut
Membre
Dernière intervention
30 janvier 2010
1
Concernant mon code on m'a conseillé d'utiliser un radix tree pour stocker les mots du dictionnaire. Mais le souci c'est que je ne sais pas comment faire est ce que quelqu'un peut me m'aider.

Merci