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 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
   | int compter_mots_fichiers(char * rep_convert, char * fichier_mots, char * nom_fichier_2,  char * nom_fichier_3)
{
     char  * buffer,* recherche, * str_sans_espace,ligne [1024];
     int nbr_conv=0, nombre_fichier=0, compt = 0, nbr_total_mot = 0, nombre_rep=0, nb_total,nb_fichier ;
     struct dirent *lecture;
     DIR  *rep2;     
     FILE  *fichier_2, *fichier_3, *fichier_mot;
 
     rep2 = opendir(rep_convert);    
 
     while ((lecture = readdir(rep2)))   //parcours des fichiers dans le répertoire
          nombre_rep++;
 
     fichier_2 = fopen(nom_fichier_2, "wb");            // fichier final contenant uniquement les liens 
     fichier_3 = fopen(nom_fichier_3, "wb");            // fichier final contenant uniquement les liens 
     fprintf(fichier_2, "STATISTIQUES DES DOCUMENTS DE %s \n\n", rep_convert);
     fprintf(fichier_3,"STATISTIQUES DES DOCUMENTS DE %s \n\n", rep_convert );
 
     fichier_mot = fopen ( fichier_mots, "rb" ); 
 
     if ( fichier_mot != NULL )
     {
        while ( fgets ( ligne, sizeof ligne, fichier_mot ) != NULL ) 
        {
              str_sans_espace=trim(ligne);  //efface les espaces inutiles 
              recherche=str_sans_espace;
              nb_total=0;
              nb_fichier=0;
              DIR *rep;
              rep = opendir(rep_convert);   
 
            while ((lecture = readdir(rep)))   //parcours des fichiers dans le répertoire
            {
                nombre_fichier++;
                int continuer=1;          
 
                if(nombre_fichier>2 && nombre_fichier!=nombre_rep)//&& nombre_fichier<5)          //on ignore . et ..
                {      
                        nbr_conv++;                                   
                        char lien_ini[255]={0};
                        char *nom_fichier_seul;                       
 
                        sprintf(lien_ini,"%s%s",rep_convert, lecture->d_name );
                        nom_fichier_seul = strchr(lecture->d_name, '.');         //suppression de l'extension  
 
                        if(nom_fichier_seul!=NULL)
                          *nom_fichier_seul = '\0';
 
                        FILE *fichier;
                        int taille_fichier;                    
                        char *balise_debut, *debut;              
 
                        fichier = fopen (lien_ini, "rb");
 
                        if (fichier == NULL)
                        {
                          printf("\n fichier ini vide %s, %d \n", lien_ini, nombre_fichier);
                         // return 1;
                        } 
                        else
                        {                                                                                
                            fseek (fichier, 0 , SEEK_END);                    // determine la taille du fichier
                            taille_fichier = ftell (fichier);
                            rewind (fichier);                  
                            buffer = malloc (taille_fichier);         //allocation mémoire pour le buffer d                         
 
                            if (buffer ==  NULL)                              //si buffer vide, erreur
                            {
                                   printf("\n buffer vide erreur %s => %d \n",lien_ini, taille_fichier);
                              //     return 2;        
                            }
                            else
                            {              
                                fread (buffer, 1, taille_fichier, fichier);       // copie du fichier dans le buffer/tampon                                    
                                fclose(fichier);
                                 balise_debut = recherche;                          
 
                                 while (continuer == 1)
                                 {
                                     debut = strstr(buffer, balise_debut);             //recherche dans le buffer   
 
                                     if (debut != NULL) 
                                     {   
                                         nbr_total_mot++;
                                         nb_total++;                     
                                         int fin_balise=strlen(buffer)-strlen(debut)+strlen(balise_debut) ;       
                                         buffer=buffer+fin_balise; 
                                         debut=strstr(buffer,balise_debut);         //indication du nouveau début                                          
                                     }
                                     else 
                                     {
                                            continuer = 0;                                   
                                     }                                                 
                                 }                                                       
 
                                 nb_fichier = nb_total-nb_fichier;
 
                                 if(nb_fichier>0 && nb_total>0 )
                                 {
                                     printf("Recherche du mot '%s' dans %s : %d \n", balise_debut, lien_ini, nb_fichier);
                                      fprintf(fichier_2,"Recherche du mot '%s' dans %s : %d \n", balise_debut, lien_ini, nb_fichier);
                                 }
                                 nb_fichier= nb_total; 
                             }                              
                        }                                                                     
                }                      
             } 
 
             printf("\n\n TOTAL mot %s dans '%s' : %d \n\n", recherche, rep_convert,nb_total);   
             fprintf(fichier_2,"\n TOTAL mot '%s' dans %s : %d \n\n", recherche, rep_convert,nb_total );
             fprintf(fichier_3,"%s : %d \n", recherche,nb_total );
             nb_total=0;
             nombre_fichier=0;            
       }               
 
      fclose(fichier_mot); 
     }
     else
       printf("\nprobleme fichier mot\n");     
 
 
     fprintf(fichier_2,"\n NOMBRE TOTAL MOTS : %d\n\n", nbr_total_mot);
     fprintf(fichier_2,"\0");
     fclose(fichier_2); 
     fclose(fichier_3);  
     free(buffer);  
 
   return 3;      
} | 
Partager