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

Collection et Stream Java Discussion :

Tableau et split


Sujet :

Collection et Stream Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Tableau et split
    Voici une autre question toujours en rapport avec mon sujet du 17/10/2009
    "Récupérer données fichier texte pour remplir un tableau à 2 dimensions"

    Je désire lire un fichier texte contenant les données suivantes:

    Désignation 1; code 1
    Désignation 2; code 2
    Désignation 3; code 3
    ....
    ...

    Désignation n; code n

    puis stocker désignation et code dans un tableau à 2 dimensions de sorte que

    Tableau[0][0]=Désignation 1 Tableau[1][0]=Code 1
    Tableau[0][1]=Désignation 2 Tableau[1][1]=Code 2
    Tableau[0][2]=Désignation 3 Tableau[1][1]=Code 3
    ...
    ...
    Tableau[0][n]=Désignation n Tableau[1][n]=Code n



    et au final pouvoir affecter ce tableau à 2 dimensions à un jtable afin de pouvoir remplir les colonnes du jTable avec les données du tableau

    J'arrive à récupérer Désignation1 Désignation2 etc..dans un Tableau (Tableau[0]) et Code1, Code2 etc ... dans ce meme tableau (Tableau[1])

    Voir mon bout de programme (ReadFileSt.java en piece attachés)
    ................
    Ce que je voudrais faire maintenant c'est récupérer les données de tableau[0] et tableau[1] vers un tableau à 2 dimensions Data[][] comme expliqué plus haut dans "puis stocker désignation....."

    Pour toujours au final,remplir les lignes d'un jTable avec ces données.


    Merci.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 156
    Points : 190
    Points
    190
    Par défaut
    Vu la petite taille de ton code tu aurais pu faire usage des balises code

    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.*;
     
    //importjava.util.*;
     
     
     
    public class ReadFileSt2{
     
      public static void main(String[] args){
     
        String fichier = "fichiertexte.txt";
     
        String tableau[] = new String[2];
     
        try
     
        {
     
          FileReader fr = new FileReader(fichier);
     
          BufferedReader br = new BufferedReader(fr);
     
          String str;
     
          int nbligne = 0;
     
          while((str=br.readLine()) != null)
          {
     
            String[] splits = str.split(";");
     
            int taille = splits.length;
     
            for(int i = 0; i < taille ;i++)
            {
     
              tableau[i] = splits[i]+"/";
            }
     
            System.out.print(tableau[0]);
     
            System.out.print(tableau[1]);
     
          }br.close();
     
        }
     
        catch(IOException ioe){System.out.println("erreur:"+ioe);}
     
      }
     
    }
    Déjà il y a un plusieurs grands problème dans ton code :
    • indente ton code proprement, pour moi un code non indenté est un code qui va à la poubelle : c'est irrespectueux envers les personnes qui lisent le code
    • évite de prendre les commentaires inutile : c'est prendre l'auditoire pour des cons
    • après un for ou un while ou un if utilise toujours des parenthèses.


    Tous cela pour te dire que tu ferais bien de t'intéresser aux convention de code. Après donne un vrai nom à ta classe, et permet que l'on passe un argument au programme plutôt qu'un String défini dans la fonction main.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 156
    Points : 190
    Points
    190
    Par défaut
    Pour disposer d'un tableau String[][] tu peut l'obtenir de la façon suivante.

    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
    import java.io.IOException;
    import java.io.FileReader;
    import java.io.BufferedReader;
     
    import java.util.ArrayList;
     
     
    public class ReadFileSt2{
      private static String fichier = "fichiertexte.txt";
     
      public static void main(String[] args){
        if(args.length >= 1) { fichier = args[0]; }
        ArrayList<String[]> al = new ArrayList<String[]>();
        try
        {
          FileReader fr = new FileReader(fichier);
          BufferedReader br = new BufferedReader(fr);
          String str = null; // a moins que tu sache pourquoi c'est pas indispensable !!!
          // personelement je le sais, mais je suis pas persuadé que tous 
          // les programmeurs le sache
          //int nbligne = 0; // inutile aussi
          while((str=br.readLine()) != null)
          {
            String[] tableau = str.split(";");
            //int taille = splits.length; // complètement inutile
            // la copie est inutile : et en plus tu utilisait chaque fois le même tableau
            // ici tableau est chaque fois un nouvelle objet
            // par ailleurs pour copier un tableau tu as arraycopy de la classe System
            /*
            for(int i = 0; i < taille ;i++)
            {
              tableau[i] = splits[i]+"/";
            }
            */
            System.out.println(tableau[0]+"\t->\t"+tableau[1]); // tu pourrais mettre un séparateur !!!
            al.add(tableau);
          }br.close();
        }
     
        catch(IOException ioe){System.out.println("erreur:"+ioe);}
        String[][] res = new String[al.size()][];
        al.toArray(res);
        for(String[] arr : res)
        {
          System.out.println(java.util.Arrays.toString(arr));
        }
      }
    }
    Tu remarquera par ailleurs j'ai écrit le code correctement !!! dit précisement ce que tu importe, évite d'importer des pacquages entier, il peut y avoir des conflit, c'est une potentiel source de problèmes.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 156
    Points : 190
    Points
    190
    Par défaut
    Et voici sous forme de fichiers
    Fichiers attachés Fichiers attachés

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 4
    Points : 4
    Points
    4
    Par défaut réponse à Fmunch
    Tous d'abord Fmunch je tiens à te remercier pour ta réponse.
    Je suis débutant en Java, je tiens à m'en excuser et je prend en compte tes remarques fort justifiées à mon égard (je promet de m'améliorer par la suite!).
    Je ne sait pas quel est ton age, tu as l'air de parfaitement maitriser le langage Java, moi j'ai 49 ans et j'espère apprendre encore des choses pour les années à venir!

    J'ai essayé le programme ReadFielst2.java que tu m'as soumis.

    Voila ce qu'il m'affiche avec les 10 lignes de mon fichier texte

    --------------------Configuration: <Default>--------------------
    designation 1 -> code 1
    designation 2 -> code 2
    designation 3 -> code 3
    designation 4 -> code 4
    designation 5 -> code 5
    designation 6 -> code 6
    designation 7 -> code 7
    designation 8 -> code 8
    designation 9 -> code 9
    designation 10 -> code 10
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
    at ReadFileSt2.main(ReadFileSt2.java:37)

    Process completed.

    Il m'affiche un message d'erreur: "Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
    at ReadFileSt2.main(ReadFileSt2.java:37)"


    Mais les lignes de code après catch(*) ne sont exécutées que si je met la ligne de code suivante en commentaire:
    "System.out.println(tableau[0]+"\t->\t"+tableau[1]);"

    (*)
    String[][] res = new String[al.size()][];
    al.toArray(res);
    System.out.println(al.size());
    for(String[] arr : res)
    {
    System.out.println(java.util.Arrays.toString(arr));
    }


    Et là, j'ai bien le résultat escompté que je vais essayé d'exploiter pour ma jTable.

    [designation 1, code 1]
    [designation 2, code 2]
    [designation 3, code 3]
    [designation 4, code 4]
    [designation 5, code 5]
    [designation 6, code 6]
    [designation 7, code 7]
    [designation 8, code 8]
    [designation 9, code 9]
    [designation 10, code 10]
    []
    []
    []
    []


    Allez au boulot!!
    Encore merci Fmunch .

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 156
    Points : 190
    Points
    190
    Par défaut
    La c'est simple il faut que tu filtre les lignes : celle qui ont aucun élément tu les vire ( il faut au moins deux éléments pour qu'il n'y ai pas d'ArrayIndexOutOfBoundsException ). C'est pas une exception à déclaration ou attrapage obligatoire : tu peut ou pas l'attraper avec un catch ou la déclarer avec throws au bout de ta fonction. Si tu regarde dans l'arbre des exceptions tu vois que ArrayIndexOutOfBoundsException est un sous type de RuntimeException ( enfin de IndexOutOfBoundsException juste avant ).

Discussions similaires

  1. [WD-2010] Taille des colonnes d'un tableau après .Split
    Par arr37 dans le forum VBA Word
    Réponses: 6
    Dernier message: 14/08/2014, 16h38
  2. Remplir un tableau avec Split("/")
    Par lolo81 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 16/10/2010, 13h44
  3. [2.0] Split sur une chaîne et non un tableau de caractères
    Par franculo_caoulene dans le forum VB.NET
    Réponses: 5
    Dernier message: 11/06/2008, 11h50
  4. Split vers tableau
    Par fasyr dans le forum Tcl/Tk
    Réponses: 1
    Dernier message: 11/02/2008, 13h57
  5. Split et calcul de ligne du tableau
    Par La_picolle dans le forum ASP
    Réponses: 6
    Dernier message: 27/08/2003, 15h58

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