Lire un csv et le transformer en une matrice
lynajar
Messages postés
40
Statut
Membre
-
lynajar Messages postés 40 Statut Membre -
lynajar Messages postés 40 Statut Membre -
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();