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 :

LineNumberReader ne lit que la premiere ligne de mon fichier


Sujet :

Entrée/Sortie Java

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 14
    Points : 14
    Points
    14
    Par défaut LineNumberReader ne lit que la premiere ligne de mon fichier
    Bonjour !
    J'ai une liste de mots dans un fichier txt dans lequel je souhaite tirer un mot au hasard
    Voici le code que j'utilise :

    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
    String str = "";
    		int nbre = (int)(Math.random()*336000);
    		if(debug) System.out.println("====> Nombre : " + nbre);
    		try {
     
    			LineNumberReader lnr = new LineNumberReader(new FileReader(new File("mots.txt")));
    			lnr.setLineNumber(nbre);
    			if(debug) System.out.println("**** Nombre : " + nbre + "\n\n Ligne : " + lnr.getLineNumber());
    			str = lnr.readLine();
     
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e){
     
    		}
    Le probleme est que le mot tiré est toujours le premier ! Pourtant, en vérifiant grâce aux Sysout :
    - nbre est bien tiré aléatoirement entre 0 et 336000
    - le nombre de la ligne est bien égal à nbre après l'avoir modifié grace à setLineNumber
    Donc, pourquoi la ligne lue est toujours la premiere ?

    Merci d'avance de votre aide!

  2. #2
    Membre du Club Avatar de dark.jabberwock
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2009
    Messages : 38
    Points : 61
    Points
    61
    Par défaut
    Bonsoir,

    Je n'ai pas vraiment de réponse vis-à-vis de ta question mais tu peux toujours le code suivant pour solutionner ton problème. J'ai fait deux/trois tests en local, ça prend un peu de temps pour lire mon fichier de 1021651 lignes pour aller jusqu'au bout. En gros environ 75ms de moyenne.

    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
    	public class ReadLineTest {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		for (int i = 0; i < 100; i++) 
    			test();
    	}
     
    	private static void test() {
    		long time = System.currentTimeMillis();
    		String str = "";
    		int nbre = (int)(Math.random()*1021651);
    		//System.out.println("====> Nombre : " + nbre);
    		try {
     
    			LineNumberReader lnr = new LineNumberReader(new FileReader(new File("D:/mots.txt")));
    			//System.out.println("**** Nombre : " + nbre);
     
    			for (int i = 0; i < nbre; i++){
    				lnr.readLine();
    			}
    			str = lnr.readLine();
    			//System.out.println("**** String : " + str);
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e){
     
    		}
    		System.out.println("Time : " + (System.currentTimeMillis() - time));
    	}
     
     
    }

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 14
    Points : 14
    Points
    14
    Par défaut
    Merci beaucoup ! Ca marche !

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 619
    Points
    21 619
    Par défaut
    Juste pour information, setLineNumber() ne sert pas à avancer dans la lecture.

    Il sert à dire au Reader "en fait, j'ai déjà lu un certain nombre de lignes sans passer par toi. Nous en sommes actuellement à la ligne <indiquée par setLineNumber()> et non pas la ligne 1. Donc compte les lignes en considérant que la ligne actuelle porte le numéro que je t'ai dit, s'il te plaît."

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

Discussions similaires

  1. Ne lit que la premiere entrée
    Par steph70 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 07/10/2011, 09h00
  2. oucle qui ne lit pas la premiere ligne du fichier?
    Par areuh_fr dans le forum Langage
    Réponses: 6
    Dernier message: 22/04/2010, 09h22
  3. [MySQL] Boucle qui ne lit que la dernière ligne
    Par YaNnTeB dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 21/08/2009, 10h56
  4. [CSV] Ne lire que la premiere ligne d'un fichier CSV
    Par passie dans le forum Langage
    Réponses: 7
    Dernier message: 05/07/2006, 12h02
  5. Supprimer la premiere ligne d'un fichier
    Par Kahiba dans le forum Langage
    Réponses: 7
    Dernier message: 11/02/2003, 10h18

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