Lire un csv et le transformer en une matrice

lynajar Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   -  
lynajar Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   -
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.ArrayIndexOutOfBoundsException: 5
at pkg.MyCsvreader.main(MyCsvreader.java:28)

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();
		}
 
 
}
 
 
}




Configuration: Windows / Chrome 84.0.4147.105
A voir également:

3 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

Tu peux considérablement simplifier la manière dont tu lis ton fichier CSV. Exemple :

package pkg;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;

public class MyCsvreader {
    public static void main(final String[] arg) throws IOException {
        String[][] matrix = Files.lines(Paths.get("exemple.csv"))
                                 .map(line -> line.split(";"))
                                 .toArray(String[][]::new);
        System.out.println(Arrays.deepToString(matrix));
    }
}
0
lynajar Messages postés 32 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour;
merci KX pour ton aide,
je veux utiliser les éléments de chaque case pour faire des calcules, par exemple calculer la somme de tous les éléments de la matrice:


som=0;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
   som=som+matrix[i][j]
end
end
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Il suffit d'une légère adaptation de mon code pour obtenir un double[][] plutôt qu'un String[][] par exemple :
double[][] matrix = Files.lines(Paths.get("exemple.csv"))
                         .map(line -> Arrays.stream(line.split(";"))
                                            .mapToDouble(Double::parseDouble)
                                            .toArray())
                         .toArray(double[][]::new);

Toutefois, tu pourrais très facilement calculer directement la somme, sans avoir à passer par une matrice :
double sum = Files.lines(Paths.get("exemple.csv"))
                  .flatMap(line -> Arrays.stream(line.split(";")))
                  .mapToDouble(Double::parseDouble)
                  .sum();
0
lynajar Messages postés 32 Date d'inscription   Statut Membre Dernière intervention  
 
Bonsoir;
je dois passer par une matrice pour utiliser la valeur de chaque case ligne i et colonne j (matrix[i][j]) séparément, parce que par la suite je veux utiliser cette matrice pour créer un arbre
0