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 :

[Debutant]PB de StringTokenizer


Sujet :

Langage Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 344
    Par défaut [Debutant]PB de StringTokenizer
    bonjour ,

    j'ai des lignes a decouper des mots separés par |,

    pour cela j'utilise StringTokenizer
    j'ai plein de colonnes quand j'ouvre avec excel +26
    le pb c'est qu'il ne m'affiche pas au dela de 15 avec StringTokenizer

    voici 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
    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
     
    import java.io.FileReader;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.lang.*;
    import java.util.StringTokenizer;
     
     
     
    public class mytestcsv {// debut de class
    public static void main(String[] arguments) {//debut de main
     
     
     
    FileReader monFichier = null;
    BufferedReader tampon = null;
     
    	try {//debut try catch 1
    	monFichier = new FileReader("d:\\mydoc.txt");
    	tampon = new BufferedReader(monFichier);
     
    		int i=0;
     
    		while (true) {
    		// Lit ligne du fichier txt
    		String ligne = tampon.readLine();
    		// Vérifie la fin de fichier
    		if (ligne == null)
    		break;
    		//System.out.println(ligne);
     
    		//decoupage de la ligne
     
    		StringTokenizer st = new StringTokenizer(ligne, "|");
    		i++;
    		String[] tab_str = new String[st.countTokens()];
    		for ( int j = 0; j<st.countTokens();j++ )
    		{
     
     
    		 tab_str[j] = st.nextToken();
     
     
     
    		}
     
    				if (i>2){
     
    				System.out.println("------------------------------------");
    				System.out.println("ligne-> "+ligne);
    				System.out.println("nb carac->"+ligne.length());	
    				System.out.println("notice_id-> "+tab_str[0]);
    				System.out.println("reception_id-> "+tab_str[1]);
    				System.out.println("check_in-> "+tab_str[2]);
    				System.out.println("heading-> "+tab_str[3]);
    				System.out.println("proc-> "+tab_str[4]);
    				System.out.println("doc_type-> "+tab_str[5]);	
    				System.out.println("preptype-> "+tab_str[6]);
    				System.out.println("invoice-> "+tab_str[7]);
    				System.out.println("dispatch-> "+tab_str[8]);
    				System.out.println("reception-> "+tab_str[9]);
    				System.out.println("applicdeadline-> "+tab_str[10]);
    				System.out.println("exppublic-> "+tab_str[11]);
    				System.out.println("nc-> "+tab_str[12]);
    				System.out.println("publication-> "+tab_str[13]);
    				System.out.println("receptype-> "+tab_str[14]);
    				System.out.println("delfform-> "+tab_str[15]);
    				System.out.println("FaxGateway-> "+tab_str[16]);
    				System.out.println("------------------------------------");	
     
     
    				}
     
    		} // Fin du while
     
     
     
    	} catch (IOException exception) {//try catch 1
    	exception.printStackTrace();
    	} finally { //try catch 1
    		try {
    		tampon.close();
    		monFichier.close();
    		} catch(IOException exception1) {
    		exception1.printStackTrace();
    		}
    }//fin try catch 1
     
    } // Fin de main
    }//fin de class

    et voici le resultat dans le viewer :

    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
     
     
    ------------------------------------
    ligne-> 2007/S 185-226238|07-188488-003|22/09/2007 03:01:24|4210NF|1|3|PT|17S|22/09/2007 00:00:00|22/09/2007 00:00:00|05/11/2007 00:00:00|27/09/2007 00:00:00|2|26/09/2007 00:00:00|EMAIL|XML|SJS_MPOS_XML-|2007-011668|CH001|FR|CH|CH|Vilen|CH-Ven: Appareils de mesure du rayonnement|Pl Scrrer Insut|/home/js/S-JS/data/input/email_newforms/XMLP_20070921230921_1_CH001-XML01-20070921.zip|6|22/09/2007 03:01:27|25/09/2007 11:05:22||25/09/2007 10:51:00|25/09/2007 10:51:03 
    nb carac->481
    notice_id-> 2007/S 185-226238
    reception_id-> 07-188488-003
    check_in-> 22/09/2007 03:01:24
    heading-> 4210NF
    proc-> 1
    doc_type-> 3
    preptype-> PT
    invoice-> 17S
    dispatch-> 22/09/2007 00:00:00
    reception-> 22/09/2007 00:00:00
    applicdeadline-> 05/11/2007 00:00:00
    exppublic-> 27/09/2007 00:00:00
    nc-> 2
    publication-> 26/09/2007 00:00:00
    receptype-> EMAIL
    delfform-> XML
    FaxGateway-> null
    ------------------------------------
    donc cette partie n'est pas pris en compte.

    alors est-ce qu'il y a une taille limite?

    comment je peux faire pour qu'il prenne le reste de la ligne?

    Merci pour votre aide


  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Par défaut
    J'ai testé ton code parce que je ne trouvais rien d'anormal et effectivement, il n'y a rien de flagrant. Le problème vient du fait que la ligne de texte que tu veux parser contient un champ vide, c'est-à-dire deux délimiteurs accolés. Apparemment, StringTokenizer interprete ces deux délimiteurs comme un seul, ce qui explique que countTokens retourne 15 au lieu de 16.

    A la place de StringTokenizer, tu peux utiliser la méthode String.split() qui devrait te donner le bon résultat, et plus simplement

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 344
    Par défaut
    merci je vais essayer

  4. #4
    Membre éprouvé
    Inscrit en
    Juin 2007
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 125
    Par défaut
    Bonjour,
    +1 pour l'utilisation de String.split().

    Le problème vient du fait que la ligne de texte que tu veux parser contient un champ vide, c'est-à-dire deux délimiteurs accolés. Apparemment, StringTokenizer interprete ces deux délimiteurs comme un seul, ce qui explique que countTokens retourne 15 au lieu de 16.
    Je n'ai pas d'explication pour le problème mais je ne suis pas d'accord avec la tienne.

    Les deux délimiteurs accolés de la ligne de texte se trouve en position 28 et en 15 je vois
    |XML|SJS_MPOS_XML-|

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 344
    Par défaut
    bonjour,

    ca fonctionne avec split:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
     String[] tab_str = ligne.split("\\|");

    merci

    il est vrai je m'attendais plutot avoir des probleme avec split plutot que StringTokenizer

    j 'avais lu des posts dans ce sens

    en tout cas merci pour votre aide

    ca fonctionne je peux passer a la step suivante

    merci

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

Discussions similaires

  1. StringTokenizer() probleme debutant
    Par id.prog dans le forum Langage
    Réponses: 3
    Dernier message: 25/03/2008, 09h26
  2. DEBUTANT ArrayList & StringTokenizer
    Par kayzra dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 18/01/2007, 12h21
  3. [Débutant(e)] StringTokenizer
    Par laclac dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 10/02/2006, 11h26
  4. [Debutant] StringTokenizer problem
    Par berg dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 08/09/2005, 20h15
  5. [FLASH] pb debutant
    Par ultrakas dans le forum Flash
    Réponses: 2
    Dernier message: 05/06/2003, 00h48

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