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 :

Nombre de fichiers où appartient un terme


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Nombre de fichiers où appartient un terme
    Bonjour,
    j'ai un dossier de fichiers textes et je voulais les parcourir mot à mot pour savoir le nombre de fichiers où appartient chaque terme.
    le résultat de ce code est erroné, la faute est dans la fonction nbfiles, j'ai pas su le calculer,
    svp aidez moi, pleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaase.
    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
     
    #include <dirent.h>
    #include <stdio.h>
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <iomanip>
    #include <map>
    using std::string;
    using std::ifstream;
     
     
    bool isValid(const std::string& path)
    {
      return !path.empty() && path != "." && path != "..";
    }
     
    void fillMap(std::map<std::string, int>& map, const std::string& filename)
    {  std::ifstream entree(filename.c_str());
      std::string s;
      while (entree >> s)
    	++map[s];
    }
      bool exists(const std::string& filename, const std::string& pattern)
    {
      std::ifstream entree(filename.c_str());
      std::string s;
    	while (entree >> s)
     
    	if (s == pattern)
    	  return true;
     
      return false;
    }
    void nbfiles(const std::string& filename)
    {  std::map<std::string, int> map;
      fillMap(map, filename);
      int nbFile = 0;
      int som = 0;
      typedef std::map<std::string, int>::const_iterator iter;
      for (iter it = map.begin(); it != map.end(); ++it)
    	if (exists(filename, it->first))
    	  {++nbFile;
    	   break;
    	   }
       for (iter it = map.begin(); it != map.end(); ++it)
      std::cout << "Le nombre de fichier contenant le terme " << it->first << " est " << nbFile << std::endl<< std::endl;
     
      }
    int main()
    {
      static const std::string folder = "in";
       string s;
      DIR* rep = opendir(folder.c_str());
      if (rep)
      {
    	struct dirent* lecture;
    	int nbFile = 0;
    	int totalFile = 0;
     
    	while ((lecture = readdir(rep)))
    	{
    	  if (!isValid(lecture->d_name))
    	continue;
     
    	 nbfiles(folder + "/" + lecture->d_name);
    	  std::cout << std::endl;
    		++totalFile;
    	  }
    	closedir(rep);
    	std::cout << "Le nombre de fichiers est : " << totalFile << std::endl;
      }
      system ("pause");
      return 0;
    }

  2. #2
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    Salut,



    C’est un exercice pour t’entrainer ou parce que ça te sera vraiment utile ?

  3. #3
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    En tous cas, voilà, moi j’ai passé 20 minutes pour écrire le code que tu souhaites... en Python.

    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
    import os
     
    dossier_start = raw_input("Entrer le nom du dossier a explorer : ")
    mot           = raw_input("Indiquer le mot a rechercher : ")
     
    liste = []
     
    def explor(doss):
        for path_name,diir,fiil in os.walk(doss):
            for namefiil in fiil:
                with open(path_name+'\\'+namefiil) as f:
                    if mot in f.read():
                        liste.append(path_name+'\\'+namefiil)
            for namediir in diir:
                explor(path_name+'\\'+namediir)
     
    explor(dossier_start)
    print liste



    Ce que je veux dire, c’est qu’il me paraît disproportionné d’utiliser un Mirage 2000 (C++) pour écrire une application très bateau.

    Un langage évolué comme Python permet d’atteindre l’objectif en 2 temps 3 mouvements, alors pourquoi se faire souffrir avec C++ dans une application qui ne le réclame pas ?

  4. #4
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    eyquem, le passage par python est tout aussi inutile, grep suffit amplement pour faire la même chose que vous ... mais qui n'est pas ce qui est demandé

    d'après le prog fournis il ne s'agit pas de savoir combien de fois un mot donné est présent, mais de le faire pour tout les mots

    actuellement la map étant refaite pour chaque fichier il est normal que le nombre affiché soit 1. Si le but est bien de donner le nombre de fichiers utilisant chaque mot présent dans au moins un des fichiers alors oui l'algo actuel ne peut pas marcher. Si on veut le moins de modifications possible pour le corriger il faut faire en deux étapes : parcourir tout les fichiers afin de remplir une map unique via fillmap, puis reparcourir les fichiers et utiliser exists pour compter. Mais c'est bien cher pour rien, il suffit de faire un parcours unique avec deux maps : une contenant tout les mots et donc ayant une portée globale, et une autre temporaire liée a chaque fichier pour ne pas compter N fois un fichier utilisant N fois un même mot
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  5. #5
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    merci bien eyquem pour votre proposition, c'est vrai qu'il parait plus facile avec python mais je suis entrain de préparer mon mémoire avec c++ malgré que je ne le maitrise pas bien, mais bon je suis obligée,
    merci de meme bruno_pages, je vais essayer de modifier ce code en suivant ce que vous avez dit, j'espère bien pouvoir le faire car déja ce code je l'ai fait avec l'aide de quelqu'un.

Discussions similaires

  1. Nombre de fichiers dans un répertoire
    Par berry dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 12/11/2005, 17h48
  2. Réponses: 6
    Dernier message: 11/02/2005, 06h41
  3. [MFC] Limitation du nombre de fichiers...
    Par chronos dans le forum MFC
    Réponses: 5
    Dernier message: 02/06/2004, 10h40
  4. limitation nombre de fichiers
    Par bozo dans le forum MFC
    Réponses: 6
    Dernier message: 02/07/2003, 13h44
  5. Nombre de fichiers ouverts simultanément
    Par matrixfan dans le forum C++Builder
    Réponses: 3
    Dernier message: 27/05/2002, 17h47

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