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 dans un fichier


Sujet :

Entrée/Sortie Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Lecture dans un fichier
    Salut à tous
    j'ai créé un nouveau post pour ce nouveau dilemme

    11 3 32 0 7 40
    5520 1 1 1 5 5
    32* COFI v.2 IDEAS v.11 *
    07/13/05 VVPR 1 0 0
    7 5 20 5 138 0 1 1
    40 0.6978044820836787E+10 0.1238774153323844E+11 0.1901403936761112E+11
    0.3445260201620660E+11 0.4048589907678004E+11 0.6673256768859634E+11
    0.1133983935650789E+12 0.1266392523039663E+12 0.2253733675547690E+12
    0.3181668544154566E+12 0.5255469213822878E+12 0.6458133052264467E+12
    0.7453467372541699E+12 0.1097179188940539E+13 0.1184914291018450E+13
    0.1680306774352798E+13 0.1888042254866058E+13 0.2418814107784721E+13
    0.2931585857945411E+13 0.3329695498910833E+13
    5520 0.4877913475036621E+01 0.0000000000000000E+00 0.4864388942718506E+01
    0.0000000000000000E+00 0.4849582672119141E+01 0.0000000000000000E+00
    0.4833709239959717E+01 0.0000000000000000E+00 0.4816733837127686E+01
    0.0000000000000000E+00 0.4793504714965820E+01-0.3685846924781799E+00
    0.4763874053955078E+01-0.3189862668514252E+00 0.4729751586914063E+01



    Voilà où j'en suis : j'ai copié les 5 premières lignes.
    A présent je voudrais copié les ligne suivantes du nombre 40 (en gras noir) jusqu'à la ligne qui commence par 5520 (rouge gras) non incluse.
    Mon idée est de stocker ce nombre 5520 dans une variable de type string. Je la récupère en fait dès la deuxième ligne (il s'agit du même nombre).
    Donc si je récapitule, je copie les 5 premières lignes en stockant le 5520 de la 2ème ligne. Arrivé au niveau de la 6ème ligne je souhaite faire une boucle genre while (jusqu'à trouver le caractère 5520) stocker les lignes avec readLine().
    Voici le bout de programme que j'ai fais pour ça.



    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
    public String parse_vvp3() { 
        String tmp3 = ""; 
        String num = ""; 
        int moment = 0; 
        try { 
     FileReader f_r = new FileReader(f_atila); 
     StreamTokenizer st = new StreamTokenizer(f_r); 
     st.wordChars('0','9'); 
           BufferedReader br = new BufferedReader(new FileReader(f_atila)); 
     br.readLine(); 
     
     while (st.nextToken() != StreamTokenizer.TT_EOF) { 
       switch (moment) { 
         case 0: 
      if (st.ttype == StreamTokenizer.TT_NUMBER) { 
       num = "" + (int)st.nval; 
       JOptionPane.showMessageDialog(null,"Erreur1","Erreur",JOptionPane.ERROR_MESSAGE); 
       moment = 1; 
      } 
      else { 
       JOptionPane.showMessageDialog(null, 
              "Erreur2","Erreur",JOptionPane.ERROR_MESSAGE); 
      } 
      break; 
         case 1: 
      for (int i=0; i<4; i++) { 
       br.readLine(); 
       moment = 1; 
       break; 
      } 
      moment = 2; 
      break; 
         case 2: 
      while ((tmp3 = br.readLine()) != num) { 
       tmp3 = br.readLine(); 
       moment = 2; 
      } 
      br.close(); 
      break; 
       }//fin switch 
     }//fin while 
        }//fin try 
        catch (Exception ex) { 
          JOptionPane.showMessageDialog(null, 
           "Erreur lors de la lecture vvp3 du fichier " + 
           f_atila.getName()+num, 
           "Erreur", 
           JOptionPane.ERROR_MESSAGE); 
        System.exit(0); 
        } 
        return tmp3; 
      }//fin parse_vvp3
    La compilation se lance sans erreur. Mais lorsque je passe à l'éxécution tout se passe comme si c'était une boucle infinie.
    Je pense qu'en fait il ne récupère pas le bon "num" c'est-à-dire le 5520 ......
    Qu'en pensez-vous?
    La méthode pour récupérer les lignes vous semble-t-elle bonne ?

    Mille merci pour votre aide

  2. #2
    Membre habitué Avatar de Kenji
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Points : 143
    Points
    143
    Par défaut
    A vue de nez comme ça:
    Déja tu comparares pour comparer deux String tu ne peux pas utiliser != il faut utiliser les méthodes compareTo ou equals.
    Ensuite tu récupères toute la ligne il me semble?
    Il faut donc que isoles ton nombre ou bien que tu utilises contains.
    En espérant ne pas mettre tromper.

  3. #3
    Membre actif
    Inscrit en
    Juillet 2003
    Messages
    407
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 407
    Points : 252
    Points
    252
    Par défaut
    voila comment lire proprement un fichier
    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
     
           FileReader fr = new FileReader (f_atila);
            BufferedReader br = new BufferedReader (fr);
            String line = null;
           int count=0;
            while (     (line = br.readLine()) != null & count<5)
            {
               traitement de la ligne //
               count++;
               if (count == 5)
                     {
                        // tu traites ta cinquime ligne //
                      }
            }
             while (     (line = br.readLine()) != null )
            {
               //traitement des  autres lignes  //
     
            }
            br.close();
            fr.close();
     
            return aList;
    ;-) cordialement

  4. #4
    Candidat au Club
    Inscrit en
    Juillet 2005
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    peppena, il y a un probleme dans ton code, tu pourras jamais entre dans ta condition si tu mets count < 5

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    salut
    merci beaucoup pour votre aide.
    J'ai simplifié mon programme mais j'ai toujours un problème.
    j'ai abandonné l'utilisation simultanée du StreamTokenizer et du BufferedReader pour n'utiliser finalement que BufferedReader.
    Je veux stocker la première valeur (un entier, 5520) de la seconde ligne car elle code le fichier.
    J'ai donc défini un BufferedReader reader ...
    J'ai sauté la première ligne avec un readLine() sans stocké sa valeur.
    Je suis donc à présent sur la seconde ligne.
    Naïvement, j'ai pensé qu'écrire

    int num;
    num=reader.read();

    capturerait le 1er caractère autrement dit le 1er entier qui m'intéresse; hélas ce n'est pas le cas. J'ai affiché ce que ces lignes capturaient réellement : il s'agit du 3ème entier de la 1ère ligne (32)

    Je ne vois vraiment pas pourquoi il me prend la 3ème valeur de la 1ère ligne alors que je l'ai sauté ... enfin je pense
    De plus j'ai essayé d'enlever le 1er readLine() et d'en rajouter pour voir si c'était toujours le cas, et c'est effectivement toujours le cas.


    voici le 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
    public String parse_vvp3() {
        String tmp3 = "";
        int num;
        try {
     BufferedReader br = new BufferedReader(new FileReader(f_atila));
     BufferedWriter bw;
     bw = new BufferedWriter(new FileWriter(f_sysnoise,true));
     br.readLine();br.readLine();br.readLine();br.readLine();
     num = br.read();
     System.out.println(num);
     String numero = new String();
     numero = numero.valueOf(num);
     System.out.println(numero);
     br.readLine();
     while ((tmp3 = br.readLine()) != null) {
      tmp3 = br.readLine();
      bw.write(tmp3 + "\r");
       if ( (tmp3 = br.readLine()).startsWith("5520")) {
       System.out.println("thales");
       br.close();System.exit(0);
      }
     }
     br.close();    
        }//fin try
        catch (Exception ex) {
          JOptionPane.showMessageDialog(null,
           "Erreur lors de la lecture vvp3 du fichier " +
           f_atila.getName(),
           "Erreur",
           JOptionPane.ERROR_MESSAGE);
        System.exit(0);
        }
        return tmp3;
      }//fin
    Merci pour votre aide
    ++

  6. #6
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Le problème est résolu
    il me sortait le code ascii de l'espace

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

Discussions similaires

  1. Lecture dans un fichier ne donnant rien
    Par gandf dans le forum C++Builder
    Réponses: 4
    Dernier message: 17/10/2005, 18h56
  2. macros word et lecture dans un fichier excel
    Par antrax2013 dans le forum Windows
    Réponses: 2
    Dernier message: 01/10/2005, 19h05
  3. Réponses: 20
    Dernier message: 25/09/2005, 15h07
  4. [Débutant] Lecture dans un fichier texte
    Par babemagus dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 07/07/2005, 12h17
  5. Réponses: 12
    Dernier message: 14/06/2004, 13h06

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