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 :

[stringtokenizer] probleme avec champs vides


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 10
    Points : 10
    Points
    10
    Par défaut [stringtokenizer] probleme avec champs vides
    Bonjour j'ai un fichier csv avec comme délimiteur le string ","
    Le fichier csv comporte 5 colonnes qui sont de temps en temps vide

    Mon probleme c'est lorsque j'applique les methodes de la classe stringtokenizer sur un string comme:

    String line="Admins du domaine,,,CERF,User";
    StringTokenizer s = new StringTokenizer(line, ",");
    NBR = s.countTokens();

    ca ne tient pas compte des champs vides, NBR=3 et non 5

    comment faire?
    merci!

  2. #2
    Membre actif
    Avatar de narkotik
    Inscrit en
    Mai 2004
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 117
    Points : 229
    Points
    229
    Par défaut
    en mettant un espace entre les virgules ou y'a rien
    ca devrait marcher apres car les string ne seront pas à null
    (+mitch): nan mais nanar j'préfère mourir contre un platane apres un accident de voiture plutot que d'une rupture d'anévrisme devant mon ecran d'pc

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Essaye avec la méthode split() de la classe String, je ne sais pas si elle retoune les chaines vides :

    String[] elements = line.split(",");
    Clic me...
    CV en ligne

    Il y a 10 types de personnes, celui qui connait le binaire, et l'autre...

    Pas de réponse en MP...Merci

  4. #4
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    split ca a l'air de marché

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    J'ai du mal à te comprendre là...

    Je viens de faire le test et le code suivant me retourne bien 5 éléments.
    Pourquoi se compliquer la vie ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        String line="Admins du domaine,,,CERF,User"; 
        String[] elements = line.split(",");
    le résultat est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Admins du domaine
     
     
    CERF
    User
    avec 2 chaines vides en 2 et 3emes position
    Clic me...
    CV en ligne

    Il y a 10 types de personnes, celui qui connait le binaire, et l'autre...

    Pas de réponse en MP...Merci

  6. #6
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    oui oui merci

  7. #7
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 194
    Points : 102
    Points
    102
    Par défaut
    Petite précision car j'ai rencontré le pb recemment, la méthode split et toutes les méthodes de la classe String à base d'expression régulières en générale sont affreusement lourde.
    Si c'est pour une utilisation "normale" (jusqu'a un millier d'appel) ca peut aller mais au dela, le temps d'execution peut devenir tres long...

  8. #8
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 194
    Points : 102
    Points
    102
    Par défaut
    voila un bout de code qui permet de faire la même chose que spit(), c'est moins jolie mais terriblement efficace. Je viens de tester, le gain est de 300%
    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
     
    ArrayList lstExpression = new ArrayList();
    StringCharacterIterator iterator = new StringCharacterIterator(strChemin);
    char caractere = iterator.first();
    StringBuffer buffer = new StringBuffer("");
    // on itére sur la chaîne
    for(int i=iterator.getBeginIndex();i<iterator.getEndIndex();i++)
    {
       if(caractere == ',')
       {
            lstExpression .add(buffer.toString());
            buffer = new StringBuffer(""); 
       }
       else
       { 
           //Concaténation des caractères dans le buffer
           buffer.append(caractere);
       }
       caractere = iterator.next();
    }
    lstExpression.add(buffer.toString());

  9. #9
    Membre régulier Avatar de fedfil
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 91
    Points : 93
    Points
    93
    Par défaut Re: [resolu][stringtokenizer] probleme avec champs vides
    Bonjour à vous,

    Citation Envoyé par gege2mars
    Bonjour j'ai un fichier csv avec comme délimiteur le string ","
    En plus compliqué, un fichier csv prend aussi en compte un Text Qualifier (habituellement le caractère ")
    -> plus d'info, http://www.visi.com/~hawkeyd/csvutils.html

    C'est à dire que si le ; est entre des ", il ne doit pas être pris en compte ...
    ex de ligne: toto;"tata;titi"
    resultat, deux colonnes: [toto], [tata;titi]


    aussi, le line.split(",") ne suffit pas ... la solution est de trouver le bon regex permettant de gérer le fameux text qualifier mais je vous avoue que j'ai un peu de mal avec cela ...

    Si une âme charitable aurait ce talent là... merci d'avance.
    Fred

  10. #10
    Membre régulier Avatar de fedfil
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 91
    Points : 93
    Points
    93
    Par défaut
    bonjour,

    après maints tests, j'ai enfin tombé sur un truc correct ...
    pour ce qui avait donc le même pb:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Pattern p = Pattern.compile("\"([^\"]|\"\")*\"(;|$)|[^;]*(;|$)");
    Matcher m = p.matcher(test);
     
    while ( m.find() )
      System.out.println(m.group());
    Ce regexp permet de gérer le textqualifier tout en gérant le "" (considéré comme un caractère d'échappement)

    ++
    Fred

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme jointure avec champs vides
    Par wylls dans le forum Requêtes
    Réponses: 3
    Dernier message: 04/02/2008, 23h42
  2. Probleme avec champ de type LONG
    Par Youby dans le forum Oracle
    Réponses: 11
    Dernier message: 17/01/2006, 16h26
  3. Probleme de champ vide
    Par Bradarys dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 30/11/2005, 07h53
  4. Pb sélection avec Champ vide
    Par Luffy Duck dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/10/2005, 12h11
  5. Pb de tri avec champs vide
    Par nesbla dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/06/2004, 17h42

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