Partage
  • Partager sur Facebook
  • Partager sur Twitter

[java]extraction de donnés d'un fichier d'une façon aléatoire

Sujet résolu
    24 mars 2007 à 23:59:21

    salut à tous,
    je voudrai savoir comment on peut extraire des donnés d'un fichier d'une maniere aleatoire(biensur mes données dans le fichier se présentent sous forme de chiffres dans chaque ligne)
    j'ai pensé a la classe RandomAccessFile :euh:

    RandomAccessFile f=new RandomAccessFile("fichier.txt");
    chiffre=f.readLine();

    mais apparement c pa la solution pour mon prob..
    merci pour votre aide :)
    • Partager sur Facebook
    • Partager sur Twitter
      25 mars 2007 à 0:51:28

      ton sauveur est de retour :lol:

      grosso modo, t'a plein de lignes dans ton fichier, et chaque ligne contient un nombre.. Et tu veux obtenir, au hasard, un de ces nombre-là... est-ce bien cela? :euh:

      et hum, le fait que "RandomAccessFile" contiennent "random" dans son nom ne veux pas dire qu'il fait des trucs aléatoire :lol::lol: (mais bon, j'y ai cru aussi, au début xD)

      EDIT : bon, je crois bien que c'est ça, donc je vais t'expliquer comment procéder :

      ~ En premier, on fait une méthode pour obtenir le nombre de ligne que le fichier contient :
      public int getNombreDeLigne(String cheminFichier) throws Exception {
                              int line = 1;
                              RandomAccessFile file = new RandomAccessFile(cheminFichier,"r");
                              for (int i = 0; file.readLine() != null; i++)
                                      line++;
                              file.close();
                              return line;
                      }


      ~ Ensuite, on crée une classe qui envoie un Integer au hasard entre deux nombre... et comme je suis généreux, je vais te le donner ^^ :

      public class RandomInt {
                 public RandomInt(int l, int h)
                 {  low = l;
                    high = h;
                 }
                 
                 public int draw()
                 {  int r = low
                       + (int)((high - low + 1) * nextRandom());
                    if (r > high) r = high;
                    return r;
                 }
             
                 private static double nextRandom()
                 {  int pos =
                       (int)(java.lang.Math.random() * BUFFER_SIZE);
                    if (pos == BUFFER_SIZE) pos = BUFFER_SIZE - 1;
                    double r = buffer[pos];
                    buffer[pos] = java.lang.Math.random();
                    return r;
                 }
                 
                 private static final int BUFFER_SIZE = 101;
                 private static double[] buffer
                    = new double[BUFFER_SIZE];
                 static
                 {  int i;
                    for (i = 0; i < BUFFER_SIZE; i++)
                       buffer[i] = java.lang.Math.random();
                 }
                 
                 private int low;
                 private int high;
              }


      ~ Enfin, on crée la méthode qui vas te donner ton nombre au hasard, dans ton fichier :
      public int getRandomLineToInt(String cheminFichier) throws Exception {
                              int maxLine = new RandomInt(1,getNombreDeLigne(cheminFichier)).draw();
                              RandomAccessFile file = new RandomAccessFile(cheminFichier,"r");
                              for (int i = 0; i < maxLine-1; i++)
                                      file.readLine();
                              int resultat = Integer.parseInt(file.readLine());
                              file.close();
                              return resultat;
                      }


      ~ Voila!

      PS : la classe RandomInt devrait etre dans un fichier à part, nommé RandomInt.java ^^

      EDIT2 : oups, j'ai corrigé un trucs dans la dernière méthode :-S
      • Partager sur Facebook
      • Partager sur Twitter
      Altarapp.com - Applications, Code Snippets, API Wrappers et etc, le tout en C# le plus clair du temps!
        25 mars 2007 à 1:00:56

        je savais que tu viendrai :D
        en effet t'a bien compri mon prob, j'ai trouvé une solution c de mettre le tt dans un tableau, puis generer un indice aleatoire pour enfin retourner un chiffre aleatoire de mon fichier. mais s'il existe une methode ou classe ca serai mieuuu... keske t'en di?
        • Partager sur Facebook
        • Partager sur Twitter
          25 mars 2007 à 1:19:30

          c'est fait ^^ regarde mon 1er post :p
          • Partager sur Facebook
          • Partager sur Twitter
          Altarapp.com - Applications, Code Snippets, API Wrappers et etc, le tout en C# le plus clair du temps!
            25 mars 2007 à 1:28:51

            meeerci t vraiment gentil :D j'ai compris ton raisonnement mais je trouve ça un peu long, t sure qu'il n'existe pas de classe predefinie?
            et un autre truc "this.filePath" ca sert a quoi??
            merci encore ;)
            • Partager sur Facebook
            • Partager sur Twitter
              25 mars 2007 à 1:57:39

              Citation : Pas de titre

              j'ai compris ton raisonnement mais je trouve ça un peu long, t sure qu'il n'existe pas de classe predefinie?


              Pas à ma connaissance... :(

              Citation : Pas de titre

              et un autre truc "this.filePath" ca sert a quoi??


              c'est une erreur, je l'ai corrigé (regarde la derniere méthode) ^^

              Citation : Pas de titre

              merci encore ;)


              De rien :)
              • Partager sur Facebook
              • Partager sur Twitter
              Altarapp.com - Applications, Code Snippets, API Wrappers et etc, le tout en C# le plus clair du temps!
                25 mars 2007 à 20:58:47

                j'ai essayé ton code shadosan ca marche (5/5) :D
                • Partager sur Facebook
                • Partager sur Twitter

                [java]extraction de donnés d'un fichier d'une façon aléatoire

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown