IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

importer un fichier csv dans un tableau


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Février 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Février 2018
    Messages : 40
    Par défaut importer un fichier csv dans un tableau
    Bonjour, je suis débutante avec java, je suis pas développeuse mais juste j'ai un travail à faire pour mon examen, alors pour m'expliquer, j'ai trois fichiers csv je veux les importer et les convertir en 3 tableaux tab1, tab2, tab3, pour pouvoir les utiliser. j'ai essayer ce code en suivant quelques tutoriels mais je suis pas satisfaite, où les trois tableaux ici pour pouvoir les parcourir dans une autre méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
     import java.io.File;
    import java.io.FileNotFoundException;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.Scanner;
     
    public class tableau {
     
    	public static void main(String[] args) {
            String fileName= "seq.csv";
            File file= new File(fileName);
     
            // this gives you a 2-dimensional array of strings
            List<List<String>> lines = new ArrayList<>();
            Scanner inputStream;
     
            try{
                inputStream = new Scanner(file);
     
                while(inputStream.hasNext()){
                    String line= inputStream.next();
                    String[] values = line.split(";");
                    // this adds the currently parsed line to the 2-dimensional string array
                    lines.add(Arrays.asList(values));
                }
     
                inputStream.close();
            }catch (FileNotFoundException e) {
                e.printStackTrace();
            }
     
            // the following code lets you iterate through the 2-dimensional array
            int lineNo = 1;
            for(List<String> line: lines) {
                int columnNo = 1;
                for (String value: line) {
                    System.out.println("Line " + lineNo + " Column " + columnNo + ": " + value);
                    columnNo++;
                }
                lineNo++;
            }
            String fileName1= "frequent-seq.csv";
            File file1= new File(fileName1);
     
            // this gives you a 2-dimensional array of strings
            List<List<String>> lines1 = new ArrayList<>();
            Scanner inputStream1;
     
            try{
                inputStream1 = new Scanner(file1);
     
                while(inputStream1.hasNext()){
                    String line1= inputStream1.next();
                    String[] values = line1.split(";");
                    // this adds the currently parsed line to the 2-dimensional string array
                    lines1.add(Arrays.asList(values));
                }
     
                inputStream1.close();
            }catch (FileNotFoundException e) {
                e.printStackTrace();
            }
     
            // the following code lets you iterate through the 2-dimensional array
            int lineNo1 = 1;
            for(List<String> line1: lines1) {
                int columnNo1 = 1;
                for (String value: line1) {
                    System.out.println("Line " + lineNo1 + " Column " + columnNo1 + ": " + value);
                    columnNo1++;
                }
                lineNo1++;
            }
            String fileName2= "lignes.csv";
            File file2= new File(fileName2);
     
            // this gives you a 2-dimensional array of strings
            List<List<String>> lines2 = new ArrayList<>();
            Scanner inputStream2;
     
            try{
                inputStream2 = new Scanner(file2);
     
                while(inputStream2.hasNext()){
                    String line2= inputStream2.next();
                    String[] values = line2.split(";");
                    // this adds the currently parsed line to the 2-dimensional string array
                    lines.add(Arrays.asList(values));
                }
     
                inputStream2.close();
            }catch (FileNotFoundException e) {
                e.printStackTrace();
            }
     
            // the following code lets you iterate through the 2-dimensional array
            int lineNo2 = 1;
            for(List<String> line2: lines2) {
                int columnNo2 = 1;
                for (String value: line2) {
                    System.out.println("Line " + lineNo2 + " Column " + columnNo2 + ": " + value);
                    columnNo2++;
                }
                lineNo1++;
            }
        }
     
    }
    quelqu'un peut m'aider pour avoir mes trois tableaux avec lesquels je vais utiliser des boucles for pour accéder aux cases et faire mon programme.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Tu peux utiliser une méthode comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public static String[][] readCSV(String nomFichier, char c, Charset charset) throws IOException {
    		return Files.lines(Paths.get(nomFichier), charset)
    			     .map(ligne-> ligne.split(String.valueOf(c)))
    			     .toArray(String[][]::new);
    	}
    Elle permet de lire depuis un fichier dont on spécifie le nom ou le chemin, le type de charset, et un caractère de séparation (une virgule, un point-virgule, un tab...) un tableau de colonnes séparées par ce caractère dans des lignes (séparées par \n).

    Donc tu peux par exemple écrire (ici avec trois exemples de boucle for pour le parcours ensuite) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    import java.io.IOException;
    import java.nio.charset.Charset;
    import java.nio.charset.StandardCharsets;
    import java.nio.file.Files;
    import java.nio.file.Paths;
     
    public class Program {
     
    	// lit un tableau depuis un fichier de lignes contenant des colonnes séparées par un caractère c. le nom doit être absolu ou relatif au dossier de travail
    	public static String[][] readCSV(String nomFichier, char c, Charset charset) throws IOException {
    		return Files.readAllLines(Paths.get(nomFichier), charset)
    			     .stream()
    			     .map(ligne-> ligne.split(String.valueOf(c)))
    			     .toArray(String[][]::new);
    	}
     
    	public static void main(String[] args) {
     
     
    		try {
    			String[][] tableau1 = readCSV("dossier/monfichier1.csv", ',', StandardCharsets.UTF_8); // domma separated values
    			String[][] tableau2 = readCSV("dossier/monfichier2.txt", ';', StandardCharsets.UTF_8); // semi-colonne separated values
    			String[][] tableau3 = readCSV("dossier/monfichier3.machin", '\t', StandardCharsets.UTF_8); // tab separated values
     
    			for(String[] ligne : tableau1) {
    				for(int colonne=0; colonne<ligne.length; colonne++) {
    					String col = ligne[colonne];
    				}
    			}
     
    			for(int ligne=0; ligne<tableau2.length; ligne++) {
    				for(int colonne=0; colonne<tableau2[ligne].length; colonne++) {
    					String col = tableau2[ligne][colonne];
    				}
     
    			}
     
    			for(String[] ligne : tableau3) {
    				for(String colonne : ligne) {
     
    				}
    			} 
     
     
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
     
    	}
     
    }
    Et si tu as besoin de sauter des lignes au début (comme une ligne de titres), tu peux utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	public static String[][] readCSV(String nomFichier, char c, Charset charset, int first) throws IOException {
    		return Files.lines(Paths.get(nomFichier), charset)
    				.skip(first)
    			    .map(ligne-> ligne.split(String.valueOf(c)))
    			    .toArray(String[][]::new);
    	}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    			String[][] tableau1 = readCSV("dossier/monfichier1.csv", ',', StandardCharsets.UTF_8, 1/* saute une ligne au début */);
    Ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	public static String[][] readCSV(String nomFichier, char c, Charset charset, int first, int max) throws IOException {
    		return Files.lines(Paths.get(nomFichier), charset)
    				.skip(first)
    				.limit(max)
    			    .map(ligne-> ligne.split(String.valueOf(c)))
    			    .toArray(String[][]::new);
    	}
    qui te permet de sauter des lignes au début et d'obtenir un nombre de lignes max
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre averti
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Février 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Février 2018
    Messages : 40
    Par défaut
    j'ai écrit le code comme vous avez indiqué,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    import java.io.IOException;
    import java.nio.charset.Charset;
    import java.nio.charset.StandardCharsets;
    import java.nio.file.Files;
    import java.nio.file.Paths;
     
    public class calcul {
     
    	// lit un tableau depuis un fichier de lignes contenant des colonnes séparées par un caractère c. le nom doit être absolu ou relatif au dossier de travail
    	public static String[][] readCSV(String nomFichier, char c, Charset charset) throws IOException {
    		return Files.readAllLines(Paths.get(nomFichier), charset)
    			     .stream()
    			     .map(ligne-> ligne.split(String.valueOf(c)))
    			     .toArray(String[][]::new);
    	}
     
    	public static void main(String[] args) {
     
     
    		try {
    			String[][] tableau1 = readCSV("seq.csv", ',', StandardCharsets.UTF_8); 
    			String[][] tableau2 = readCSV("frequent-seq.csv", ';', StandardCharsets.UTF_8); 
    			String[][] tableau3 = readCSV("lignes.csv", '\t', StandardCharsets.UTF_8); 
     
    			for(String[] ligne : tableau1) {
    				for(int colonne=0; colonne<ligne.length; colonne++) {
    					String col = ligne[colonne];
    				}
    			}
     
    			for(int ligne=0; ligne<tableau2.length; ligne++) {
    				for(int colonne=0; colonne<tableau2[ligne].length; colonne++) {
    					String col = tableau2[ligne][colonne];
    				}
     
    			}
     
    			for(String[] ligne : tableau3) {
    				for(String colonne : ligne) {
     
    				}
    			} 
     
     
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
     
    	}
     
    }
    mais lorsque j’essaye d'afficher l'un de ces tableaux pour vérifier la méthode, il n'affiche rien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (int i=0; i<tableau1.length; i++) {
    	 System.out.print(tableau1[i]);
    }

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    1. Montre-moi le code exact que tu as fais et non pas le mien et un bout du tien ?
    2. Montre-moi aussi le fichier, ou au moins quelques unes des premières lignes

    PS: je ne sais pas si tu as remarqué, mais dans mes trois exemples, j'ai mis en paramètre un caractère de séparation différent, pour l'exemple justement (successivement la virgule, le point-virgule, la tabulation). Il faut bien sûr adapter au séparateur de champs de ton fichier.

    PS2: attention,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (int i=0; i<tableau1.length; i++) {
    	 System.out.print(tableau1[i]);
    }
    affichera quelque chose d'illisible si tu as des lignes dans le tableau, car il n'affiche pas des String mais des String[]. Pour afficher les lignes entièrement, faire (avec java.util.Arrays en import) :
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre averti
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Février 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Février 2018
    Messages : 40
    Par défaut
    oui c'est bon ça marche avec ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (int i=0; i<tableau1.length; i++) {
    				 System.out.println(Arrays.stream(tableau1[i]).collect(Collectors.joining(", "))); // affiche les éléments du tableau séparés par des virgules (suivies d'une espace)
    			}
    mais comment je peux ajouter une autre boucle pour que pour chaque ligne je parcours les colonnes ?

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par sel.chayma Voir le message
    mais comment je peux ajouter une autre boucle pour que pour chaque ligne je parcours les colonnes ?
    Bah, exactement pareil, tableau1[i] étant lui-même un tableau, donc :

    1. par for
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      for(int j=0; j<tableau1[i].length; j++) {
              System.out.println(tableau1[i][j]);
      }
    2. par foreach:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      for(String val : tableau1[i]) {
              System.out.println(val);
      }
    3. par stream :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Arrays.stream(tableau1[i]).forEach(System.out::println);
    4. ...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Import de nombreux fichiers csv dans un tableau de synthèse excel
    Par PtiCanari dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/10/2016, 01h21
  2. Réponses: 1
    Dernier message: 29/02/2012, 17h42
  3. Réponses: 1
    Dernier message: 09/01/2012, 14h49
  4. Impossible d'importer un fichier csv dans une table sous MySQL
    Par manue85 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 20/04/2006, 12h06
  5. Importer un fichier CSV dans un clientdataset ?
    Par mls dans le forum Bases de données
    Réponses: 7
    Dernier message: 15/04/2005, 12h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo