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. #21
    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
    et en 1.4 il n'y a ni vector ni ArrayList ?

  2. #22
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Si elles existent, mais les génériques non (cad le <String> )
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  3. #23
    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
    essais sans les génériques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List listeLignes=new ArrayList();

  4. #24
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Concernant ce problème : "sélectionner une ligne au hasard dans un fichier", il y a une solution très élégante et quasi miraculeuse qui ne nécessite de lire le fichier qu'une seule fois, sans devoir tout stocker, il suffit d'utiliser l'algorithme suivant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Ouvrir Fichier
     
    Int i <- 1;
    String LigneSelectionnee <- "";
     
    Tant que Fichier non vide :
        String Ligne <- LireLigne Fichier;
        Si Random(i) = 1 : // Avec une probabilité de 1/i
            LigneSelectionnee <- Ligne;
        i++;
    Et après cela, LigneSelectionnee est une ligne choisi de façon équiprobable dans le Fichier... Faites le calcul vous même !

    C'est à mon sens la meilleure solution.

    --
    Jedaï

  5. #25
    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 Jedai
    Concernant ce problème : "sélectionner une ligne au hasard dans un fichier", il y a une solution très élégante et quasi miraculeuse qui ne nécessite de lire le fichier qu'une seule fois, sans devoir tout stocker, il suffit d'utiliser l'algorithme suivant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Ouvrir Fichier
     
    Int i <- 1;
    String LigneSelectionnee <- "";
     
    Tant que Fichier non vide :
        String Ligne <- LireLigne Fichier;
        Si Random(i) = 1 : // Avec une probabilité de 1/i
            LigneSelectionnee <- Ligne;
        i++;
    Et après cela, LigneSelectionnee est une ligne choisi de façon équiprobable dans le Fichier... Faites le calcul vous même !

    C'est à mon sens la meilleure solution.

    --
    Jedaï
    Ca dépend si on ne veut faire qu'une seule fois un "random" pour choisir une ligne de fichier... Si c'est à faire plein defois, mieux vaut stocker le fichier en mémoire, s'il n'est pas trop gros (les accès disque sont coûteux)...

  6. #26
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par ®om
    Ca dépend si on ne veut faire qu'une seule fois un "random" pour choisir une ligne de fichier... Si c'est à faire plein defois, mieux vaut stocker le fichier en mémoire, s'il n'est pas trop gros (les accès disque sont coûteux)...
    Je crois que tu n'as pas compris... Avec ma solution, le numéro de la ligne qu'on obtient à la fin est équiprobable parmi l'ensemble des lignes du document, mais on ne lit le document qu'une fois. C'est bien meilleur que de stocker l'intégralité du document dans un tableau puis de faire un random. Quant aux accès disque, n'oublie pas que de toute façon, on emploie un tampon (via une classe qui le gère en interne), il n'y a donc que très peu d'accès disque, en tout cas pas plus que dans une autre méthode.

    Le fait que je fasse plusieurs fois appel à random n'a rien à voir avec la lecture du document.

    --
    Jedaï

  7. #27
    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 Jedai
    Je crois que tu n'as pas compris... Avec ma solution, le numéro de la ligne qu'on obtient à la fin est équiprobable parmi l'ensemble des lignes du document, mais on ne lit le document qu'une fois. C'est bien meilleur que de stocker l'intégralité du document dans un tableau puis de faire un random. Quant aux accès disque, n'oublie pas que de toute façon, on emploie un tampon (via une classe qui le gère en interne), il n'y a donc que très peu d'accès disque, en tout cas pas plus que dans une autre méthode.

    Le fait que je fasse plusieurs fois appel à random n'a rien à voir avec la lecture du document.

    --
    Jedaï
    Certes, mais si par exemple, il veut tirer au hasard 500 fois une ligne du fichier, il vaut mieux parcourir une fois le fichier et stocker les lignes dans un tableau, puis récupérer directement dans le tableau la ligne qui correspond (parcourir un fichier 500 fois, même s'il est en cache, est moins efficace qu'un accès en O(1) (directement dans le tableau)).

  8. #28
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par ®om
    Certes, mais si par exemple, il veut tirer au hasard 500 fois une ligne du fichier, il vaut mieux parcourir une fois le fichier et stocker les lignes dans un tableau, puis récupérer directement dans le tableau la ligne qui correspond (parcourir un fichier 500 fois, même s'il est en cache, est moins efficace qu'un accès en O(1) (directement dans le tableau)).
    Certes, j'avais mal compris ce que tu voulais dire. Dans ce cas évidemment, la solution du tableau est nettement plus adaptée, sauf s'il s'agit d'un fichier vraiment gros.

    --
    Jedaï

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

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