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

avec Java Discussion :

Plusieurs délimiteurs scanner


Sujet :

avec Java

  1. #1
    Membre régulier Avatar de sub-0
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 197
    Points : 76
    Points
    76
    Par défaut Plusieurs délimiteurs scanner
    Bonjour tout le monde,
    J'ai une petite question par rapport à l'utilisation de plusieurs délimiteurs pour la fonction scanner, j'ai un fichier qui contient des tabulations et des sauts de lignes, et pour pouvoir charger le contenu, j'ai utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scanner.useDelimiter("[\t\n]");
    mais ça marche pas, je vois pas l'anomalie, quelqu'un peut me dire s'il a deja utilisé plusieurs délimiteurs ?
    Sachant que quand j'utilise un délimiteur normal avec une virgule ou un espace ça marche bien.
    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 607
    Points
    21 607
    Par défaut
    Je viens de faire un petit essai simple, et n'ai pas remarqué d'anomalie.
    À la rigueur il peut y avoir un comportement inattendu si ton fichier utilise \r\n comme fin de ligne au lieu de juste \n. Avec le délimiteur indiqué, le \r ne ferait pas partie du délimiteur, et ferait donc partie du token qui termine la ligne.

    Si c'est pas ça, il va falloir nous montrer un très petit exemple, code Java + fichier texte sur lequel le lancer, qui montre qu'il y a un problème.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre régulier Avatar de sub-0
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 197
    Points : 76
    Points
    76
    Par défaut
    ça marche pas non plus avec \r, la structure du fichier txt est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    3 75 8
    5 
    2 36 
    3 10
    15
    1 40
    3 25
    35
    2 15
    1 32
    le code java :
    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
     
    Scanner scanner=new Scanner(new File(fichier));
     
    	        scanner.useDelimiter("[\t\n]");
    		while (scanner.hasNextLine()) 
    		{
    			var1  = scanner.nextInt();
    			var2  = scanner.nextInt();
    			var3 = scanner.nextInt();
                            .
                            .
                            .
    			for(int i=0; i<nbLignes; i++)
    			{
    				var4 = scanner.nextInt();
    				for(int j=0;j<nbrLigne2;j++)
    				{ 
    					var21 = scanner.nextInt();
    					var22 = scanner.nextFloat();
                                            .
                                            .
                                            .
    				}
    			}
    		}
    		scanner.close();

  4. #4
    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 607
    Points
    21 607
    Par défaut
    Ce code Java ne compile pas, on ne peut pas vraiment s'y fier. Donne un exemple simple, clair, court, qui compile, et qui montre le problème.

    Sinon, des idées en vrac :

    - Le fichier texte ne contient aucune tabulation, seulement des espaces et des fins de ligne. La tabulation ne peut donc pas servir de séparateur, et a priori ce sont les espaces qui devraient.
    - Le fichier commence par une fin de ligne, donc par un séparateur. Donc le premier token est vide. Donc il faut le lire avec une méthode qui accepte de lire un token vide. Ce n'est pas le cas de nextInt(), qui va essayer de parser le token en int.
    - L'usage de variables nbLignes et nbLignes2 me semble contradictoire l'un avec l'autre, ainsi qu'avec l'usage d'un while(scanner.hasNextLine())
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre régulier Avatar de sub-0
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 197
    Points : 76
    Points
    76
    Par défaut
    j'ai modifié mon code, ca marche mais il conserve pas la structure, normalement vous pouvez l'executer pour voir ce que ça donne :
    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
     
     import java.io.File;
    import java.io.FileNotFoundException;
    import java.util.ArrayList;
    import java.util.Scanner;
    import java.util.regex.Pattern;
     
     
    public class Main {
     
    	/**
             * @param args
             * @throws FileNotFoundException 
             */
    	public static void main(String[] args) throws FileNotFoundException {
     
    		int var1,var2,var3,var4,var5;
    		float var6;
    		Scanner scanner=new Scanner(new File("graphe.txt"));
     
    		scanner.useDelimiter(Pattern.compile("[\n\\s]+"));
    		while (scanner.hasNextLine()) 
    		{
    			var1  = scanner.nextInt();
    			var2  = scanner.nextInt();
    			var3 = scanner.nextInt();
     
    			System.out.println(var1 +" "+var2 + " "+ var3);
    			for(int i=0; i<var1; i++)
    			{
    				var4 = Integer.parseInt(scanner.next());
    				System.out.println(var4);
     
    				for(int j=0;j<var1-2;j++)
    				{ 
    					var5 = Integer.parseInt(scanner.next());
    					var6 = Float.parseFloat(scanner.next());
    					System.out.println(var5 + " " + var6 );
    				}
    			}
    		}
    		scanner.close();
    	}
    }
    Merci

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 253
    Points : 446
    Points
    446
    Par défaut
    A mon avis, soit ton fichier graphe.txt ne respecte pas le format attendu, soit tu ne lis pas correctement.

    Quand tu entres dans la boucle avec 'j<var1-2', tu as var1=3, 3-2=1.
    Donc tu ne vas lire qu'un bloc de deux valeurs (int et float). Or dans ton fichier, il y a 2 blocs, d'où un décalage dans la lecture...
    Il est agréable d'avoir le choix. La difficulté est alors de faire le bon (ou le moins pire).

  7. #7
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Calvados (Basse Normandie)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Points : 1 241
    Points
    1 241
    Par défaut
    Ou alors l'expression régulière n'est pas bonne : http://java.developpez.com/faq/java/...RING_antislash

Discussions similaires

  1. Pb d'importation CSV à plusieurs délimiteurs
    Par Korben-Dallas dans le forum Débuter
    Réponses: 19
    Dernier message: 17/06/2010, 12h54
  2. Réponses: 3
    Dernier message: 22/03/2010, 09h08
  3. Réponses: 4
    Dernier message: 14/11/2007, 15h55
  4. SQL Server, mise en ligne de plusieur données avec délimiteur
    Par manhattan.project dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 12/06/2007, 17h52
  5. Explode avec plusieurs délimiteurs
    Par Seb33300 dans le forum Langage
    Réponses: 4
    Dernier message: 12/03/2007, 14h52

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