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

Entrée/Sortie Java Discussion :

extraction des données du fichier txt


Sujet :

Entrée/Sortie Java

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 7
    Points : 3
    Points
    3
    Par défaut extraction des données du fichier txt
    Bonjour a tous,
    svp j'ai besoin de votre aide, j'ai un fichier .txt sous la forme suivante( c'est plutot un tableau):

    nom prenom age adresse ...
    sss e 21 m8 ..
    po up 18 po ..
    etc...

    selon le nom,je veux extraire le prenom, l'age..., j'ai essayer de travailler avec bufferedreader pour lire la ligne et puis StringTokenizer pour l'extraction des champs, mais ça marche pa
    si quelqu'un peut me donner une idée ça sera tré sympa!
    merci d'avance pour votre aide

  2. #2
    Membre expérimenté Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Points : 1 540
    Points
    1 540
    Par défaut
    Sans code & sans erreur difficile de dire d'où vient le problème
    Il était une fois [...] Et ils vécurent heureux et eurent beaucoup d'enfants!

  3. #3
    Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 7
    Points : 3
    Points
    3
    Par défaut

    voici le code:
    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
     
    		         {
    		            FileReader fr = new FileReader("c:/exemple.txt");
    		            BufferedReader br = new BufferedReader(fr);
     
    		          while (( s = br.readLine())!= null)
    		           {      			        	  
    		     	      StringTokenizer st = new StringTokenizer(s, " " );
    		      	      while(st.hasMoreTokens())
    		      	      {    
    		      	    	if(st.nextToken().equals(identifiant))
    		                  {        
    		      	    		System.out.println(st.nextToken());
    		                      chaine=chaine+s;  
    		                  }	     else System.out.println("erreur");     
    		              }
    		           }   br.close();
    		           return chaine;}
    comme résultat, il ne s'affiche que "erreur", le pbm est dans le bloc "if", je sais pa c quoi exactement, votre aide svp

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Points : 562
    Points
    562
    Par défaut
    Au lieu d'utiliser StringTokenizer, tu utiliser la fonction split

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String[] data = s.split(s, " "); 
    // Dans data tu as les donnees dans data[0], data[1], ...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    c'est normal qu'il affiche erreur car c'est exactement ce que tu lui demande, regarde ton code( tant que ta ligne contient des token il compare le next token a identifiant) meme si le 1er token = identifiant tu continue le test avec les autre tokens^^
    essaye ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	if(st.nextToken().equals(identifiant))
    		                  {        
    		      	    		System.out.println(st.nextToken());
    		                      chaine=chaine+s; 
                                                 break;
     
    		                  }
    ou tout simplement remplace ta boucle while par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if (st.hasMoreTokens())
    if au lieu de while, pers nellement je prefere la 1ere solution

    attention tu peux pas combiner les 2.

  6. #6
    Membre émérite
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Points : 2 371
    Points
    2 371
    Par défaut
    Bonjour,

    il ne s'affiche que "erreur", le pbm est dans le bloc "if"
    La chaîne "erreur" ne s'affiche que si le test conditionnel retourne false.

    Tu ne nous donne pas de valeur pour identifiant.

    Aussi, est-ce que la première ligne que tu nous donne
    (nom prenom age adresse ...) fait partie du fichier ?

    Si oui, alors en posant String identifiant = "sss"; par exemple,
    alors ta condition sera toujours fausse puisque la première chaîne tokenizée est "nom".

    Tu peut utiliser un System.out.println(); pour voir ce qui ce passe.
    Article : Installation de Cocoon
    Je ne réponds pas aux MP à caractère technique.

  7. #7
    Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    bonjour,
    tt d'abord merci pr tous pour votre aide

    Citation Envoyé par polymorphisme Voir le message

    Aussi, est-ce que la première ligne que tu nous donne
    (nom prenom age adresse ...) fait partie du fichier ?

    Si oui, alors en posant String identifiant = "sss"; par exemple,
    alors ta condition sera toujours fausse puisque la première chaîne tokenizée est "nom".
    en faite la 1ére ligne (nom prenom ...) fait partie du fichier, mais je veux faire le test sur le reste du fichier selon le nom a chaque fois(sss), puis extraire les autres données correspondantes, j'ai eu l'idée d'utiliser stringTokenizer avc /n comme separateur sur tt le fichier pour séparer les lignes puis ça sera plus simple de travailler avec "contains" ou "startsWith" sur chaque ligne, mais je sais pas si je peux travailler avec mon fichier comme étant String (StringTokenizer st = new StringTokenizer(???, "/n"))

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par micha1 Voir le message
    bonjour,
    tt d'abord merci pr tous pour votre aide


    en faite la 1ére ligne (nom prenom ...) fait partie du fichier, mais je veux faire le test sur le reste du fichier selon le nom a chaque fois(sss), puis extraire les autres données correspondantes, j'ai eu l'idée d'utiliser stringTokenizer avc /n comme separateur sur tt le fichier pour séparer les lignes puis ça sera plus simple de travailler avec "contains" ou "startsWith" sur chaque ligne, mais je sais pas si je peux travailler avec mon fichier comme étant String (StringTokenizer st = new StringTokenizer(???, "/n"))
    t'as pas besoin de separer les lignes du fichiers car stringtokenizer lira ton fichier ligne par ligne, et si aucun delimiteur n'est rencontré (dans ton cas c'est espace le delimeteur) alors elle te renvoie toute la ligne.

    quand a ton code depart, il est bon faut juste savoir sortir de la boucle quand ta condition est satisfaite d'ou le break;

  9. #9
    Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    bon,enfin un code fonctionnant si ça peux aider quelqu'un
    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
    {
    		            FileReader fr = new FileReader("c:/exemple.txt");
    		            BufferedReader br = new BufferedReader(fr);
     
    		          while (( st = br.readLine())!= null)
    		           {String s=st.trim();
    		        	  String[] data = s.split("\\s+");		        	
    		        	  if(s.startsWith(identifiant)) 
                                  /*ou encore : if(data[0].equals(identifiant))*/
    		        	  {  for(int i=1;i<data.length;i++)
    		        	 System.out.println(data[i]);		        	  
    		        	  }		        	     
    		           }   br.close();
    		         }			   
    		             catch (Exception e)
    		            {
    		               System.out.println(e.toString());
    		            }
    ça me reste un ptit pbm, en faite quand je trouve l'identifiant, faudra extraire les données des deux lignes successives, comme dans l'exp suivant:

    Identifiant 9.4 382 592 0.0 88.4
    112

    et comme résultat je dois avoir
    9.4
    382
    592
    0.0
    88.4
    112
    et avec ce code j'en ai pa le 112

  10. #10
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Points : 562
    Points
    562
    Par défaut
    ça me reste un ptit pbm, en faite quand je trouve l'identifiant, faudra extraire les données des deux lignes successives, comme dans l'exp suivant:
    Ceci implique que le format du fichier doit avoir 2 lignes comme dans ton exemple.

    Si c'est le case alors si tu trouves ton identifiant dans la ligne courante alors il suffit de lire la ligne suivante pour recuperer tes donnees

  11. #11
    Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    j'arrive pas a récuperer la ligne suivante,je sais pas ce qu'il faut insérer ds mon code,si quelqu'un a une idée svp

  12. #12
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Points : 562
    Points
    562
    Par défaut
    Si ton fichier a ce format:
    iden1 val1 val2 ....
    valn
    xxx v1 v2 v3
    iden2 aa1 aa2 aa3 aa4
    aan
    ......
    Tu peux changer ton code original
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    while (( st = br.readLine())!= null) {
        String s=st.trim();
        String[] data = s.split("\\s+");		        
        if(s.startsWith(identifiant)) /*ou encore : if(data[0].equals(identifiant))*/
        {  
             for(int i=1;i<data.length;i++)
                 System.out.println(data[i]);		        	  
        }		        	     
    }
    Par ceci (ajout d'un fonction getLine lecture du stream/ligne)

    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
     
    private String getLine(BufferedReader br) {
        return br.readLine();
    }
     
    while (true) {
        st = getLine(br);
        if (st == null {
            break;
        }
        String s=st.trim();
        if(s.startsWith(identifiant)) /*ou encore : if(data[0].equals(identifiant))*/
        {  
            String[] data = s.split("\\s+");		        
             for(int i=1;i<data.length;i++)
                 System.out.println(data[i]);
             // Lecture la ligne suivante pour recuper la valeur
             st = getLine(br);		        	  
        }		        	     
    }

  13. #13
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Italie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 21
    Points : 18
    Points
    18
    Par défaut et utiliser la classe scanner pour l'extration de données?
    Bonjour, tout d'abord pour répondre au probleme posé, même si je ne me sens pas encore capable de donner des conseils, je peux peut-être faire part de mon experience de débutante !
    J'utilise pour lire un fichier texte la classe BufferedReader et avec la methode readLine() j'enregistre la ligne dans une "String" pour après diviser la "String" grâce à la methode split() (et si il y a des nombres, les convertir grace à la methode IntegerParseInt("string représentant un entier").
    Voilà pour BufferedReader, cependant, j'ai vu qu'on pouvait aussi utiliser la classe scanner sous forme Scanner scan = new Scanner(new File("nomdufichier")); Ma question est la suivante, Scanner est-il plus "efficace" que BufferedReader? Mon prof utilise Scanner, mais moi je n'y arrive pas, il semblerait qu'à l'exectution le programme "tourne dans le vide!".
    merci pour vos réponses!

  14. #14
    Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    merciiii ça marche parfaitement mnt

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

Discussions similaires

  1. Extraire des données dans fichier txt
    Par islande dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 28/03/2013, 13h42
  2. extraction des données de fichier txt dans un tableau?
    Par lina_21 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 18/03/2010, 11h47
  3. Extraction des données vers un fichier EXCEL
    Par vanesa dans le forum SQL
    Réponses: 4
    Dernier message: 29/10/2008, 15h29
  4. Extraction des données "images" d'un fichier DICOM
    Par FloFox dans le forum Traitement d'images
    Réponses: 7
    Dernier message: 21/06/2007, 10h11
  5. [débutant]extraction des données d'un fichier xml simple
    Par ekram dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 14/03/2007, 12h24

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