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

Entrée/Sortie Java Discussion :

Problème de split lors d'une lecture d'un fichier csv


Sujet :

Entrée/Sortie Java

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Problème de split lors d'une lecture d'un fichier csv
    Hello tout le monde!

    Histoire de faire rire la galerie (je ris déjà à vrai dire mais plutôt jaune), j'ai un soucis en java lorsque je tente de lire des données dans un fichier csv.

    Mon fichier contient une ligne pour l'exemple:
    000000100207;000000000100;504;Toto
    Ce que je souhaite c'est les récupérer pour les traiter.. Donc en gros ça donne ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    InputStream is = zf.getInputStream(monFichier);
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);
     
    String line="";
     
    while (br.ready()) {  
          line= br.readLine();
     
          String[] values = line.split(";");
          System.out.println(values[0]);
    }

    Le hic c'est que j'obtiens:

    "000000100207
    Forcément comme je tente ensuite de parser un Long... j'me retrouve avec une Joooooolie java.lang.NumberFormatException: For input string: ""000000100207"

    Est ce que quelqu'un aurait une idée???

    Merci merci d'avance!


    mawinette qui assume mais pas trop....

  2. #2
    Membre actif Avatar de jiddou
    Inscrit en
    Août 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 247
    Points : 251
    Points
    251
    Par défaut
    Déjà je ne suis pas d'accord avec ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while (br.ready()) {
    line= br.readLine();
    parce que tout simplement je ne connaît pas la méthode ready mais je la test tout de suite.En attendant le code classique qu'on utilise d'habitude c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while ((line=br.readLine())!=null) {
    String[] values = line.split(";");
    Tu peux par la même occasion nous envoyer un exemple de csv que tu traites.

    Utilises les balises pour poster ton code.
    Merci

  3. #3
    Membre actif
    Homme Profil pro
    Analyst
    Inscrit en
    Juillet 2008
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyst
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 150
    Points : 217
    Points
    217
    Par défaut Conversion numérique
    Bonsoir,
    A la lecture de ton message, le problème semble plus être un probleme de conversion de nombre que de CSV.

    Tu peux rechercher les différentes façon de convertir, en voici une
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    String line="000000100207;000000000100;504;Toto";
    String[] values = line.split(";");
    System.out.println(values[0]);
     
    Double val=new Double(values[0]);
    System.out.println("Val="+val.longValue());

  4. #4
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Tout d'abord merci pour vos réponses!

    Je vais essayer de reprendre en tenant compte de ce que vous m'avez dit.

    J'ai un fichier au format csv qui contient une ligne (En PJ, au format xls sinon ca passe pas):
    000000100207;000000000100;504;toto

    Donc si je reprends vos 2 réponses pour le code, ca donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    InputStream is = zf.getInputStream(monFichier);
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);
     
    String line="";
     
    while ((line=br.readLine())!=null) {  
     
      String[] values = line.split(";");
          System.out.println(new Long(values[0]));
    }
    J'obtient l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    java.lang.NumberFormatException: For input string: ""000000100207"
    	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:63)
    	at java.lang.Long.parseLong(Long.java:418)
    	at java.lang.Long.<init>(Long.java:686)
    J'aimerai savoir pourquoi il me rajoute des "" supplémentaires et surtout comment palier le problème.. J'dois déconner quelque part dans mon code mais pour être honnête la je ne vois pas où.

    Merci encore
    Fichiers attachés Fichiers attachés

  5. #5
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Citation Envoyé par Mawinette Voir le message
    J'aimerai savoir pourquoi il me rajoute des "" supplémentaires et surtout comment palier le problème.. J'dois déconner quelque part dans mon code mais pour être honnête la je ne vois pas où.
    Ben il ne te rajoute pas les "" , ceux ci sont bien présent dans le fichier
    Citation Envoyé par monFichier.xls
    "000000100207;000000000100;504;toto"
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  6. #6
    Membre actif Avatar de jiddou
    Inscrit en
    Août 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 247
    Points : 251
    Points
    251
    Par défaut
    Effectivement dans le fichier il y'a la chaine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "000000100207;000000000100;504;toto"
    et pour y remédier tu peux enchainer deux split.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while ((line=br.readLine())!=null) {  
      String[] temp = line.split("\"");  
      String[] values = temp[1].split(";");
          System.out.println(new Long(values[0]));
    }

  7. #7
    Membre éprouvé Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Points : 1 154
    Points
    1 154
    Par défaut
    Le problème vient d'Excel, qui rajoute souvent des caractères comme les guillemets, même si tu demandes du csv simple.

    Si je peux me permettre Excel se mélange très mal avec une application, même java: il risque de modifier tes dates, tes numériques, tes séparateurs, etc.

    Si tu traites des fichiers plats normaux, autant utiliser un éditeur de texte plus simple.

    Sinon tu peux t'en sortir en splittant sur le guillemet comme dit plus haut ou tout simplement en les supprimant avant le split:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while ((line=br.readLine())!=null) {  
      line = line.replaceAll("\"", "");  
      String[] values = line.split(";");
          System.out.println(new Long(values[0]));
    }
    Veuillez agréer nos sentiments les plus distingués. Soyez assurés de notre entière collaboration, bien à vous pour toujours et à jamais dans l'unique but de servir l'espérance de votre satisfaction, dis bonjour à ton père et à ta mère, bonne pétanque, mets ton écharpe fais froid dehors.

  8. #8
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Je vous remercie!

    Effectivement, c'est bien dans le fichier que ca se passe..
    Je ne comprenais pas comment 2 fichiers au même format contenant les même données à un chiffre prêt pouvaientt ne pas donner le même résultat, à savoir l'un avec les "" et l'autre sans..

    Bref! C'est vrai que le format choisi est un peu risqué mais bon, qd on est déjà en situation où on est obligé de coder sur vista.. Perso, j'm'attends à toutes les mauvaises surprises.

    Merci encore!

    Mawinette

Discussions similaires

  1. Problème d'accent lors de la lecture d'un fichier texte
    Par petit rabot dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 23/11/2017, 08h57
  2. [Batch] Problème avec caractère ! lors d'une lecture de fichier pour extraction
    Par damsmut dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 20/11/2012, 16h21
  3. Réponses: 11
    Dernier message: 27/04/2006, 08h56
  4. [JDOM] Problème d'iterateur lors d'une suppression
    Par romuluslepunk dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 07/01/2006, 15h00
  5. Problème lors de la lecture d'un fichier avec Input...
    Par Kronoob dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 18/11/2005, 18h55

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