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 -
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)
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:
- Lire un csv et le transformer en une matrice
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Lire un fichier epub - Guide
- Comment lire un message supprimé sur whatsapp - Guide
- Lire fichier bin - Guide
- Transformer une image en icone - Guide
3 réponses
Bonjour,
Tu peux considérablement simplifier la manière dont tu lis ton fichier CSV. Exemple :
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)); } }
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:
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
Il suffit d'une légère adaptation de mon code pour obtenir un double[][] plutôt qu'un String[][] par exemple :
Toutefois, tu pourrais très facilement calculer directement la somme, sans avoir à passer par une matrice :
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();