Partage
  • Partager sur Facebook
  • Partager sur Twitter

Listage fichier d'un répertoire

Sujet résolu
    16 juillet 2011 à 15:46:06

    Bonjour à tout les zér0s !

    J'ai des fichiers TXT dans un répertoire nommé 'records'.
    Les nom des fichiers TXT corresponds à des pseudos et les fichiers contiennent un chiffre seulement.
    J'aimerais faire un classement par rapport au chiffre que contienne les fichiers (Classement de 5 fichiers).

    Si par exemple, dans le répertoire, j'ai 6 fichier TXT :
    - Pseudoa.txt (Contient le chiffre 6)
    - Pseudob.txt (Contient le chiffre 8)
    - Pseudoc.txt (Contient le chiffre 5)
    - Pseudod.txt (Contient le chiffre 3)
    - Pseudoe.txt (Contient le chiffre 7)
    - Pseudof.txt (Contient le chiffre 4)

    J'aimerais récupérer dans une variable String ceci :

    Citation : Variable String

    \nPseudob - 8\nPseudoe - 7\nPseudoa - 6\nPseudoc - 5\nPseudof - 4



    Je veux donc récupéré que les 5 premiers seulement.

    Je ne sais pas du tout comment faire. Pourriez-vous m'aider s'il vous plait ?

    Cordialement, Corentin.
    • Partager sur Facebook
    • Partager sur Twitter
      16 juillet 2011 à 16:19:19

      Salut,

      Pourquoi ne fais tu pas une seul et unique fichier nommé "records" avec dedans une ligne par personne + chiffre ?

      Il te suffirait ensuite de parcourir ligne par ligne pour récupérer les données
      • Partager sur Facebook
      • Partager sur Twitter
        16 juillet 2011 à 16:21:43

        Oui mais la, sa serais difficile de modifier le fichier car j'ai besoin de le modifier par moment :x
        • Partager sur Facebook
        • Partager sur Twitter
          16 juillet 2011 à 16:27:04

          Le fichier contient quoi exactement ?
          • Partager sur Facebook
          • Partager sur Twitter
            16 juillet 2011 à 16:29:55

            bah là, j'ai plusieurs dizaines de fichiers qui contiennent tous juste 1 seul nombre.
            • Partager sur Facebook
            • Partager sur Twitter
              16 juillet 2011 à 16:41:42

              Tu peux aussi créer un seul fichier contenant toutes les données, que tu récupères en début de programme. Tu utilises et modifies ces données autant que tu veux, et à la fin du programme tu tris en fonction du chiffre et ensuite tu remets les données dans le fichier.

              Tu n'aurais pas a trier a chaque fois étant donné qu'ils seront déjà trié.
              • Partager sur Facebook
              • Partager sur Twitter
                16 juillet 2011 à 16:43:42

                Mon programme tourne en boucle pendant plusieurs heures et les données sont changé plusieurs fois par minutes, ta solution ne me va pas. IL n'y a pas moyen de faire ce que j'ai demander ? :x
                • Partager sur Facebook
                • Partager sur Twitter
                  16 juillet 2011 à 17:34:09

                  Récupérer toutes les données ne prends pas beaucoup de temps..

                  Pour en revenir à ton problème initial, je ne vois pas ce qui pose problème. Tu butes a quel endroit ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    16 juillet 2011 à 17:35:46

                    Bah je suis débutant en Java, je ne sais pas du tout comment faire. La seul chose que je sais faire, c'est mettre dans une variable String le contenu d'un fichier TXT grâce à ces fonctions :

                    public String getContenuFichier(String fileName) {
                        String resultat = "";
                        try {
                            File file = new File(fileName);
                            int size = (int) file.length();
                            int chars_read = 0;
                            FileReader in = new FileReader(file);
                            char[] data = new char[size];
                            while(in.ready()) {
                                chars_read += in.read(data, chars_read, size - chars_read);
                            }
                            resultat = new String(data);
                            in.close();
                        } catch (IOException e) { }
                        return resultat;
                    }
                    
                    public int getContenuFichierNombreRecord(String pseudo) {
                        return Integer.parseInt(getContenuFichier("C:\\Users\\Corentin\\Desktop\\BOT\\records\\"+pseudo+".txt"));
                    }
                    
                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 juillet 2011 à 18:21:16

                      Bonjour

                      tu enregistre dans un premier fichier le nom de tout tes fichiers, un nom par lignes, ton programme ne connaîtra que ce nom et ensuite grâce à cette première lecture tu obtient le nom des autres fichiers et tu peut donc les lire 1 par 1 et les modifier.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        16 juillet 2011 à 18:26:10

                        Mais je ne veux pas créer d'autre fichiers.


                        Bon, j'ai commencé à essayer de codé la fonction que je souhaite obtenir à l'aide de quelques recherche sur google :
                        public String getSurvivorClassement() {
                            String classement = "";
                                        
                            File repertoire = new File("C:\\Users\\Corentin\\Desktop\\BOT\\records");
                            String[] listeFichiersNom;
                            int[] listeFichiersNombre = null;
                            listeFichiersNom = repertoire.list();
                                    
                            int i;  
                            for(i = 0; i < listeFichiersNom.length; i++) {
                                listeFichiersNombre[i] = Integer.parseInt(getContenuFichier(listeFichiersNom[i]));
                                listeFichiersNom[i] = listeFichiersNom[i].replaceAll(".txt", "");
                            }
                        
                            // Ordonnage des listes
                                        
                            classement = "\n1. "+listeFichiersNom[0] +" - "+listeFichiersNombre[0]+"\n2. "+listeFichiersNom[1]+" - "+listeFichiersNombre[1]+"\n3. "+listeFichiersNom[2]+" - "+listeFichiersNombre[2]+"\n4. "+listeFichiersNom[3]+" - "+listeFichiersNombre[3]+"\n5. "+listeFichiersNom[4]+" - "+listeFichiersNombre[4];
                                        
                            return classement;
                        }
                        


                        Je n'est pas tester mais normalement, ceci devrais remplir les 2 listes (listeFichiersNombre et listeFichiersNom) avec le nom et le contenu des fichiers du répertoire. (Dites moi si il y a une erreur la dedans).

                        Maintenant, il faudrait remettre les listes dans le bonne ordre (C'est ça que je ne sais pas faire) à l'endroit où j'ai mi un commentaire :x

                        Quelqu'un pour m'aider ? :/

                        Merci d'avance ! :p

                        Cordialement, Corentin.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          16 juillet 2011 à 19:05:24

                          Ce que tu demande c'est de l'algorithmie, si j'ai bien compris la question est comment classé ton tableau de int enfin ta "liste" dans un ordre croissant.
                          QuickSort ?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            16 juillet 2011 à 19:06:44

                            Citation : clavat

                            Ce que tu demande c'est de l'algorithmie, si j'ai bien compris la question est comment classé ton tableau de int enfin ta "liste" dans un ordre croissant.
                            QuickSort ?



                            Je ne connais pas cette fonction. Pourrais-tu m'en dire + sur elle ? Et comment l'utiliser ?



                            EDIT:

                            J'ai tester ma fonction et j'ai eu quelque erreur. Je les est corriger et la fonction me retourne maintenant ceci :

                            Citation : Retour fonction


                            ## 1. Bazipu - 2
                            ## 2. Bazipubot - 0
                            ## 3. Buzipa - 1
                            ## 4. Lllladygaga - 38
                            ## 5. Maitrefeu - 1



                            La nouvelle fonction :
                            public String getSurvivorClassement() {
                                String classement = "";
                                            
                                File repertoire = new File("C:\\Users\\Corentin\\Desktop\\BOT\\records");
                                String[] listeFichiersNom = null;
                                String[] listeFichiersNombre = null;
                                listeFichiersNom = repertoire.list();
                                listeFichiersNombre = repertoire.list();
                                        
                                int i;  
                                for(i = 0; i < listeFichiersNom.length; i++) {
                                    listeFichiersNom[i] = listeFichiersNom[i].replaceAll(".txt", "");
                                    listeFichiersNombre[i] = String.valueOf(getContenuFichierNombreRecord(listeFichiersNom[i].replaceAll(".txt", "")));
                                }
                            
                                // Ordonnage des listes
                                            
                                classement = "\n## 1. "+listeFichiersNom[0] +" - "+listeFichiersNombre[0]+"\n## 2. "+listeFichiersNom[1]+" - "+listeFichiersNombre[1]+"\n## 3. "+listeFichiersNom[2]+" - "+listeFichiersNombre[2]+"\n## 4. "+listeFichiersNom[3]+" - "+listeFichiersNombre[3]+"\n## 5. "+listeFichiersNom[4]+" - "+listeFichiersNombre[4];
                            
                                return classement;
                            }
                            


                            Enfin bref, il reste plus que à trouver comment ordonné :p
                            • Partager sur Facebook
                            • Partager sur Twitter
                              16 juillet 2011 à 19:28:56

                              Ce n'est pas une fonction définie dans java il faut la faire sois même, c'est de l'algorithmie.

                              une aide ici, mais je ne peut t'en dire plus désolé.

                              EDIT: ou la
                              • Partager sur Facebook
                              • Partager sur Twitter
                                16 juillet 2011 à 19:32:53

                                Je n'y comprend rien du tout. Pourrais-tu essayer de me faire la fonction ?
                                Merci beaucoup si tu accepte :p
                                Je pense pas que sa soit long à faire pour toi si tu t'y connais :)
                                (Reprend le script de la fonction donné 2 message plus haut)
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  16 juillet 2011 à 20:41:37

                                  Le second lien est une class qui exécute ce que tu souhaite, je l'est modifier pour qu'elle correspond à tes besoin: la class ajoute la à ton projet ;)

                                  Pour l'utiliser:
                                  QuickSortSimpleVersion arr = new QuickSortSimpleVersion(listeFichiersNombre.length);
                                  	  for(int i=0;i<listeFichiersNombre.length; i++) {
                                  		  arr.insert(listeFichiersNombre[i],listeFichiersNom[i]);
                                  	  }
                                  	  arr.quickSort(); // mes dans lordre les valeurs
                                            classement = arr.display(); retourne le string qui contient ta chaine
                                  


                                  EDIT: donne moi des nouvelles
                                  PS: enlève le package en haut de la classe lol
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    16 juillet 2011 à 20:51:59

                                    Merci beaucoup.

                                    Le seul problème, c'est que listeFichiersNombre est un String[] et non un long[]

                                    Qu'est ce que je dois modifier ?


                                    EDIT:

                                    J'ai testé de convertir en int de cette manière :
                                    arr.insert(Integer.parseInt(listeFichiersNombre[i]),listeFichiersNom[i]);
                                    


                                    Sauf que j’obtiens cette erreur :
                                    Exception in thread "Thread-1" java.lang.ArrayIndexOutOfBoundsException: 5
                                            at ee.ignorance.transformiceapi.PlayerImpl.getSurvivorClassement(PlayerImpl.java:181)
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      16 juillet 2011 à 20:58:05

                                      Définis des objets implémentant l'interface comparable, définis comment comparer tes objets, mets tes objets dans un array, et utilise array.sort() ?
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        16 juillet 2011 à 21:08:58

                                        J'ai fais un deuxième test qui consistait à convertir en long comme ceci :
                                        arr.insert(Long.parseLong(listeFichiersNombre[i]),listeFichiersNom[i]);
                                        


                                        J'obtiens la même erreur que j'ai citer 2 messages plus haut.

                                        Need help :(
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          16 juillet 2011 à 21:37:16

                                          Il faut que tu nous montre ton code vers la ligne 181 de PlayerImpl.java.

                                          L'erreur d'IndexOutOfBounds est que tu essaie de parcourir un tableau trop loin, donc l'index est hors de porté !

                                          exemple un tableau de 10 cases ce parcours de 0 à 9, le TonTab.length te répond 10 donc essai TonTab.length - 1.
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            16 juillet 2011 à 21:40:13

                                            La ligne 181, c'est :
                                            arr.insert(Long.parseLong(listeFichiersNombre[i]),listeFichiersNom[i]);
                                            


                                            EDIT:
                                            J'ai trouver le problème, regarde bien cette boucle :
                                            for(int ii = 0; ii < listeFichiersNom.length; ii++) {
                                                arr.insert(Long.parseLong(listeFichiersNombre[i]),listeFichiersNom[i]);
                                            }
                                            

                                            Il n'y a rien qui te choque ?
                                            Il y a un problème avec les ii et i :p

                                            J'ai résolu le problème et la fonction me retourne :

                                            Citation : Retour fonction

                                            ## 1. Bazipubot - 0
                                            ## 2. Buzipa - 1
                                            ## 3. Maitrefeu - 1
                                            ## 4. Bazipu - 2
                                            ## 5. Lllladygaga - 38



                                            C'est parfais à 1 poil prêt.

                                            Il faudrait inverser l'ordre des array pour que le plus grand nombre soit en premier et le plus faible en dernier :p

                                            J'ai essayer de créer une fonction pour retourner l'array mais elle ne fonctionne pas :
                                            public String[] inverser(String[] array) {
                                                int i;
                                                String[] new_array = array;
                                                for(i = 0; i < array.length; i++) {
                                                   new_array[i] = array[(array.length - 1) - i];
                                                }
                                                return new_array;
                                            }
                                            


                                            Elle me renvoie :
                                            38
                                            2
                                            1
                                            2
                                            38
                                            Au lieu de :
                                            38
                                            2
                                            1
                                            1
                                            0



                                            EDIT:

                                            J'ai finalement choisi d'inverser la position comme ceci :
                                            public String display() {
                                                String res = "";
                                                int k = len;
                                                int j = 0;
                                                while(j < len) {
                                                    res += "\n## "+(k)+". "+ nom[j] + " - " + data[j];
                                                    j++;
                                                    k--;
                                                }
                                                return res;
                                            }
                                            


                                            Ce qui me renvoie :
                                            ## 5. Bazipubot - 0
                                            ## 4. Maitrefeu - 1
                                            ## 3. Bazipu - 2
                                            ## 2. Buzipa - 5
                                            ## 1. Lllladygaga - 38

                                            C'est don parfais.

                                            Sujet résolu, merci beaucoup pour ton aide ! <3
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              16 juillet 2011 à 23:39:55

                                              Je suis heureux que tu est réussie à résoudre ton dernier problème seul.

                                              Bonne continuation !
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                16 juillet 2011 à 23:50:30

                                                Citation : clavat

                                                Je suis heureux que tu est réussie à résoudre ton dernier problème seul.

                                                Bonne continuation !



                                                Merci bien et merci pour tout !
                                                Bonne soiré et encore merci d'avoir passé du temps à m'aider :D
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  16 juillet 2011 à 23:56:09

                                                  J'apprécie qu'on le fasse pour moi, j'essaie d'en faire autant ;)

                                                  Bonne soirée
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter

                                                  Listage fichier d'un répertoire

                                                  × 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