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 :

[Débutant] Vecteur / Tableau ?


Sujet :

Collection et Stream Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 15
    Points : 9
    Points
    9
    Par défaut [Débutant] Vecteur / Tableau ?
    Bonjour,
    J'ai eu l'idée y'a deux jours de me mettre à Java afin de réaliser une appli qui va faciliter grandement la vie de mes collègues au travail. Je m'explique :

    Je récupère un fichier CSV, séparateur de cellules ";", contenant pour l'exemple 10 "colones" (donc 10 informations différentes sur chaque ligne).

    Mon but est d'aller lire dans ce fichier et ne traiter que les lignes dont la cellule n°1 contient OK ET dont la n°4 contient TOTO.

    Ensuite je veux récupèrer, pour chaque ligne traitée, le contenu des cellules n°2, n°5 et n°10.


    Je pense que c'est clair pour le QUOI. Ce qui l'est moins pour moi c'est le COMMENT !
    Ma question se porte donc sur le choix du bon truc à utiliser : vecteur ? tableau ? liste ?
    Si j'ai bien compris, pour utiliser un tableau on doit connaitre à l'avance le nombre de colones et de lignes, ce qui ne m'arrange pas trop car ça m'obligerait à compter le nombre de lignes A TRAITER avant de les traiter.
    J'ai donc ensuite découvert le vecteur, c'est dynamique donc ça me plait bien, sauf que je ne sais pas si un vecteur peut, comme un tableau, recevoir pour chaque ligne, plusieurs colones et encore moins comment je peux faire pour dire à Java qu'il y a plusieurs colonnes dans mon vecteur.

    Une personne saurait-elle me guider dans mon choix, avec pourquoi pas un exemple tout simple à me montrer ?

  2. #2
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Bonjour.
    Tout d'abord, il faut exclure Vector Il fait partie de l'ancien API de collections et est replacé par List et/ou Set.

    Ensuite, en effet, la liste semble bien plus adapté du fait de son aspect dynamique. en ce qui concerne les colonnes, il suffit de faire une liste de listes

    Bonne chance.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Ok, j'ai pas trop compris le coup de l'API je sais pas quoi.

    Vais me rencarder sur les listes donc.

    Merci en tout cas !

  4. #4
    Membre actif Avatar de djidane39
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 272
    Points : 250
    Points
    250
    Par défaut
    Vector ne sera plus présente dans les prochaine version de Java ou déconseillé à l'utilisation, car remplacer par List ou Set ^_^

  5. #5
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Une ptite source pour la lecture de fichiers CSV : http://java.developpez.com/sources/?...ers#LectureCSV

  6. #6
    Membre chevronné
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Points : 2 011
    Points
    2 011
    Par défaut
    Citation Envoyé par djidane39 Voir le message
    Vector ne sera plus présente dans les prochaine version de Java ou déconseillé à l'utilisation, car remplacer par List ou Set ^_^
    Vector n'est même pas dépréciée dans Java 6. Il y a donc peu de chance qu'elle disparaisse dans Java 7.

    Mais il vrai qu'il vaut mieux utiliser les List.

  7. #7
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Citation Envoyé par Deadpool Voir le message
    Vector n'est même pas dépréciée dans Java 6.
    A cause de la compatibilité ascendante c'est tout.
    Déprécier vector causera énormément de warnings dans les applications. Mais je serais quand même favorable à cette dépréciation, mais bon... c'est pas nous qui décidons hein.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Pour être tout à fait honnete, je nage un peu dans la semoule sur les listes de listes.
    J'ai fait un croquis pour voir si j'ai bien compris "visuellement" le principe :
    Nom : Listes.jpg
Affichages : 73
Taille : 18,2 Ko

    En gros si j'ai bien saisi le principe je dois faire une premiere "liste A" qui contient une "case" par ligne que je traite dans mon fichier. Par exemple si j'ai 15 lignes traitées dans mon fichier, "liste A" aura 15 cases numérotées de 0 à 14.
    Et quand j'ouvre une nouvelle case A0 pour mettre le contenu de ma première ligne traitée, je crée dedans une "liste AA" de 10 cases (puisque 10 cellules dans mes lignes du fichier CSV).

    Ensuite pour accèder à la 4è valeur de la premiere ligne il ne me reste qu'a dire à Java que je veux consulter le contenu de AB4 qui se trouve dans A0.

    C'est bien le principe ?

    Encore une fois, merci de vous y pencher et désolé de la probable "bêtitude" de mes questions.

  9. #9
    Membre confirmé Avatar de julien-blaise
    Homme Profil pro
    Développeur Java et C#
    Inscrit en
    Mai 2005
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java et C#

    Informations forums :
    Inscription : Mai 2005
    Messages : 458
    Points : 620
    Points
    620
    Par défaut
    Salut,

    Tes questions n'ont rien de bête, on se les ait tous poser un jour rassure toi
    Sinon, concernant ta solution, tu sembles avoir un pigé le concept.
    Tu fais en effet une première liste qui contiendra les autres listes. Par contre petite précision, tu n'es pas obligé de définir à l'avance leur taille.
    Tu n'es donc pas obligé de connaitre à l'avance la taille de ton fichier, ni le nombre de colonne qui le compose.
    Par contre, je ne sais pas ce que tu utilise comme méthode pour parser ton fichier, mais moi j'utilise la méthode split() de la classe String qui me retourne un tableau de String, donc du coup j'ai déjà une partie du boulot de fait

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Merci bien pour cette précision, je m'y intéresserai probablement bientot.

    Sinon j'ai résolu mon souci de listes and co :

    Je gère mes lignes comme une liste en mettant comme séparateur le point-virugle et ça fonctionne très bien.

    Mon code est bien évidemment dégueulasse, pas optimisé je pense.

    Enfin voyez par vous meme :

    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
     
    import java.io.*;
    import java.util.*;
     
    public class LectureFichier {
    	public static void main(String[] args){
    		String[] fichier = new String[4];
                    fichier[0] = "CLELIN.CSV";
                    fichier[1] = "CLZLIN.CSV";
                    fichier[2] = "CLUPAP.CSV";
                    fichier[3] = "CLEPAP.CSV";
                    int numFichier;
     
                    for(numFichier = 0; numFichier < fichier.length; numFichier++){
                       System.out.println(fichier[numFichier]);
                       ArrayList liste = new ArrayList();
                    try{
    			InputStream ips=new FileInputStream(fichier[numFichier]);
    			InputStreamReader ipsr=new InputStreamReader(ips);
    			BufferedReader br=new BufferedReader(ipsr);
    			String ligne;
    			while ((ligne=br.readLine())!=null){
    				liste.add(ligne);
    			}
    			br.close();
    		}
    		catch (Exception e){
    			System.out.println(e.toString());
    		}
     
    		String s;
    		String separateur = ";";
    		String resultat;
    		int i;
    		int c;
    		int index = 0;
    		int nbAppErr;
    		for(i = 0; i < liste.size(); i++){
    			s = (String)liste.get(i);
    			ArrayList listeLigne = new ArrayList();
    			try{
                                c = Integer.parseInt(s.substring(0,1));
                                if(c==2 ){
                                          index = s.indexOf(separateur);
                                          while(index >= 0){
                                                     listeLigne.add(s.substring(0, index));
                                                     s = s.substring(index + separateur.length(), s.length());
                                                     index = s.indexOf(separateur);
                                          }
                                          listeLigne.add(s);
                                          resultat = (String)listeLigne.get(4)+" ==> "+(String)listeLigne.get(7)+" <== "+(String)listeLigne.get(11);
                                          System.out.println(resultat);
                                          }
                                 else{}
                             }
                             catch (Exception e){
                                       //System.out.println(e.toString());
                                       }
    		}
               System.out.println("-------------------------------");
             }
            }
    }
    Mais pour l'instant au fur et à mesure que j'avance, ça fait ce que je veux que ça fasse. Et c'est pas finit d'évoluer !

  11. #11
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Comme te le suggère julien-blaise, la méthode split(";") devrait t'aider.
    En 1 instruction tu récupères un tableau d'éléments et tu pourras y accéder directement par son indice...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    String ligne = "OK;Mon truc;Le suivant;etc;";
    String[] result = ligne.split(";");
     
    if ( result[0].equals("OK") )
    {
       ...
    }
    A+

  12. #12
    Membre actif
    Avatar de bobuse
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 232
    Points : 278
    Points
    278
    Par défaut
    Hello, je voudrai pas trop pourrir le fil de discussion. Mais pour ce genre de problème, je préfère utiliser Python qui sera plus rapide et plus souple à développer.

    Mais ceci dit, si tu ne connais pas Java, c'est un bon moyen de commencer et tu sembles bien parti, alors continue

Discussions similaires

  1. Réponses: 7
    Dernier message: 19/01/2006, 18h57
  2. Réponses: 10
    Dernier message: 19/01/2006, 06h41
  3. [Débutant] [Conseil] Tableau ou vector
    Par nana1 dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 04/11/2005, 09h56
  4. [Débutant]Vecteur de pointeurs
    Par @r$£~%[ dans le forum C++
    Réponses: 18
    Dernier message: 09/08/2005, 16h19
  5. [Débutant] Tri tableau String
    Par Sigwald dans le forum Collection et Stream
    Réponses: 22
    Dernier message: 14/05/2004, 08h55

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