Lire un csv et le transformer en une matrice sous java eclipse
Répondre à la discussion
Affichage des résultats 1 à 14 sur 14

Lire un csv et le transformer en une matrice sous java eclipse



  1. #1
    benkharrouba

    Lire un csv et le transformer en une matrice sous java eclipse


    ------

    Bonjour;
    j'ai un fichier csv qui contient une matrice de n lignes et m colonnes de type entier, j'ai réussi a importer le fichier et lire les éléments du fichier, j'ai même calculer la moyenne d'une seul colonne,
    maintenant je veux considéré le fichier comme une matrice de n lignes et m colonnes, afficher les éléments de chaque case, "values[i][j]" mais une erreur d’exécution est affiché,

    erreur:
    1.0
    1.0
    1.0
    0.0
    1.0
    Exception in thread "main" java.lang.ArrayIndexOutOfBound sException: 5
    at pkg.MyCsvreader.main(MyCsvread er.java:28)


    Code:
    package pkg;
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.Scanner;
     
    public class MyCsvreader {
    	public static void main(String[] arg) {
    		String fileName="exemple.csv";
    		File file=new File(fileName);
    		double sum=0;
    		double numberOfPrices=0;
    		try {
    			Scanner inputStream=new Scanner(file);
    			while(inputStream.hasNext()){
    				String data=inputStream.next();
    				String[] values=data.split(";");
    				//double closingPrice=Double.parseDouble(values[3 ]);
    				//sum+=closingPrice;
    				//numberOfPrices++;
    				//System.out.println(closingPrice);
    				for(int i=0;i<values.length;i++)
    				{
    					for(int j=0;j<3;i++)
    					{
    					double v=Double.parseDouble(values[i][j]);
    					System.out.println(v);
    					}
    				}
     
    			}
    			inputStream.close();
    			//System.out.println("average="+(sum/numberOfPrices));
     
    		} catch (FileNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
     
    }
     
     
    }

    -----

  2. #2
    Ikhar84
    Animateur Informatique

    Re : Lire un csv et le transformer en une matrice sous java eclipse

    Comme tu as un "out of bound" sur un index... essaies de remplacer ça :
    Code:
    for(int i=0;i<values.length;i++)
    Par ça :
    Code:
    for(int i=0 ; i<values.length-1 ; i++)
    En tout cas vérifies ta ligne 28...

    Fais attention à la "propreté" et l'indentation de ton code !

    Et, dernière remarque, pour le moment, si tu veux "afficher une matrice", remplaces le :
    Code:
    System.out.println(v)
    Par :
    Code:
    System.out.print(v)
    Sinon tu auras une ligne verticale de nombres, et pas une matrice...
    N'oublies pas un println vide après ton deuxième for, pour un retour à la ligne effectif...
    Dernière modification par Ikhar84 ; 04/08/2020 à 18h16.
    J'ai glissé Chef !

  3. #3
    pm42

    Re : Lire un csv et le transformer en une matrice sous java eclipse

    Citation Envoyé par Ikhar84 Voir le message
    Comme tu as un "out of bound" sur un index... essaies de remplacer ça :
    Code:
    for(int i=0;i<values.length;i++)
    Par ça :
    Code:
    for(int i=0 ; i<values.length-1 ; i++)
    Normalement, sa ligne avec le < values.length est correcte en Java.

    Ce qui est théoriquement faux dans son code, c'est la boucle en j qui suppose que chaque valeur lue contient au moins 3 caractères.
    Et vu que values[i][j] est un caractère de la chaîne, parseFloat est plus que surdimensionné et laisse entendre qu'il y a une erreur dans l'algorithme.

    Mais j'avoue que là comme ça, je ne vois pas trop pourquoi on pourrait avoir un dépassement d'indice sur i. Il faudrait le fichier.

    Sinon et comme d'habitude, la bonne solution est d'utiliser le debugger de l'environnement de développement pour faire du pas à pas et voir ce qui se passe.

  4. #4
    Ikhar84
    Animateur Informatique

    Re : Lire un csv et le transformer en une matrice sous java eclipse

    Je t'avoues que vu le style de codage et l'absence "d'exemple" de fichier csv attendu, j'ai juste survolé le code...

    De plus, je suis sûrement trop fatigué, mais je ne comprends pas son double for imbriqué et sa matrice en deix dimensions i et j avec un while qui lit ligne par ligne son fichier...

    Ps: Et oui l'absence de reflexe du pas à pas, avec un breakpoint et autres techniques de débuging sont la marque de fabrique des tutos...
    J'ai glissé Chef !

  5. A voir en vidéo sur Futura
  6. #5
    pm42

    Re : Lire un csv et le transformer en une matrice sous java eclipse

    Citation Envoyé par Ikhar84 Voir le message
    Je t'avoues que vu le style de codage et l'absence "d'exemple" de fichier csv attendu, j'ai juste survolé le code...
    J'avais fait comme toi mais j'ai vu ta réponse et j'ai fait un effort pour toi

    Citation Envoyé par Ikhar84 Voir le message
    De plus, je suis sûrement trop fatigué, mais je ne comprends pas son double for imbriqué et sa matrice en deix dimensions i et j avec un while qui lit ligne par ligne son fichier...
    Oui comme je disais plus haut, j'ai un doute sur l'algo.

  7. #6
    benkharrouba

    Re : Lire un csv et le transformer en une matrice sous java eclipse

    Bonjour;
    merci pour vos réponses,
    mon but est de pouvoir utiliser le fichier csv comme une matrice avec deux indices, "matrix[i][j]", parce que je veux utiliser cette matrice pour créer un arbre binaire,
    donc je voulais faire un test en affichant les valeurs de chaque case en bouclant deux fois avec l'utilisation de deux indices i et j
    alors la première étapes de mon algorithme de création d'arbre est de lire le fichier csv ensuite le transformer en une matrice
    Nom : matrix.png
Affichages : 561
Taille : 5,6 Ko

  8. #7
    benkharrouba

    Re : Lire un csv et le transformer en une matrice sous java eclipse

    Bonjour;
    en cherchant sur le net, j'ai trouvé cette solution qui permet d'afficher la matrice, mais est ce qu'il ya une possibilité d'afficher par exemple l'element de la case numéro (3,4)
    matrix[3][4]

    Code:
    package pg;
    import java.io.IOException;
    import java.nio.file.Files;
    import java.nio.file.Paths;
    import java.util.Arrays;
    public class Csv1 {
    	
    
    	
    
    	
    	    public static void main(final String[] arg) throws IOException {
    	        
    	        
    	        double[][] matrix = Files.lines(Paths.get("exemple.csv"))
                        .map(line -> Arrays.stream(line.split(";"))
                                           .mapToDouble(Double::parseDouble)
                                           .toArray())
                        .toArray(double[][]::new);
    	        for(int i=0;i<matrix.length;i++)
    	        {
    	        	for(int j=0;j<matrix[0].length;j++)
    	        	{//System.out.println(matrix[0 ].length);
    	        		System.out.println(Arrays.deepToString (matrix));
    	        	}
    	        }
    	        
    	        
    	    
    	        	}
    	}
    Dernière modification par benkharrouba ; 05/08/2020 à 10h52.

  9. #8
    Ikhar84
    Animateur Informatique

    Re : Lire un csv et le transformer en une matrice sous java eclipse

    ben déjà ton tableau de Strings values, qui est initialisé par un split() sur une seule ligne du fichier... est un tableau en une seule dimension...

    Comment tu veux en faire une matrice en deux dimensions ?

    Tu comprends bien qu'à chaque itération de ton while tu lis une nouvelle ligne (et donc la "dimension i" de ta matrice) ?

    À l'intérieur de ce bloc (le while donc), tu "itères" sur la dimension j de ta matrice, et vu que tes lignes comportent 4 élements, donc de 0 à 3...

    Est-ce que tu veux créer une matrice en mémoire ? Réellement ? Ou simplement afficher les données sous la forme d'une matrice ?

    Si 1, la variable values n'est clairement pas suffisante ! Et n'est que la composante en une seule dimension de la véritable matrice en 2d...


    Edit: tu as posté pendant mon propre post... fais attention à ton code !! Il est vraiment difficile à lire, si tu veux que des volontaires y jettent un oeil !

    Re-edit: si tu veux faire un code plus lisible (et fonctionnel), dissocies l'affichage de la matrice de sa construction, fais un double for (loin) en dessous de ton while !
    Sauf si tu ne veux pas stocker en mémoire ta matrice 2d !
    Dernière modification par Ikhar84 ; 05/08/2020 à 10h58.
    J'ai glissé Chef !

  10. #9
    benkharrouba

    Re : Lire un csv et le transformer en une matrice sous java eclipse

    désoler pour les erreurs, je suis débutant en java,
    je veux utiliser le fichier csv comme une matrice avec n lignes et m colonnes

  11. #10
    pm42

    Re : Lire un csv et le transformer en une matrice sous java eclipse

    Citation Envoyé par benkharrouba Voir le message
    Bonjour;
    en cherchant sur le net, j'ai trouvé cette solution qui permet d'afficher la matrice, mais est ce qu'il ya une possibilité d'afficher par exemple l'element de la case numéro (3,4)
    matrix[3][4]
    J'ai du mal à comprendre ce qui t'empêche d'essayer.
    Par contre, ce code utilise de la programmation fonctionnelle pour faire la lecture et la transformation en tableau de façon concise ce qui n'est pas forcément abordable par un débutant. Et encore plus en Java qui impose une syntaxe un poil lourde pour cela.

  12. #11
    Ikhar84
    Animateur Informatique

    Re : Lire un csv et le transformer en une matrice sous java eclipse

    Il faudrait déjà vraiment expliciter ce que tu veux faire, simplement afficher la "matrice", ou tu ré-utilises le tableau 2d ensuite, et tu as donc vraiment besoin de le construire ?

    Et pour appuyer la remarque de pm, qu'est ce qui t'empêche d'essayer ?
    J'ai glissé Chef !

  13. #12
    benkharrouba

    Re : Lire un csv et le transformer en une matrice sous java eclipse

    je veux utiliser la matrice pour créer un arbre binaire

  14. #13
    pm42

    Re : Lire un csv et le transformer en une matrice sous java eclipse

    Citation Envoyé par benkharrouba Voir le message
    je veux utiliser la matrice pour créer un arbre binaire
    Tu as déjà dit ça. Par contre, je ne sais pas si tu t'en rends compte mais globalement, tu ignores les réponses à tes questions ce qui complique pas mal les choses.

  15. #14
    benkharrouba

    Re : Lire un csv et le transformer en une matrice sous java eclipse

    Bonjour;
    j'ai réussi à résoudre le problème en lisant le fichier csv dans un tableau à deux dimensions ,
    merci pour vous tous

    Code:
    package pg;
    import java.io.IOException;
    import java.nio.file.Files;
    import java.nio.file.Paths;
    import java.util.Arrays;
    public class Csv1 {
    	
    
    	
    
    	
    	    public static void main(final String[] arg) throws IOException {
    	        double s=0;
    	        
    	        double[][] matrix = Files.lines(Paths.get("exemple.csv"))
                        .map(line -> Arrays.stream(line.split(";"))
                                           .mapToDouble(Double::parseDouble)
                                           .toArray())
                        .toArray(double[][]::new);
        		System.out.println(matrix[1][2]);
    
    	        for(int i=0;i<matrix.length;i++)
    	        {
    	        	for(int j=0;j<matrix[0].length;j++)
    	        	{//System.out.println(matrix[0 ].length);
    	        		s=s+matrix[i][j];
    	        		System.out.println(matrix[i][j]);
    	        		
    	        	}
    	        }
    	        System.out.println("s="+s);
    	        
    	        
    	    
    	        	}
    	}

Discussions similaires

  1. Programmation sous Android (JAVA) avec Eclipse
    Par invite5c98d667 dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 13/03/2013, 10h12
  2. [Java] Soucis recompilation avec caractères japonais sous Eclipse
    Par invite3ee942ed dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 27/05/2012, 09h54
  3. lire et editer un txt sous JAVA
    Par ABN84 dans le forum Logiciel - Software - Open Source
    Réponses: 16
    Dernier message: 28/02/2007, 11h17
  4. Java, eclipse et sérialisation
    Par invite4793db90 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 25/03/2006, 13h00