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

Langage Java Discussion :

Vector - Récupérer contenu


Sujet :

Langage Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Points : 53
    Points
    53
    Par défaut Vector - Récupérer contenu
    Bonjour

    voila, je récupère les données d'un fichier .csv dans un Vector et je voudrais savoir comment récupérer par exemple la 2eme colonne du vecteur?

    merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Points : 540
    Points
    540
    Par défaut
    Bonjour jacko2,

    Tu as un Vector<String> contenant toutes les lignes de ton fichier ?

    Si c'est le cas, la notion de colonne n'existe pas dans ton Vector.

    Il vaudrait mieux alors que tu alimentes un Vector<String[]> ou String[] représente le tableau des colonnes de ton CSV, que tu as alimenté par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String[] s = ligne.split(";")
    Ensuite pour récupérer la nième colonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Vector<String> getColonne(int index)
    {
        Vector<String> out = new Vector<String>();
        for (String[] ligne : this.monVector.values())
            out.add(ligne[index]);
        return out;
    }

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Points : 53
    Points
    53
    Par défaut
    j'ai essayer avec le SPLIT mais il n'est pas dispo

    voila la parite de mon 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
     
       private void readFromLine(String tempLine) {
          if (tempLine == null) {
             return;
          }
          Vector currentLine = new Vector();
          Iterator iter = currentLine.listIterator();
          m_fileContent.add(currentLine);
          m_rowsCount++;
     
          if (tempLine.trim().length() == 0) {
             return;
          }
          int colCount = 0;
          int cursorBegin = 0;
          int cursorEnd = tempLine.indexOf(CELL_SEPARATOR);
          while (cursorBegin > -1) {
             if (cursorEnd == -1) {
                currentLine.add(tempLine.substring(cursorBegin));
                cursorBegin = cursorEnd;
             } else {
                currentLine.add(tempLine.substring(cursorBegin, cursorEnd));
                cursorBegin = cursorEnd + 1;
             }         
             cursorEnd = tempLine.indexOf(CELL_SEPARATOR, cursorBegin);
             colCount++;
             System.out.println(currentLine + "\n");
          }
          if (colCount > getColsCount()) {
             setColsCount(Math.max(getColsCount(), colCount));
          }
       }

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Points : 540
    Points
    540
    Par défaut
    Je crois que j'avais mal capté ce que tu voulais faire.

    Si tu veux récupérer le 2ème élément de ton Vector, tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String s2 = monVector.get(1); // retourne le 2ème élément
    String s3 = monVector.get(2); // retourne le 3ème élément
    ...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Points : 53
    Points
    53
    Par défaut
    j'obtiens une erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 1
    	at java.util.Vector.get(Unknown Source)

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Points : 540
    Points
    540
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (monVector.size() >= 2)
        String s2 = monVector.get(1); // retourne le 2ème élément
    else
       System.out.println("ZUT !!! mon Vector a moins de 2 éléments");

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Points : 53
    Points
    53
    Par défaut
    Citation Envoyé par Duc Lebowski Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (monVector.size() >= 2)
        String s2 = monVector.get(1); // retourne le 2ème élément
    else
       System.out.println("ZUT !!! mon Vector a moins de 2 éléments");
    et bien il y a 5 éléments

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Points : 53
    Points
    53
    Par défaut
    tu saurais me dire la méthode pour lire le fichier CSV et récupérer colonne par colonne?

    merci

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Points : 540
    Points
    540
    Par défaut
    Citation Envoyé par jacko2 Voir le message
    et bien il y a 5 éléments
    Bah je ne comprends pas dans ce cas là il ne devrait pas mettre Array index out of range...

    Citation Envoyé par jacko2 Voir le message
    tu saurais me dire la méthode pour lire le fichier CSV et récupérer colonne par colonne?
    Je suis désolé mais je ne comprends pas bien ce que tu veux faire.

    Quel type d'objet veux-tu en sortie de ta méthode lireFichier ?

    Vu que le split n'est pas reconnu, je suppose que tu es sur une vieille version de Java. Alors déjà voici l'équivalent du split qui va te permettre de te simplifier l'analyse de tes lignes :

    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
    static String[] split(String s, char sep)
    {
    	Collection c = new LinkedHashSet();
    	StringBuffer stemp = new StringBuffer();
    	char[] chs = s.toCharArray();
    	for (int i=0; i<chs.length; i++)
    	{
    		char current = chs[i]; 
    		if (current == sep) {
    			c.add(stemp.toString());
    			stemp = new StringBuffer();
    		}
    		else {
    			stemp.append(current);
    		}
    	}
    	if (stemp.length()>0)
    		c.add(stemp.toString());
    	return (String[])c.toArray(new String[0]);
    }
    Donc tu parcours tes lignes comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Vector getResult()
    {
        Vector/*String[]*/ result = new Vector();
        for (..., ..., ...) / chaque ligne du fichier
        {
            String ligne = ... // lecture ligne courante
            String[] colonnes = split(ligne, ';');
            result.add(colonnes);
        }
        return resultat;
    }
    La méthode pour isoler une colonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    String[] getColonne(Vector/*String[]*/ lignes, index)
    {
        Vector/*String*/ out = new Vector();
        for (Iterator it = lignes.iterator(); it.hasNext();) {
            String[] ligne = (String[])it.next();
            out.add(ligne[index]);
        }
        return out;
    }
    Et le main pour récupérer les résultats :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Vector lignes = getResult();
    Vector colonne = getColonne(lignes, 2);

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Points : 53
    Points
    53
    Par défaut
    j'ai fini par réussir

    un peu d'une drole de facon, mais le principal c'est ce ca fonctionne :p

    je mets tout le fichier dans un tampon, je le récupère puis je le split et hop j'ai mes champs !


    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
     
    private void readFromFile(String reader) {
    	File nom = new File(reader);
    	BufferedReader buffReader;
     
    	try {
    		buffReader = new BufferedReader(new FileReader(nom));
     
    		if (buffReader != null) {
    			try {
    				String tempLine;
    				tempLine = buffReader.readLine();
    				tampon = new StringBuffer();
     
    				while (tempLine != null) {
    					Vector currentLine = new Vector();
     
    					currentLine.add(tempLine);
    					String texte = "" + currentLine;
    						texte = texte.substring(1, (texte.length() - 1));
    					tampon.append("" + texte + "<br>");
     
    					tempLine = buffReader.readLine();
    				}
    			} catch (IOException e) {
    				System.err.println("Erreur lecture fichier CSV: " + e.toString());
    			} finally {
    				try {
    					buffReader.close();
    				} catch (IOException e) {
    					System.err.println("Erreur fermeture fichier CSV: " + e.toString());
    				}
    			}
    		}
     
    	} catch (FileNotFoundException e1) {
    		e1.printStackTrace();
    	}
    	System.runFinalization();
    	System.gc();
    }
    bon c'est vrai que c'est lourd comme traitement mais bon


    au fait, mon fichier csv fait des milliers de lignes (+ de 65000) et lorsque que j'essaye de lire un simple fichier texte de 40000 lignes il ne vas pas jusqu'au bout? j'ai du le raccourcir

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Points : 540
    Points
    540
    Par défaut
    Citation Envoyé par jacko2 Voir le message
    bon c'est vrai que c'est lourd comme traitement mais bon
    Je trouve pas ça si lourd que ça, au moins c'est précis.

    Citation Envoyé par jacko2 Voir le message
    mon fichier csv fait des milliers de lignes (+ de 65000) et lorsque que j'essaye de lire un simple fichier texte de 40000 lignes il ne vas pas jusqu'au bout
    Tu peux préciser ? tu as un OutOfMemory ?

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Points : 53
    Points
    53
    Par défaut
    voici le message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    java.lang.ArrayIndexOutOfBoundsException: 1
    	traitements.CreationFichier.creationFichier(CreationFichier.java:41)
    	CategoriesProblemes.doGet(CategoriesProblemes.java:40)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
    pour ces 2 lignes :
    traitements.CreationFichier.creationFichier(CreationFichier.java:41)
    CategoriesProblemes.doGet(CategoriesProblemes.java:40)

    ce n'est pas de là que vient l'erreur, car cela fonctionne avec un fichier plus petit

    je ne comprends pas, parce que mon fichier CSV fait 22 Mo et je n'ai pas cette erreur alors que mon fichier texte ne fait que 7,5 Mo et j'ai l'erreur

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Points : 540
    Points
    540
    Par défaut
    Cela ne doit pas venir de la taille de ton fichier.

    Tu peux donner l'instruction dadns CreationFichier.java à la ligne 41 ?

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Points : 53
    Points
    53
    Par défaut
    voici ma ligne 41

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    writer.ecrireFichier(val +  "	" + tab2[0] +  "	" + tab2[1] 
    +  "	" + tab2[3] +  "	" + tab2[15] + "	" + tab2[16] + "\n");
    mais je doute que ca vienne de là

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Points : 540
    Points
    540
    Par défaut
    Citation Envoyé par jacko2 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    java.lang.ArrayIndexOutOfBoundsException: 1
    	traitements.CreationFichier.creationFichier(CreationFichier.java:41)
    	...
    Java en tout cas te dit que cela vient de là.

    Affiche tab2.length dans la console avant d'appeler writer.ecrireFichier(...), ou passe en mode debug.

    Je paries qu'à un moment tab2.length == 0 !

    Tu as une ligne vide dans ton fichier ?

  16. #16
    Membre confirmé Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Points : 565
    Points
    565
    Par défaut
    Citation Envoyé par Duc Lebowski Voir le message
    Java en tout cas te dit que cela vient de là.

    Affiche tab2.length dans la console avant d'appeler writer.ecrireFichier(...), ou passe en mode debug.

    Je paries qu'à un moment tab2.length == 0 !

    Tu as une ligne vide dans ton fichier ?
    Pas forcement vide mais avec moins d'éléments que les autres ca devrait suffire pour provoquer l'erreur .

    Regarde la ligne du fichier qui fait planter et vérifie son format!
    C'est pas parce que ca marche que c'est bon!!
    Pensez au bouton "Résolu"
    Je ne réponds pas en privé aux questions

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Points : 53
    Points
    53
    Par défaut
    effectivement, après un test, j'ai remarqué qu'il y avait 3 records dont un champ était vide, j'ai donc supprimé ces 3 lignes et ce la fonctionne nikel

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Points : 53
    Points
    53
    Par défaut
    Bonjour,

    j'ai suivi vos conseils pour moi lire un fichier .csv mais est-ce la meme procédure pour lire un fichier excel ?
    parce que j'ai essayé, ca fonctionne sauf que ca affiche des caractères illisibles. J'ai meme convertit le fichier XLS en fichier texte et j'ai le meme problème alors que quand on ouvre le fichier avec un éditeur, c'est tout à fait lisible

    Merci d'avance.


    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
     
    private void readFromFile(String reader) {
    		File nom = new File(reader);
    		BufferedReader buffReader;
    		try {
    			buffReader = new BufferedReader(new FileReader(nom));
     
    			if (buffReader != null) {
    				try {
    					String tempLine;
    					tempLine = buffReader.readLine();
    					tampon = new StringBuffer();
     
    					while (tempLine != null) {
    						currentLine = new Vector<String>();
     
    						currentLine.add(tempLine);
    						String texte = "" + currentLine;
    						//texte = texte.substring(1, (texte.length() - 1));
    						tampon.append("" + texte + "<br>");
    						System.out.println(tampon.toString() + "\n");
     
    						tempLine = buffReader.readLine();
    					}
    				} catch (IOException e) {
    					System.err.println("Erreur lecture fichier CSV: "
    							+ e.toString());
    				} finally {
    					try {
    						buffReader.close();
    					} catch (IOException e) {
    						System.err.println("Erreur fermeture fichier CSV: "
    								+ e.toString());
    					}
    				}
    			}
     
    		} catch (FileNotFoundException e1) {
    			e1.printStackTrace();
    		}
    		System.runFinalization();
    		System.gc();
    	}

  19. #19
    Membre confirmé Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Points : 565
    Points
    565
    Par défaut
    Non ce n'est pas la meme procédure => excel est un fichier formaté il faut donc lire de facon formaté ...

    Ou alors tu ouvres ton fichier excel , tu fais "enregistrer sous" et la tu choisis le format CSV ( qui est fait pour les exports/imports de données )
    C'est pas parce que ca marche que c'est bon!!
    Pensez au bouton "Résolu"
    Je ne réponds pas en privé aux questions

  20. #20
    Nouveau Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut aide SVP
    hello,
    j'ai un probleme dans mon vecteur,
    mon probleme si j'ai 80 personne, je dois ecrire 80 fois la methode de l'ajout
    addElement(objet);
    voilà mon code source:
    Stagiaire stg=new Stagiaire();
    Stagiaire stg1=new Stagiaire();
    Passrelle p=new Passrelle();

    Vector<Object> v=new Vector<Object>();

    stg.saisire();
    p.saisir();
    stg1.saisire();

    v.addElement("Lundi");
    v.addElement(stg);
    v.addElement(p);
    v.add(3,stg1);

    for(int i=0;i<v.size();i++)
    System.out.println("element N°"+i+":"+ (v.elementAt(i)));


Discussions similaires

  1. Réponses: 5
    Dernier message: 11/06/2020, 12h44
  2. Récupérer contenu d'une page HTML
    Par ArHacKnIdE dans le forum Langage
    Réponses: 9
    Dernier message: 07/11/2006, 08h56
  3. Récupérer contenu d'un fichier texte
    Par matt8-5 dans le forum Langage
    Réponses: 5
    Dernier message: 02/11/2006, 17h58
  4. Vector : récupérer des valeurs
    Par bobic dans le forum Langage
    Réponses: 6
    Dernier message: 18/08/2006, 14h05
  5. [VBA-O]Récupérer contenu message
    Par Elstak dans le forum VBA Outlook
    Réponses: 14
    Dernier message: 17/08/2006, 09h34

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