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 :

Lire une enregistrement au hasard dans un fichier


Sujet :

Langage Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 135
    Points : 44
    Points
    44
    Par défaut Lire une enregistrement au hasard dans un fichier
    Bonjour,
    j'aimerais lire un enregistrement au hasard dans un fichier pour cela j'utilise pour la gestion de mon fichier :

    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
     
    File f = new File("monfichier.txt");//Ouverture du fichier pour test de présence ensuite
     
    		if (f.exists()==true)
    		{
     
    			FileReader  read = new FileReader( "monfichier.txt" );
    			BufferedReader fent = new BufferedReader( read );
    			String enr ;
     
    		// selection d'une ligne au hasard : 
    		while  ( ...) 
                   { .... 
                    }
     
     
     
     
    		fent.close( );
    Voila merci

  2. #2
    Membre régulier
    Inscrit en
    Juin 2005
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 120
    Points : 106
    Points
    106
    Par défaut
    et quel est ton problème ?
    La sélection du numéro de ligne ?
    L'arret sur la bonne ligne ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 135
    Points : 44
    Points
    44
    Par défaut
    Salut,


    La selection et l'arret sur une ligne aléatoire.

    Merci

  4. #4
    Membre régulier
    Inscrit en
    Juin 2005
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 120
    Points : 106
    Points
    106
    Par défaut
    Ben pour la sélection d'un ligne, il doit y avoir une fonction Math.random tu devrait pouvoir récupérer un numéro de ligne. Après, une boucle while avec un compteur pour le nombre de ligne devrait fonctionner.

    Le problème, c'est que tu n'as aucun moyen pour connaitre le nombre de ligne de ton fichier et à mon avis, c'est là ou ca va merder.

  5. #5
    Membre confirmé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Points : 645
    Points
    645
    Par défaut
    Citation Envoyé par mymyma
    Le problème, c'est que tu n'as aucun moyen pour connaitre le nombre de ligne de ton fichier et à mon avis, c'est là ou ca va merder.
    A part faire un readLine() en boucle dessus jusqu'à tomber sur la fin en incrémentant un compteur.
    Je sais que désormais vivre est un calembour,
    La mort est devenue un état permanent,
    Le monde est aux fantômes, aux hyènes et aux vautours.
    Moi je vous dis bravo et vive la mort.

  6. #6
    Membre confirmé Avatar de Scorpyosis
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2004
    Messages : 365
    Points : 570
    Points
    570
    Par défaut
    ou sinon parcourir tout ton fichier, stocker les lignes dans une ArrayList et faire un random avec la taille de celle-ci.
    Les deux principales inventions sorties de Berkeley sont UNIX et le LSD. Difficile de croire à une quelconque coïncidence - Jeremy S. Anderson

    Avant de vouloir qu’un logiciel soit réutilisable, il faudrait d’abord qu’il ait été utilisable - Ralph Johnson

  7. #7
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Ou alors utilise RandomAccessFile

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 135
    Points : 44
    Points
    44
    Par défaut
    SAlut,

    En effet "RandomAccessFile" s'avererais trés puissant par contre le probléme est que je lis enregistrement par enregistrement ( chaine par chaine ) et donc je ne peut pas positionner le curseur ( avec un seek( position) ) par exemple car je ne peut que me deplacer caractere par caractere avec cette methode.

    Merci

  9. #9
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par bonjour69
    SAlut,

    En effet "RandomAccessFile" s'avererais trés puissant par contre le probléme est que je lis enregistrement par enregistrement ( chaine par chaine ) et donc je ne peut pas positionner le curseur ( avec un seek( position) ) par exemple car je ne peut que me deplacer caractere par caractere avec cette methode.

    Merci
    Tu tombes à un endroit au hasard, et après tu reviens un peu en arrière (sur le dernier début de chaîne)...

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 135
    Points : 44
    Points
    44
    Par défaut
    Salut,


    hum désolé j'ai un peu de mal, a essayer d'organiser tout cela avec la fonction RandomAccessFile surtout dans le fait d'extraire ensuite la chaine entiere ( aleatoire la selection biensur vu ).

    Merci

  11. #11
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par bonjour69
    Salut,


    hum désolé j'ai un peu de mal, a essayer d'organiser tout cela avec la fonction RandomAccessFile surtout dans le fait d'extraire ensuite la chaine entiere ( aleatoire la selection biensur vu ).

    Merci
    Plusieurs lignes "texte" d'un fichier sont séparées par '\n' ou "\r\n"...

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 135
    Points : 44
    Points
    44
    Par défaut
    bonjour,

    Et bien finalement j'ai opté pour le choix de compter les lignes:
    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
    FileReader  read = new FileReader( "monfichier.txt" );
    			BufferedReader fent = new BufferedReader( read );
    			BufferedReader fent2 = new BufferedReader( read );
     
    			String enr ;
     
    		// selection d'une ligne au hasard :
    			// etape 1 : calcul du nombre de citation
    				int nbreCitation = 0;
    				while ( ( enr =  fent.readLine()) != null )
    				{
    					nbreCitation++;
    				}
     
     
    			// selection de la ligne
    				while ( nbreCitation > 0 )
    				{
    					nbreCitation--;
     
    					enr =  fent2.readLine();
     
    				}
                                   System.out.println(enr);
    le probléme c'est qu'il m'affiche : null, quand dans ma deuxieme boucle avec le compteur il n'est pas revenu au debut du fichier donc il bloque au null. il y aurais un moyen de détourner ce probléme ?

    Merci

  13. #13
    Membre régulier
    Inscrit en
    Juin 2005
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 120
    Points : 106
    Points
    106
    Par défaut
    Ferme le fichier et rouvre le après ta première boucle

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 135
    Points : 44
    Points
    44
    Par défaut
    Pour le fermer je fais : fent.close( );


    mais pour le réouvrir je fais comment je réalloue le buffer ?
    Merci

  15. #15
    Membre confirmé Avatar de Scorpyosis
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2004
    Messages : 365
    Points : 570
    Points
    570
    Par défaut
    Je te mets le code pour la solution que j'avais proposé au cas ou....

    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
     
     
    try{
           FileReader  fr = new FileReader( "Fichier.txt" ); 
           BufferedReader br = new BufferedReader(fr);
           ArrayList<String> listeLigne = new ArrayList<String>();
     
           String ligne ;
     
           while ( ( ligne =  fent.readLine()) != null )
           {
                 listeLigne.add(ligne);
           }
     
            br.close();
     
            int hasard = (int)(Math.random() * listeLigne.size()) ;				
     
            System.out.println(listeLigne.get(hasard));
     
    }
    catch(Exception e)
    { 
           e.printStackTrace();
    }
    Les deux principales inventions sorties de Berkeley sont UNIX et le LSD. Difficile de croire à une quelconque coïncidence - Jeremy S. Anderson

    Avant de vouloir qu’un logiciel soit réutilisable, il faudrait d’abord qu’il ait été utilisable - Ralph Johnson

  16. #16
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par Scorpyosis
    Je te mets le code pour la solution que j'avais proposé au cas ou....

    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
     
     
    try{
           FileReader  fr = new FileReader( "Fichier.txt" ); 
           BufferedReader br = new BufferedReader(fr);
           ArrayList<String> listeLigne = new ArrayList<String>();
     
           String ligne ;
     
           while ( ( ligne =  fent.readLine()) != null )
           {
                 listeLigne.add(ligne);
           }
     
            br.close();
     
            int hasard = (int)(Math.random() * listeLigne.size()) ;				
     
            System.out.println(listeLigne.get(hasard));
     
    }
    catch(Exception e)
    { 
           e.printStackTrace();
    }
    Le .close() devrait être dans un finally, et sinon, je trouve que c'est bien pratique la classe java.util.Scanner plutôt que BufferedReader

  17. #17
    Membre confirmé Avatar de Scorpyosis
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2004
    Messages : 365
    Points : 570
    Points
    570
    Par défaut
    Oui c'est vrai le close doit être dans le finally, et pour Scanner j'ai encore les reflexes de la 1.4 Je ne cherchais pas à faire dui code 'pur' d'ailleurs je ne l'ai même pas testé, c'était pour l'idée, car la solution de lire tout le fichier pour compter le nombre de ligne, et reparcourir le fichier, je la trouvais bof bof...
    Les deux principales inventions sorties de Berkeley sont UNIX et le LSD. Difficile de croire à une quelconque coïncidence - Jeremy S. Anderson

    Avant de vouloir qu’un logiciel soit réutilisable, il faudrait d’abord qu’il ait été utilisable - Ralph Johnson

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 135
    Points : 44
    Points
    44
    Par défaut
    dsl

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 135
    Points : 44
    Points
    44
    Par défaut
    Salut,

    sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ArrayList<String> listeLigne = new ArrayList<String>();
    j'ai cette erreur surprenante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    java:38: '(' or '[' expected
    			ArrayList<String> listeLigne = new ArrayList<String>();
                                                                                      ^
    1 error
     
    Processus terminé avec code quitter 1
    Voila merci

  20. #20
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par bonjour69
    Salut,

    sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ArrayList<String> listeLigne = new ArrayList<String>();
    j'ai cette erreur surprenante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    java:38: '(' or '[' expected
    			ArrayList<String> listeLigne = new ArrayList<String>();
                                                                                      ^
    1 error
     
    Processus terminé avec code quitter 1
    Voila merci
    Il faut java 1.5...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Toutes versions] Lire une partie de données dans un fichier.txt
    Par arthson dans le forum VBA Access
    Réponses: 0
    Dernier message: 18/07/2012, 22h31
  2. Réponses: 16
    Dernier message: 19/08/2010, 15h25
  3. Réponses: 2
    Dernier message: 21/07/2010, 14h51
  4. [MySQL] Comparez l'enregistrement de commentaires dans un fichier texte ou dans une BD
    Par gecko642 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/11/2009, 12h27
  5. Réponses: 0
    Dernier message: 11/02/2008, 18h01

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