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 :

[Debutant] Lecture de fin de ligne StreamTokenizer


Sujet :

Entrée/Sortie Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 43
    Points : 25
    Points
    25
    Par défaut [Debutant] Lecture de fin de ligne StreamTokenizer
    Salut,

    Je souhaite lire dans un fichier qui contient une suite de ligne d'entier separé par des espaces ou des sauts de ligne et ainsi placer ces chiffres dans des listes chainées (que je n'ai pas encore codé).

    Pour se faire j'utilise ce code qui est une version un peu modifiée d'un code trouvé sur internet.

    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
     
    import java.io.*;
     
    class Lire { 
     
    	public static void main (String[] argv) throws IOException { 
     
    		FileReader fichier = new FileReader("toto.txt");
    		StreamTokenizer entree = new StreamTokenizer(fichier); 
     
     
    		while(entree.nextToken() != StreamTokenizer.TT_EOF){			
    			switch(entree.ttype) {
    				case StreamTokenizer.TT_EOL:
    					System.out.println(" -----> On SAUTE une ligne");
    					break;
    				case StreamTokenizer.TT_NUMBER:
    					System.out.println((int)entree.nval);
    					break;
    				case StreamTokenizer.TT_WORD:
    					System.out.println(entree.sval);
    					break;
    				}
    			}
    		fichier.close();
    	}
    }
    Ce code marche parfaitement en ce qui concerne la lecture dans le fichier et le decoupage des entiers mais il ne comprend pas le saut de ligne (normalement affiché avec un System.out.println(" -----> On SAUTE une ligne");.
    Ce qui veut dire que si je n'arriverai pas a faire la difference entre 2 lignes d'un fichier.

    J'aimerai savoir ce qui cloche dans ce code car j'ai fait a peu pres tout les test qu'il etait possible de faire sans resultt .

    pss: Je voudrais aussi pouvoir mesurer le temps d'execution de ce bout de code plus particulierement dans le programme. C'est possible en java ?

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

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Tu n'as pas trop compris l'interet du StringTokenizer : celui-ci te permet de récupérer tous les tokens SAUF les séparateurs et le saut de ligne fait partie de ces séparateurs. Il est donc normale que cela ne fonctionne pas.
    Pour détecter les saut de lignes tu peux faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    BufferedReader br=new BufferedReader(new FileReader("monFichier"));
    String line=null;
    while((line=br.readLine())!=null){
       StringTokenizer st=new StringTokenizer(ligne);
       While(st.hasMoreTokens()){
          ...
       }
       System.out.println("Fin de ligne detectée.");
    }
    Pour mesurer le temps tu peux fair appel à la méthode System.currentTimeMillis en début et en fin de code, puis à la fin, faire une difference entre les deux qui te donnera le nombre de millisecondes écoulées.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    Merci iohack,

    J'avais utilisé StreamTokenizer a la place de StringTokenizer parce que j'avais compris que ca me permetais de lire directement dans un fichier.
    Ta methode est quand meme bien plus simple et pour ce qui est du timer j'etais parti chercher vers des trucs bien trop compliqué .

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

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Mer.. au temps pour moi, c'est moi qui ai mal lu, j'ai lu ( trop vite ) StringTokenizer à la place de StreamTokenizer
    Enfin si ça règle ton problème tant mieux

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/06/2008, 11h48
  2. Lecture d'un fichier par flots : fin de ligne ?
    Par Loïc B. dans le forum C++
    Réponses: 4
    Dernier message: 07/11/2007, 21h02
  3. [Debutant]Caractère de fin ligne
    Par smutmutant2003 dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 12/07/2007, 16h49
  4. debutant lecture de plusieur variable sur une meme ligne
    Par Slumpy dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 16/06/2006, 19h37
  5. [debutant]lecture fichier ligne par ligne
    Par Battosaiii dans le forum C
    Réponses: 2
    Dernier message: 13/11/2005, 19h02

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