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 :

Lecture fichier .txt


Sujet :

Entrée/Sortie Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Lecture fichier .txt
    Bonjour,

    J'ai pris le code disponible dans la FAQ mais je me retrouve face à un petit soucis. J'essaie de lire un fichier .txt de cette forme là :

    2
    1000
    1;2
    3;4
    .
    .
    .
    n;m

    Le fonctionnement est le suivant :

    lecture de la première ligne qui est mon nombre de ligne
    lecture de la deuxième ligne qui est une valeur temps total dont j'ai besoin
    lecture d'une série de points à deux coordonnées séparés par un ";"


    J'ai l'erreur suivante :

    Exception in thread "main" java.util.InputMismatchException

    Mon problème étant que je n'arrive pas à parcourir tout le fichier, il lit les deux premières lignes parfaitement bien mais à partir de la troisième ligne (les séries de doublons), il ne lit que le premier élément.

    Le switch est juste pour séparer mon fichier en deux cas : ligne k, colonne 1 et colonne 2.

    Le soucis vient du case(1).


    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
     
    	public static double [][] harvestFile () throws FileNotFoundException
    	{
    		String filePath = "c:\\test.txt";
     
    		Scanner scanner=new Scanner(new File(filePath));
     
    		int numLignes=0; // initialise le compteur de ligne
     
     
    		while (numLignes<2) 
    		{
    		    String line = scanner.nextLine();
    		    int num = Integer.parseInt(line); //convertir le string en integer
    		   switch(numLignes)
    		   {
    		   		case(0): nbreElem=num;break;
    		   		case(1): tpsTot=num;break;
    		   }
     
     
    		    numLignes ++;
    		}
     
     
    		double matDonnees[][]=new double [nbreElem][2];
     
    		scanner.useDelimiter(Pattern.compile(";"));
     
    		// On boucle sur chaque champ detecté
     
    		numLignes=0;
    		int k=0;
    		while (scanner.hasNext()) 
    		{
                                  switch(k)
    		    {
    		    	case(0):matDonnees[numLignes][k] = scanner.nextDouble();k++;break;
    		    	case(1):matDonnees[numLignes][k] = scanner.nextDouble();numLignes++;k=0;break;
    		    }		    
    		}
    		scanner.close();
    		return matDonnees;
    	}
    En remerciant d'avance une âme charitable qui pourrait m'expliquer mon erreur.

  2. #2
    Membre averti

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 85
    Points : 355
    Points
    355
    Par défaut
    salut,

    je ne sais pas pour les autres, mais personnellement je n'ai rien compris à ton problème.
    Pourrais-tu être un peu plus clair ? Qu'est-ce que tu veux récupérer exactement dans ce fichier?

    Si tu pouvais être un peu plus précis, je me ferai un plaisir de t'aider...

  3. #3
    Membre habitué Avatar de erictoguem
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Points : 187
    Points
    187
    Par défaut
    Si ton fichier est structuré utilise la classe Scanner pour le parcourir!

  4. #4
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Je vais essayer de voir si je n'arrive pas à prendre une classe toute faite et mettre mes données sous forme d'un .csv.


    J'ai édité le post initial pour mieux expliquer le problème que j'avais, au cas où ça intéresserait quelqu'un (ou si quelqu'un a la réponse à mon problème).

    Je crois que le noeud du problème est le case(1). D'ailleurs, une des solutions que j'avais trouvé était de mettre un nextLine() mais dans ce cas je récupère le ;2 et pas seulement le 2. Je vais toutefois regarder encore si je ne peux pas inclure dans le delimiter un \n mais pour le moment, c'est infructueux, Je vais faire des recherches pour voir ce que je fais mal.

    Merci en tout cas pour les réponses

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Bon.. ce n'est pas très propre mais j'ai une solution.


    Je mets le code au cas où ça interesse quelqu'un :

    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
     
     
    	public static String[] harvestFile () throws FileNotFoundException
    	{
    		String filePath = "c:\\test.txt";
     
    		Scanner scanner=new Scanner(new File(filePath));
     
    		int numLignes=0; // initialise le compteur de ligne
     
    		//on lit les deux premières lignes
    		while (numLignes<2) 
    		{
    		    String line = scanner.nextLine();
    		    int num = Integer.parseInt(line); //convertir le string en integer
    		   switch(numLignes)
    		   {
    		   		case(0): nbreElem=num;break;
    		   		case(1): tpsTot=num;break;
    		   }
     
     
    		    numLignes ++;
    		}
     
     
    		String Recup_don[]=new String[nbreElem];
     
    		numLignes=0;
    		//int k=0;
    		while (scanner.hasNext()) 
    		{
     
    			Recup_don[numLignes]=scanner.nextLine();
    			numLignes++;
     
    		}
    		scanner.close();
    		return Recup_don;
    	}
     
     
     
     
    	public static double[][] CreerMatrice(String[] donnees_string, String[] classe) {
    		double matDonnees[][]=new double [nbreElem][2];
     
    		for(int i=0;i<donnees_string.length;i++)
    		{
    			String input = donnees_string[i];
    			Scanner s = new Scanner(input).useDelimiter(";");
    		    int k=0;
    		    matDonnees[i][k]=s.nextDouble();
    		    k++;
    		    matDonnees[i][k]=s.nextDouble();
    		    classe[i]=s.next();
    		    if(i<donnees_string.length)
    		    {
    		    	s.close();
    		    }
    		}
     
     
    		return matDonnees;
    	}
     
     
     
    public static void main(String[] args) throws FileNotFoundException 
    	{
    		String[] donnees_string=harvestFile();
    		String[] classe = new String[nbreElem];
    		double donnees[][]=CreerMatrice(donnees_string, classe);
     
     
    }

    le truc le moins élégant, c'est sans doute pour récupérer ce que j'appelle classe et le if pour fermer le scanner.

    Je vais voir comment gérer ça, mais lorsque le déclarais comme variable publique de ma classe, ça n'allait pas mais ce sont les bases de java donc ça ne doit pas être dur à trouver. En attendant, ça fonctionne !

    Si je dois commenter le code, la fonction harvestFile récupère les données dans le fichier texte sous forme d'une ligne de type String et la fonction CreerMatrice segmente cette ligne pour isoler les éléments et les sauver dans des matrices.

    voilà ! à pluche et merci en tout cas pour ceux qui ont jeté un coup d'oeil

    PS : je mets le post en "résolu"

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 338
    Points : 402
    Points
    402
    Par défaut
    Salut
    C'est normal que tu parcours pas tout ton fichier à cause de ta boucle while qui fait que 2 itérations faut faire au lieu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //Lire les 2 premiere lignes..
    while(scanner.hasNextLine()) {
    String line = scanner.nextLine();
    //traitement...
    }
    Cdlt

  7. #7
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    C'était volontaire en fait pour la première boucle.

    Les deux premières données sont dans mon fichier texte type deux informations m'indiquant le nombre d'élément et le temps total. Ces données sont de natures différentes et donc classées dans des variables différentes. Le problème du programme initial ne venait pas de là.

    Thx anyway

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

Discussions similaires

  1. Lecture fichier txt vers tableau alloué
    Par yeboum dans le forum Fortran
    Réponses: 3
    Dernier message: 27/11/2007, 09h31
  2. Lecture fichier TXT
    Par Oncle_Pete dans le forum Delphi
    Réponses: 5
    Dernier message: 16/07/2007, 16h43
  3. lecture fichier txt
    Par stephaneamadeus dans le forum C
    Réponses: 8
    Dernier message: 28/04/2006, 18h47
  4. Lecture fichier txt
    Par licorne dans le forum C
    Réponses: 3
    Dernier message: 03/04/2006, 17h14
  5. [langage] prob lecture fichier .txt
    Par martijan dans le forum Langage
    Réponses: 3
    Dernier message: 16/07/2003, 11h08

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