Exporter une matrice d'entier vers un csv

Résolu
lynajar Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
lynajar Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
  2. lynajar Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
     
    Bonjour;
    merci KX pour ton aide,
    le programme s’exécute très bien .
    0