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

Langage Java Discussion :

Trouver un mot dans un fichier texte


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 51
    Par défaut Trouver un mot dans un fichier texte
    Salut les gens,

    Bon voila, tout est dans le titre. Ca semble super simple, pourtant j'ai cherché pendant des heures sur internet pour trouver une methode simple et efficace, pas moyen!

    Le problème est simple : j'ai un TP a faire ou on me demande d'ecrire un programme en java qui accede a un dossier puis lit les fichiers txt qui s'y trouvent un par un pour y chercher une chaîne de caractère entrée par l'utilisateurs.

    Le truc c'est que à mon uni ils sont pas tres fortiche pour apprendre le java clairement, du coup on est un peu dans une optique du "débrouille toi". Au semestre dernier on a vu les flux de fichiers tout ca, donc acceder a un fichier, le lire, en créer un tout ca je sais a peu pres faire (si j'ai pas deja oublié ).

    Mais la j'avoue je bloque...j'ai vu par ci par la qu'on pouvait utiliser les tokenizer (qu'on a a peine survolé donc super) ou le indexOf. IndexOf me paraît etre la façon la plus simple d'arriver a mes fins mais l'exemple qu'on nous a donné de l'utilisation de indexOf c'est tout simplement le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String s = "bonjour" //on crée un String
    ...
    System.out.println("Il y a "+s.indexOf('j'))+" occurances de j dans bonjour"); // ici ca nous renvoit donc "il y a 1 occurance de j dans bonjour".
    Mais voila...moi c'est a partir d'un fichier que je dois faire ca et j'avoue que je sais pas trop comment m'y prendre . Mettre tout ce qui se trouve dans le fichier dans un tableau de string?

    Si quelqu'un aurai une idée et un bout de code pour que ce soit plus clair que me renvoyer juste des methodes a utiliser (ouai je suis exigent ), ca cherai gentil

    Bonne soirée et bon w-e

  2. #2
    Membre émérite
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Par défaut
    Salut

    Tu dois rechercher un mot ou une occurrence ? Je veux dire, si l'utilisateur tape "jour", est-ce que le programme est supposé indiquer que le "mot" a été trouvé dans "bonjour" ?
    Supposons que oui, alors la méthode java.lang.String.indexOf() peut être une solution parmi d'autres.
    Tu lis le fichier ligne par ligne avec la méthode readLine() de ton flux de lecture et tu regardes si le mot s'y trouve, sachant que readLine() te renvoie un String contenant la ligne entière. A partir de là, c'est facile je pense.
    N'hésite pas à demander plus de détails si tu bloques

    Nas'

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 51
    Par défaut
    Salut nasky,

    Deja merci pour ton aide

    Alors, selon le TP "ecrivez un programme qui accede à ce repertoire (note : un fichier zip qui une fois dézippé contient 5 fichiers txt) et lit ses fichiers un par un pour y chercher une expression réguliere (chaine de caracteres donnée (passée en parametre de la méthode main). Le programme affichera comme réponses les noms des fichiers contenant l'expression etc..."

    Donc moi je le comprends comme ca : si on entre "jour", le programme devra trouver "jour" et non pas "bonjour" par exemple.

    Enfin bon, je vais essayer ce que tu me proposes demain, se fait un peu tard pour javater

    Merci!

    +++

  4. #4
    Membre émérite
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Par défaut
    Ah, "expression régulière" ça pourrait être une vraie expression régulière et non "mot". Dans ce cas, il faudrait passer par les classes Scanner et Pattern je pense.
    Sinon, si c'est effectivement un mot qu'il faut chercher alors soit tu fais comme j'ai dit si c'est une occurrence. Soit tu décomposes chaque ligne en mot et tu compares au mot recherché.
    Pour décomposer selon le séparateur espace, tu passes effectivement par StringTokenizer par exemple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    String ligne ;
    StringTokenizer st = new StringTokenizer(ligne);
    // tant qu'il y a un mot séparé par l'espace
    while(st.hasNext())
    { 
       st.next() ; // mot séparé par l'espace
    }
    Javate bien demain

    Nas'

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 51
    Par défaut
    Bon...j'essayes d'implémenter indexOf correctement mais c'est...foireux ?

    J'ai 5 fichiers textes dans le dossier. Selon le TP le prog doit les lire 1 par 1 pour y trouver la chaîne de caractères, mais comme je suis pas super doué, pour l'instant je ne m'occupe que d'un fichier!

    Bref voila le code que j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    File fichier = new File ("./textes/texte1.txt");
    	  FileReader fr = new FileReader(fichier);
    	   BufferedReader br = new BufferedReader(fr);
    			String s1 = br1.readLine();
    				/*while(br1.ready()) {  // si j'ai envie d'afficher le texte dans la console...
    					System.out.println(br1.readLine());
    				}*/
    					System.out.println("votre recherche : "+s+" apparait "+s1.indexOf(s)+" fois.");
    PS : le string "s" est ce que l'utilisateur à entré au clavier, le code pour ca est juste au dessus de try mais je ne l'ai pas mis.

    Alors voila, j'ai réussit a créer le plus mauvais moteur de recherche dans l'histoire de l'informatique ^^. Disons que pour le tester, j'ouvre le fichier texte1 pi je regarde ce qu'y a comme mot : si je lui donne "nordique" pour lui il apparaît "-1 fois" (Alors qu'il est dans le texte). Par contre "en" apparaît 33 fois
    Je suis sur que tu vas me dire que le probleme, c'est qu'il ne lit pas ligne par ligne je me trompe? Suis pas trop sur de ce que je dois ajouter pour qu'il le fasse...j'ai bien conscience que mes questions sont plutot assez n00besques mais bon

  6. #6
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    readLine te renvoi une ligne, donc oui tu lis bien ligne par ligne.
    Le indexOf ne renvoi pas l'index du mot ( sous entendu qu'un mot est entouré d'espace(s) ) mais l'indexe de la chaine ( qu'il y ait ou non des espaces avant et/ou après ). StringTokenizer permet de décomposer la ligne en mots ( qui eux sont séparés par des espaces ).
    pour le -1 que tu récupère, c'est que cette chaine n'est pas présente dans la chaine, si elle l'était tu aurais un indice supérieur ou égale à 0 donnant l'endroit où la première occurence se trouve dans la ligne.

    Sinon pour compter le nombre de fois où un mot est dans un fichier, il faut utiliser un compteur que tu incrémenteras à chaque fois qu'il à été trouvé dans la ligne lue.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    int compt=0;
    String line=null;
    while((line=br.readLine())!=null){
       StringTokenizer st=new StringTokenizer(line);
       while(st.hasMoreTokens()){
          if(st.nextToken().equals("leMotRecherché")){
             compt++;
          }
       }
    }
    System.out.println("Le mot a été trouvé "+compt+" fois.");

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. trouver un mot dans un fichier
    Par samaa dans le forum Langage
    Réponses: 4
    Dernier message: 04/03/2007, 16h21
  2. Ecrire un mot dans un fichier texte existant
    Par Mickey.jet dans le forum Delphi
    Réponses: 10
    Dernier message: 26/02/2007, 23h23
  3. Réponses: 10
    Dernier message: 29/04/2006, 10h40
  4. Trouver un mot dans un fichier texte
    Par godik dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 10/03/2006, 14h31
  5. Réponses: 4
    Dernier message: 16/12/2005, 17h43

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