Exporter une matrice d'entier vers un csv

Résolu/Fermé
lynajar Messages postés 32 Date d'inscription dimanche 15 décembre 2019 Statut Membre Dernière intervention 9 février 2021 - Modifié le 8 févr. 2021 à 23:10
lynajar Messages postés 32 Date d'inscription dimanche 15 décembre 2019 Statut Membre Dernière intervention 9 février 2021 - 9 févr. 2021 à 14:14
Bonsoir;
j'ai créer un code qui permet de calculer une matrice de similarité et je veux exporter cette matrice vers un fichier csv, pour pouvoir l'utiliser dans un autre programme,


0 2 4 0
0 0 2 0
0 0 0 3
0 0 0 0

j'ai créer le code suivant mais ça na pas marché,
j'ai besoin d'une aide


void Ecrire(){
 File file=new File("C:\\Users\\click\\Desktop\\doctorat\\matrice.txt");
 try (BufferedWriter bufferedwriter=new BufferedWriter (new FileWriter(file))){
  
  for(int i=0;i<nbl;++i){
   for(int j=0;i<nbs;++j){
    System.out.print(matsim[i][j]);
    //bufferedwriter.write(matsim[i][j]);
    bufferedwriter.write(";");
    
   }
  }
 }catch(IOException e){
  e.printStackTrace();
 }
 
}

2 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
9 févr. 2021 à 10:32
Bonjour,

Lorsque tu ajoutes un entier dans un fichier, c'est la valeur de l'octet qui est ajouté, pas sa représentation en caractères.
Par exemple : si tu ajoutes l'entier 42 ça ajoutera le caractère '*' alors que toi tu veux ajouter le caractère '4' puis le caractère '2' (dont les valeurs sont respectivement 54 et 52).

Remarque :
Dans ta ligne 6, tu fais
i<nbs
alors que ça devrait être
j<nbs
(tu as inversé i et j)
De plus, tu devrais avoir un saut de ligne quelque part, sinon tout va s'écrire à la suite.

Exemple :
public static void exportToCsv(int[][] matrix, String fileName) throws IOException {
    try (PrintWriter pw = new PrintWriter(fileName)) {
        for (int row = 0; row < matrix.length; row++) {
            if (row > 0) {
                pw.println();
            }
            for (int column = 0; column < matrix[row].length; column++) {
                if (column > 0) {
                    pw.print(';');
                }
                pw.print(String.valueOf(matrix[row][column]));
            }
        }
    }
}

Remarque : les Stream permettent de traiter efficacement ce genre de problèmes, même si je comprends bien que ça peut être compliqué pour un débutant. Exemple :
public static void exportToCsv(int[][] matrix, String fileName) throws IOException {
    Files.write(Paths.get(fileName), 
            Arrays.stream(matrix).map(row -> Arrays.stream(row)
                    .mapToObj(String::valueOf)
                    .collect(Collectors.joining(";"))
            ).collect(Collectors.toList()));
}
1
lynajar Messages postés 32 Date d'inscription dimanche 15 décembre 2019 Statut Membre Dernière intervention 9 février 2021
9 févr. 2021 à 14:14
Bonjour;
merci KX pour ton aide,
le programme s’exécute très bien .
0