Bonjour,
Suite à un premier poste, dont le titre ne correspond pas du tout a ma demande, je re-poste ici, en espérant trouver solution à mon problème. (Je n'ai pas reussi à trouver comment supprimer mon ancien post ... )
Je développe actuellement un outil en C++ (VisualC++) qui me permet de comparer 2 fichiers textes (.txt) d'environ 4Mo chacun (soit environ 60000 lignes de textes), le tout sous Windows. Le premier fichier texte liste la totalité des fichiers de mon DD, avec leurs tailles, leur date d'écriture et leurs chemin complet, tout ceci à un instant N. Le second fichier, liste exactement la même chose, à un instant N+1.
Les fichiers sont de la forme :
c:\monchemin\mondossier\monssdossier\monfichier.extension;taille;datedecriture
c:\monchemin\mondossier1\monssdossier1\monfichier1.extension;taille;datedecriture
c:\monchemin\mondossier1\monssdossier2\monfichier2.extension;taille;datedecriture
...
Jusque la, ca va, le listing est très rapide, et très efficace. Le problème qui se pose maintenant est le suivant :
La comparaison de mes 2 fichiers est très très lente. Je vous proposes rapidement mon algo de comparaison :
Lecture ligne 1 du fichier 2
Comparaison de la ligne 1 avec toutes les lignes du fichier 1
Si on ne trouve pas de ligne identique, on écrit cette ligne dans un fichier texte de sortie.
Lecture ligne 2 du fichier 2
Comparaison de la ligne 2 avec toutes les lignes du fichier 1
Si on ne trouve pas de ligne identique, on écrit cette ligne dans un fichier texte de sortie.
Et je continu comme ça en incrémentant le numéro de ligne du fichier 2.Donc je compare chaque ligne de mon fichier 2, avec toutes les lignes de mon fichier 1.
Je comprend que ca prenne du temps, mais je dois absolument remédier à ça.
Voila mon code :
**************************************************************
void exclude (char *f1, char *f2)
{
ifstream fichier2("2.txt");
FILE *res;
string ligne1;
string ligne2;
int cpt=0;
bool test;
res=fopen("res.txt","w");
fprintf(res,"DIFFERENCES :\n\n");
while(getline(fichier2,ligne2))
{
cout <<"\b\b\b\r" <<cpt++;
test = true;
ifstream fichier1("1.txt");
while(getline(fichier1,ligne1))
{
if(ligne2==ligne1)
{
test=true;
break;
}
else
{
test=false;
}
}
if(test==false)
{
fprintf(res,"%s\n",ligne2.c_str());
}
}
fclose(res);
}
**************************************************************
Donc voila, je me tourne vers vous, afin de savoir si il n'existe pas un moyen plus rapide de comparer ces fichiers textes. Pour information, je tourne sous un gros PC, plutôt bien équipé et d'après mes calculs je suis a une moyenne d'analyse de 300 lignes analysées / minutes.
J'ai l'impression de mal m'y prendre, car en effet, je suis souvent confronté a un problème de lenteur, qui est, j'en suis certain, du a ma manière de codé. Avez vous des conseils a me donner a propos de rapidité d'exécution d'un programme ?
Cordialement
K. Pierre