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

Java Discussion :

Existence d'un mot dans plusieurs fichiers


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 26
    Points : 11
    Points
    11
    Par défaut Existence d'un mot dans plusieurs fichiers
    Bonjour,

    J'ai une tâche dans mon programme qui consiste à faire calculer le nombre d'occurrences d'un mot dans plusieurs fichiers et combien il existe de fois. C'est-à-dire que si le mot est par exemple 'chat' et j'ai 5 fichiers, je veux savoir combien de fois existe 'chat' dans le fichier num. 1, 2, jusqu'à 5. Est-ce que quelqu'un peut me donner une idée de comment je peux procèder pour faire cette tâche. et merci d'avance.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Il suffit de lire chaque fichier : avec un Scanner (constructeur Scanner(File source, String charsetName)), tu pourras récupérer chaque mot. Ensuite, tu peux utiliser une HashMap pour stocker les compteurs par mots sur le principe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if ( map.containsKey(mot) ) {
        map.put( mot, map.get(mot) + 1 ); // incrémenter le compteur
    } else {
        map.put( mot, 1 ); // initialiser le compteur
    }
    A la fin, la map contient les mots en clef, et leur nombre dans tous les fichiers en valeurs associées.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    c-a-d juste après la lecture des tous les fichier je fais le hashMap? et je peux pas faire la lecture avec le FileReader et le BufferedReader?

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Il faut instancier la hashmap au début, avant de boucler sur les fichiers (si tu le faisais après, comment pourrais-tu y stocker quoique ce soit pendant la lecture des fichiers ?).

    Tu peux lire les fichiers ligne à ligne par FileReader, et utiliser split() pour découper les lignes, mais c'est aussi simple sinon plus de le faire par scanner qui fait le split sur whitespace par défaut (donc on lit directement des mots). On peut également changer le délimiter pour traiter aussi la ponctuation s'il faut.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    désolé, mais j'ai pas compris ce que vous avez dit

    et voila ce que j'ai fiat (je sias que ce pas juste mais .. aide moi a le corriger je vous en pris)

    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
     
    package readfile;
     
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.File;
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
     
    public class ReadFile {
     
        public static void main(String[] args) throws FileNotFoundException, IOException {
     
            String mot = "chat";
            String target_dir = "D:/dic";
            File dir = new File(target_dir);
            File[] files = dir.listFiles();
            Map<String, Integer> map = new HashMap<String, Integer>();
     
            for (File f : files) { 
                if(f.isFile()) {
                    BufferedReader inputStream = null;
     
                    try {
                        inputStream = new BufferedReader(new FileReader(f));
                        String line;
     
                        while ((line = inputStream.readLine()) != null) {
                            System.out.println(line);
                        }
     
                        if ( map.containsKey(mot) ) {
                            map.put( mot, map.get(mot) + 1 ); // incrémenter le compteur
                        } else {
                            map.put( mot, 1 ); // initialiser le compteur
                        }
                        System.out.println(map.get(mot));
                    }
     
                    finally {
                        if (inputStream != null) {
                            inputStream.close();
                        }
                    }
                }
            }
        }
    }

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Si tu n'as qu'un seul mot à chercher, tu n'as même pas besoin de map : un int suffit pour compter les mots qui sont égaux au mot cherché.

    Mais il faut au moins découper les lignes lues en mots :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    while ((line = inputStream.readLine()) != null) {
         //System.out.println(line);
         String[] motsDansLaLigne = line.split(" "); // par exemple pour découper selon les espaces (attention s'il y a de la ponctuation ça ne suffit pas)
         for( String motDansLaLigne : motsDansLaLigne ) {
                 if ( motDansLaLigne.equals( mot ) ) { // si le mot cherché est trouvé
                      compteur++; // on le compte
                 }
         }
    }
    Evidemment, il faut déclarer le compteur avant la boucle, et l'afficher après (idem si tu utilises une map, il faut afficher son contenu après) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int compteur=0
     
    for (File f : files) { 
    ...
     
    }
     
    System.out.println("Le mot " + mot + " a été trouvé " + compteur + " fois.");

    NB: tu peux simplifier le try/finally qui sert à fermer le reader :
    Au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    BufferedReader inputStream = null;
     
                    try {
                        inputStream = new BufferedReader(new FileReader(f));
     
                        ...
     
                    }
     
                    finally {
                        if (inputStream != null) {
                            inputStream.close();
                        }
                    }
    Tu peux écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try ( BufferedReader inputStream = new BufferedReader(new FileReader(f)) ) {
     
     ...
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/05/2011, 09h30
  2. rechercher un mot clé dans plusieurs fichiers
    Par nicekiller dans le forum Langage
    Réponses: 4
    Dernier message: 28/04/2010, 18h45
  3. changer un mot dans plusieurs fichiers
    Par duaner dans le forum Développement
    Réponses: 2
    Dernier message: 27/06/2007, 13h58
  4. Ecrire un mot dans un fichier texte existant
    Par Mickey.jet dans le forum Delphi
    Réponses: 10
    Dernier message: 26/02/2007, 23h23
  5. Module de recherche de mots dans plusieurs fichiers
    Par hat_et_m dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 24/09/2006, 20h09

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