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

Java Discussion :

Stringtokenizer avec retour à la ligne


Sujet :

Java

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 145
    Points : 80
    Points
    80
    Par défaut Stringtokenizer avec retour à la ligne
    Bonjour,

    je travaille sur un logiciel en java sous eclipse et j'ai un petit problème que je n'arrive pas du tout à résoudre.

    J'ai un fichier .mid.
    Si je l'ouvre avec notpade++, j'ai des données du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    "15/02/2012",16,17.0,3.6
    "18/02/2012",5,7.4,2.5
    "18/02/2012",12,7.6,2.5
    ...
    J'ai donc des virgules comme séparateur et des retours à la ligne.
    J'utilise la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.util.StringTokenizer tokenizer = new java.util.StringTokenizer(buffer, ",\r\n");
    Pour la virgule aucun problème mais impossible de détecter le retour chariot.
    J'ai essayé \n , \t\n , \r\n , System.getProperty("line.separator" ), ... mais rien ne marche.
    Je pense que pour "\n\r" ou autre String dans ce genre chaque caractère est prix individuellement et donc pas comme un retour à la ligne

    Pourriez-vous m'aider ?

    Merci.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 608
    Points
    21 608
    Par défaut
    Chez moi ça marche. 'Faudrait que tu nous montres comment tu construis la variable "buffer" et comment tu fais ta boucle pour lire le tokenizer.

    Je pense que pour "\n\r" ou autre String dans ce genre chaque caractère est prix individuellement et donc pas comme un retour à la ligne
    C'est vrai, mais on s'en tape, ça marche quand même. Chaque fin de ligne est constituée de deux délimiteurs consécutifs. Et alors ? Ça fonctionne très bien...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Je te suggère d'utiliser la méthode "split()" de la classe String plutôt que StringTokenizer : c'est plus simple à utiliser, et ça offre plus de possibilités (en particulier grâce aux expressions régulières).
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 145
    Points : 80
    Points
    80
    Par défaut
    Merci pour vos réponses.
    Je vous envoie ce que j'ai.

    Code pour la lecture :
    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
    public String[] lire (String path) 
    	{
    		BufferedReader lect ;
    		String tmp = "";
    		String bufferComplet[] = new String[25];
     
    		try
    		{
    			lect = new BufferedReader(new FileReader(path)) ;
    			while (lect.ready()==true) 
    			{
    				tmp += lect.readLine() ; 
    				count ++;
    			}//while
     
    		}//try
    		catch (NullPointerException a)
    		{
    			System.out.println("Erreur : pointeur null");
    		}
    		catch (IOException a) 
    		{
    			System.out.println("Problème d'IO");
    		}
     
    		return bufferComplet;
    	}
    Code pour séparer les différents éléments :
    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
    public String[] separateur (String buffer, int nombreLignes){    
     
    		java.util.StringTokenizer tokenizer = new java.util.StringTokenizer(buffer, ",\r\n");
     
    		int nombreColonnes = 19;
     
    		String buffer0[] = new String[nombreLignes*nombreColonnes];
     
    		String token;
    		int test = 0;
     
    		while ( tokenizer.hasMoreTokens() ) {
    			token = tokenizer.nextToken();
     
    			   buffer0[test]= token;
    			   test++;		
    		}
    		return buffer0;
    	}

  5. #5
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Ta méthode lire() regroupe un grand nombre d'erreur !!!


    • Tu retournes un tableau de 25 String vide (tu ne mets jamais rien dedans).
    • Tu interceptes des exceptions pour te contenter d'un System.out ! Il est préférable de rien faire plutôt que cela
    • Tu concatènes tout dans une String, ce qui va pourrir les performances ( StringBuilder)
    • Tu utilises ready() qui n'apporte aucune garantie
    • Tu ne libères pas ton flux...



    A noter également que tu ne spécifies pas d'encodage pour la lecture du fichier...


    Enfin readLine() supprime les caractères de fin de ligne...



    a++

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 145
    Points : 80
    Points
    80
    Par défaut
    Salut, merci pour ta réponse.

    Sais tu par quoi je peux remplacer la méthode readline() pour faire la même chose sans supprimer les caractères de fin de ligne ?

    Pour le "bufferComplet " j'ai oublié de coller cette ligne dans le code après la boucle while :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bufferComplet = separateur(tmp, count);

  7. #7
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Il faudrait surtout savoir ce que tu veux faire précisément. Car si tu veux lire un fichier CSV ce découpage en ligne peut être très utile justement...


    Tu veux aboutir à quoi ?


    a++

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 145
    Points : 80
    Points
    80
    Par défaut
    En fait je récupère un fichier au format mid de la forme :
    "15/02/2012",16,17.0,3.6
    "18/02/2012",5,7.4,2.5
    "18/02/2012",12,7.6,2.5
    ...


    Ce que je veux c'est pouvoir mettre dans un tableau (une JTable) ces valeurs par type.
    Ce que je fais n'est peut-être pas la bonne méthode mais ça marche presque à part le retour à la ligne qui n'est pas détecté.

  9. #9
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Ton problème de fin de ligne est un faux-problème : tu lis le fichier ligne par ligne, donc c'est à ce moment là qu'il faut découper la ligne.

    Toi tu lis ligne par lignes, puis tu les regroupes pour les redécouper ensuite


    a++

  10. #10
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 145
    Points : 80
    Points
    80
    Par défaut
    Merci pour les informations.

    J'ai ajouté : dans la boucle while et ça marche.

  11. #11
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Bref, tu n'as pas pris en compte les remarques que j'avais faites...


    a++

  12. #12
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 145
    Points : 80
    Points
    80
    Par défaut
    Salut, j'ai essayé de prendre en compte tes remarques mais sans succès.
    Je sais que ma solution n'est pas terrible du tout mais pour le moment je n'ai que ça qui marche.
    Pour l'améliorer, cet-à-dire ne pas avoir besoin de lire ligne par lignes le fichier, puis de regrouper et enfin redécouper.
    J'aimerai faire quelque chose de plus simple mais je n'arrive pas.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 04/07/2007, 14h33
  2. [utilitaire bcp]problème avec retour à la ligne
    Par m-mas dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/05/2007, 15h10
  3. [CSS] espace dans les li avec retour à la ligne
    Par grinder59 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 04/07/2006, 11h00
  4. Bouton avec retour a ligne
    Par Dsphinx dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 29/05/2006, 21h30
  5. Concatérner chaine avec retour à la ligne
    Par nebule dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 30/11/2004, 11h55

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