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
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
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é parEnsuite pour récupérer la nième colonne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part String[] s = ligne.split(";")
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; }
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)); } }
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 ...
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)
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");
tu saurais me dire la méthode pour lire le fichier CSV et récupérer colonne par colonne?
merci
Bah je ne comprends pas dans ce cas là il ne devrait pas mettre Array index out of range...
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 :
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
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]); }
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
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; }
Et le main pour récupérer les résultats :
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; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Vector lignes = getResult(); Vector colonne = getColonne(lignes, 2);
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 !
bon c'est vrai que c'est lourd comme traitement mais bon
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(); }
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
voici le message d'erreur :
pour ces 2 lignes :
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)
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
Cela ne doit pas venir de la taille de ton fichier.
Tu peux donner l'instruction dadns CreationFichier.java à la ligne 41 ?
voici ma ligne 41
mais je doute que ca vienne de là
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");
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
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
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(); }
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
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)));
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager