Partage
  • Partager sur Facebook
  • Partager sur Twitter

Flux de lecture d'un fichier texte

Sujet résolu
    24 mai 2015 à 18:13:40

    Bonjour !

    Je poste ce message dans l'espoir que quelqu'un puisse m'aider, je m'explique. J'ai un projet sous Eclipse très simple avec une classe main et un fichier *.txt . Dans mon main j'essaye de lire le fichier puis de stocker chaque caractères dans un tableau à 2 dimensions. Tout fonctionne très bien lorsque je demande l'affichage de mon tableau une fois la lecture faite, cependant si je change un des caractères dans mon fichier texte, que j'actualise mon projet, l'enregistre et que je relance le programme et affiche mon tableau, la "modification" que je viens d'effectuée n'est pas lisible. Mon tableau contient les valeurs de la première exécution. Pourriez vous me situez mon erreur si vous la voyez ?

    voici le code :

    package apprentissage;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    
    
    
    public class Main {
    
    	public static void main(String[] args) throws IOException{		
    		long last = System.currentTimeMillis();
    		
    		BufferedReader reader = null;
    		File file = new File("res/doc.txt");
    		int line;
    		char [][] tab = new char [10][10];
    		
    		reader = new BufferedReader(new FileReader(file));
    	
    		while((line = reader.read()) != -1){
    			if(line > 13 )
    			{
    				for(int i = 0; i < 10; i++){
    					for(int j = 0; j< 10; j++){
    						tab[i][j] = (char)line;
    					}
    				} 
    
    			}
    		}
    		reader.close();
    	
    		long now = System.currentTimeMillis();
    		System.out.println("");
    		
    		System.out.println("Execution en : "+ (now - last)+" ms");
    		
    		for(int a = 0; a < 10; a++){
    			for(int b = 0; b< 10; b++){
    				System.out.print(tab[a][b]);
    			}
    		}
    		
    		
      } 
    
    }

    Merci de votre aide !

    • Partager sur Facebook
    • Partager sur Twitter
      24 mai 2015 à 18:47:34

      Que contient ton fichier txt?
      • Partager sur Facebook
      • Partager sur Twitter
        24 mai 2015 à 18:59:04

        il contient ceci :

        0000000000
        0000000000
        0000000000
        0000000000
        0000000000
        0000000000
        0000000000
        0000000000
        0000000000
        0000000000



        • Partager sur Facebook
        • Partager sur Twitter
          24 mai 2015 à 19:04:37

          Ton programme ne renvoi que la dernière lettre. Je t'invite à changer le dernier caractère de ton fichier :-) .
          • Partager sur Facebook
          • Partager sur Twitter
            24 mai 2015 à 19:12:11

            En effet... Hum saurais-tu me dire d'ou vient cette "erreur" ??
            • Partager sur Facebook
            • Partager sur Twitter
              24 mai 2015 à 19:41:25

              Je n'ai pas vraiment cherché à comprendre ton programme, il est mal conçu. On voit de nombreux chiffres dans les boucles "> 13" "< 10". "[10][10]" etc., pourquoi ces nombres ? Ton programme est conçu pour marcher avec tes valeurs à toi, et seulement les tiennes. De plus, il n'a pas l'air de très bien fonctionné pour l'avoir survolé.

              Je te conseil de décomposer ton problème et de faire étape par étape.

              -Lire le fichier

              -Prendre chaque ligne du fichier

              -Décomposer les lignes en caractères

              -Rentrer ces caractères dans un tableau

              -Afficher ce tableau

              Je te laisse chercher ça, essaye de réfléchir sans valeur "brut". Il faut que ton programmes marche pour tout type de valeur. Tu peux utiliser une collection au lieu de tes tableaux habituels, mais si tu n'as pas vu ça alors reste sur ton " new char[10][10];" mais faudra faire attention à ne pas dépasser 10 caractères dans ta ligne.

              N'hésite pas à poser des questions.

              • Partager sur Facebook
              • Partager sur Twitter
                24 mai 2015 à 19:51:46

                Mon programme est là pour m'apprendre, les chiffres sont là pour que je comprenne lorsque j'en modifie un, ce qui ce produit sur le resultat. Ce n'est qu'un simple brouillon ou j'essaye des fonctions c'est tout, pas la peine qu'il soit conforme et aux normes. Ce qui m'importe pour le moment c'est la mécanique de ce problème.

                Sache que Lire le fichier et prendre chaque caractères c'est déjà fait, le probleme persiste dans la boucle For qui se trouve dans le While. Si à la place de ma boucle For j'affiche ceci :

                char e = (char)line;
                
                System.out.print(e);

                alors mon programme m'affiche bien le contenu de mon fichier *.txt. Maintenant moi je voudrais faire ceci ensuite :

                for(i = 0; i <100; i++){
                		for(j = 0; j < 100; j++){
                			
                			tab[i][j] = e;
                		}
                	}

                sauf que cela coince et je ne comprend pas pourquoi ?



                -
                Edité par Mahu 24 mai 2015 à 19:52:30

                • Partager sur Facebook
                • Partager sur Twitter
                  24 mai 2015 à 20:17:01

                  J'ai finis par résoudre mon problème en bidouillant un peu !
                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 mai 2015 à 20:41:01

                    Il faut que tu comprennes ce que tu fais.

                    for(i = 0; i <100; i++){
                    for(j = 0; j < 100; j++){
                    tab[i][j] = e;
                    }
                    }

                    Pourquoi 100 ? Ton tableau est une matrice de 10 * 10, en allant jusqu'à 100 tu auras un beau ArrayIndexOutOfBoundsException dès le 10ème entier.

                    Si tu as réussis en bidouillant pourquoi pas, mais sur un brouillon ce n'est pas de réussir le plus important, c'est de comprendre, c'est aussi le but. Ensuite, prendre des bonnes habitudes dès maintenant, même sur un brouillon, ça te sera très utile pour le futur.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      24 mai 2015 à 20:58:29

                      Mais je comprend ce que je fais et 100 parce que jusqu'à preuve du contraire une matrice de 10*10 ça fait bien 100 index et j'ai bien mis strictement inférieur à .. :

                       i <100
                       j < 100
                      Donc si je ne dis pas de bêtises l'exception ne serait jamais soulevée.
                      Je te suis reconnaissant à toi, et à tous ceux qui me tiennent ce discours mais je ne suis qu'un "Casual" programmer. Je programme comme toi tu fais du vélo le dimanche. Je trouve ca juste "cool" c'est tout et je m'y intéresse un peu. Mais je n'ai pas envie d'apprendre tout par coeur, de connaître toutes les tips et astuces et conformités de programmation.
                      Est ce que quand toi tu fais du vélo le dimanche tu t'entête à compter le nombre de maillons que ta chaine sustens par minutes et par tour de pédalier ? Non tu es là parce que tu aimes bien pédaler et profiter de "faire du vélo". Eh bien moi je veux juste profiter de programmer.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        24 mai 2015 à 21:12:26

                        char [][] tab = new char [i][j];

                        Cette ligne signifie que pour chaque [i] tu auras [j] case(s).

                        Donc par exemple avec : 

                        char [][] tab = new char [10][10];

                        Tu pourrais faire tab[0][0] à tab[0][9] pour avoir la première ligne (en sachant que les index commencent à 0).

                        Ensuite tab[1][0] à tab[1][9] et ainsi de suite jusqu'à tab[9][9].

                        Tu dois voir ça comme un tableau dans un tableau. Tu as le premier crochet [i] qui correspond aux premiers tableaux, et dans chaque tableau tu as un autre tableau [j].

                        Tu as donc 10 * 10 = 100 cases. Dans ton exemple, tu aurais 100 * 100 = 10 000 cases.

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Flux de lecture d'un fichier texte

                        × 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